Spis treści:

Kurs z zatrudnieniem: „Zawód Inżynier Testów”
Dowiedz się więcejTestowanie próbne można porównać do testu zderzeniowego, ale zamiast antropomorficznych manekinów wykorzystuje się w nim dublety testowe zwane mockami. W tym artykule szczegółowo omówimy, czym są mocki, jak je tworzyć i kiedy ich użycie może prowadzić do negatywnych konsekwencji. Przeprowadzimy również test próbny, aby przećwiczyć pisanie własnych duplikatów oprogramowania.
- Czym jest testowanie próbne?
- Kiedy go używać?
- Narzędzia testowe?
- Przygotowania?
- Testy z zależnościami wewnętrznymi?
- Testy z zależnościami zewnętrznymi?
Czym jest testowanie próbne?
Testowanie próbne to technika testowania oprogramowania, w której rzeczywiste komponenty systemu są zastępowane obiektami testowymi zwanymi „duplikatami”. Takie duplikaty mogą obejmować fałszywe bazy danych, symulowane serwery poczty i inne złożone systemy, które umożliwiają uruchamianie testów bez konieczności interakcji z rzeczywistymi komponentami. Obiekty testowe jedynie symulują funkcjonalność rzeczywistych systemów i nie zawierają rzeczywistej logiki ani danych, co pozwala programistom na skuteczniejszą identyfikację błędów i weryfikację funkcjonalności programu w kontrolowanym środowisku. Takie podejście znacznie przyspiesza proces testowania i zapewnia bardziej elastyczne zarządzanie zasobami.
Istnieją dwa główne typy obiektów testowych: obiekty pozorowane i obiekty zastępcze. Każdy z nich ma swoje własne podkategorie. Chociaż system ten może wydawać się skomplikowany, szczegółowo omówimy każdy aspekt, aby wyjaśnić różnice i zastosowania obiektów pozorowanych i obiektów zastępczych w testowaniu oprogramowania.
Obiekt pozorowany to obiekt testowy służący do symulowania zależności wychodzących w oprogramowaniu. „Wychodzący” oznacza, że aplikacja wchodzi w interakcję z systemami zewnętrznymi w celu uzyskania lub modyfikacji danych. Wykorzystanie obiektów pozorowanych w testowaniu pozwala programistom na izolowanie funkcjonalności i weryfikację działania systemu bez konieczności dostępu do rzeczywistych usług zewnętrznych. Przyspiesza to proces testowania i zapewnia wyższą niezawodność wyników. Obiekty pozorowane są szeroko stosowane w tworzeniu i testowaniu oprogramowania, przyczyniając się do skuteczniejszego wykrywania błędów i poprawy jakości kodu.
Tworząc aplikację do wysyłania wiadomości e-mail za pośrednictwem serwera poczty, możemy użyć serwera pozorowanego. Zamiast faktycznego wysyłania wiadomości e-mail za każdym razem, serwer pozorowany akceptuje żądania wysłania, rejestruje informacje o zamierzonych wiadomościach i zwraca pozorowane potwierdzenia pomyślnego wysłania. Pozwala nam, jako programistom, efektywnie testować kod bez konieczności interakcji z prawdziwym serwerem pocztowym. Korzystanie z serwera pozorowanego znacznie upraszcza proces testowania i pozwala uniknąć niepożądanych konsekwencji związanych z wysyłaniem prawdziwych wiadomości e-mail.
Mock to narzędzie testowe, które zapewnia wiarygodną implementację wymaganej funkcjonalności. Nie tylko zwraca z góry określone wartości, ale także monitoruje wykonywanie kodu, zapewniając jego poprawność. Ponadto Mock udostępnia nagrania rozmów, umożliwiając programistom analizę i debugowanie procesu testowania. To narzędzie jest szczególnie przydatne podczas pisania testów jednostkowych, ponieważ pomaga symulować interakcje z zależnościami i kontrolować zachowanie testowanego kodu. Korzystanie z Mock poprawia jakość testowania i sprzyja bardziej efektywnemu rozwojowi oprogramowania.
Stub to obiekt testowy, który symuluje wpływy zewnętrzne, takie jak żądania. Na przykład, jeśli opracowaliśmy klasę do pobierania danych pogodowych z usługi zewnętrznej, ważne jest, aby unikać wysyłania prawdziwych żądań podczas testowania. Aby to osiągnąć, możemy utworzyć stub — obiekt pozorowany, który wygeneruje żądanie i zwróci ustaloną wartość temperatury. Pozwala nam to skutecznie testować naszą aplikację bez polegania na dostępności usługi zewnętrznej lub marnowania zasobów na rzeczywiste żądania.
Mocki i stuby występują w kilku odmianach, różnice między nimi są niewielkie i dotyczą głównie niuansów implementacji. Na przykład, szpieg to rodzaj mocka, który jest tworzony ręcznie, bez użycia gotowych narzędzi, które omówimy w następnej sekcji.
Główne typy stabilizatorów (stabów) obejmują kilka kategorii, z których każda ma swoje własne cechy i zastosowania. Główne typy stabilizatorów obejmują: stabilizatory mechaniczne, które zapewniają stabilność produktów podczas działania; stabilizatory elektroniczne, które pozwalają na dostosowanie parametrów operacyjnych stabilizatorów; oraz stabilizatory programowe, które służą do przetwarzania danych i utrzymywania stabilności systemu. Każdy z tych typów stubów odgrywa istotną rolę w różnych branżach, w tym w produkcji, elektronice i oprogramowaniu, zapewniając niezawodność i wydajność.
- Atrapa to uproszczona wersja stubu, która jest używana jako symbol zastępczy. Zachowanie atrapy jest ignorowane; Jest to konieczne, aby spełnić wymagania kompilatora. Prostym przykładem obiektu pozornego jest popularny program dla początkujących „Hello, world”.
- Obiekt pozorny to obiekt bardziej złożony. Nie tylko wypełnia on przestrzeń w kodzie, ale może również zwracać różne wartości w zależności od scenariusza. Przykładem obiektu pozornego jest kolekcja testowa symulująca działanie bazy danych.
Podczas testowania oprogramowania, niezależnie od rodzaju użytego obiektu testowego, czy jest to obiekt pozorowany, szpieg, stub, fałszywy czy pozorny, często wszystkie są łączone pod ogólną nazwą „mocks”. Jest to ugruntowana praktyka w programowaniu, chociaż w rzeczywistości każdy z tych typów obiektów testowych ma swoje własne cechy i przeznaczenie. Teraz, gdy posiadasz te informacje, będziesz w stanie dokładniej interpretować terminologię i stosować odpowiednie techniki w celu poprawy jakości swojego kodu. Właściwe zrozumienie różnic między obiektami testowymi pomoże Ci tworzyć skuteczniejsze i bardziej niezawodne testy, co z kolei przełoży się na poprawę jakości Twojego oprogramowania.
Kiedy używać obiektów mock
W branży programistycznej ugruntowana jest praktyka, zgodnie z którą komponenty należy zastępować obiektami mock tylko w przypadkach, gdy nie są one bezpośrednio częścią programu głównego, ale z którym ten wchodzi w interakcję. Takie systemy obejmują bazy danych, serwery poczty, systemy plików, magistrale komunikatów i podobne elementy. W terminologii naukowej komponenty te nazywane są „zewnętrznymi zależnościami zmienianymi poza procesem”. Korzystanie z obiektów mock pozwala uprościć testowanie i zwiększyć niezawodność oprogramowania poprzez odizolowanie testowanej logiki od czynników zewnętrznych.
Zastępowanie zależności obiektami mock znajdującymi się wewnątrz aplikacji nie ma sensu. Testy tworzone dla takich obiektów stają się kruche i koncentrują się na szczegółach implementacji, a nie na końcowym wyniku. Bardziej efektywnym podejściem jest użycie rzeczywistych obiektów do testowania, co pozwala ocenić zachowanie systemu jako całości i uniknąć problemów związanych z niedoskonałymi makietymi. Testowanie oryginalnych obiektów zapewnia bardziej wiarygodne i solidne wyniki.

Przeczytaj również:
Testy jednostkowe to metoda testowania oprogramowania, w której sprawdzane jest prawidłowe działanie poszczególnych modułów lub komponentów kodu. Pozwalają programistom upewnić się, że każda część programu działa zgodnie z przeznaczeniem i pomagają zidentyfikować błędy na wczesnym etapie procesu tworzenia oprogramowania. Testy jednostkowe odgrywają kluczową rolę w procesie tworzenia oprogramowania, ponieważ przyczyniają się do jakości kodu i przyspieszają debugowanie.
Należy zauważyć, że testy jednostkowe pomagają skrócić czas potrzebny na testowanie i wdrażanie nowych funkcji oraz dają pewność co do stabilności istniejącej funkcjonalności. Regularne stosowanie testów jednostkowych podczas tworzenia oprogramowania pomaga ulepszyć dokumentację kodu, ponieważ testy służą jako przykład jego oczekiwanego zachowania.
Co więcej, testy jednostkowe ułatwiają refaktoryzację kodu, umożliwiając programistom wprowadzanie zmian bez obawy o uszkodzenie istniejącej funkcjonalności. W rezultacie, stosowanie testów jednostkowych nie tylko poprawia jakość oprogramowania, ale także sprawia, że proces tworzenia oprogramowania jest bardziej wydajny i przejrzysty.
To podejście ma swoje zalety, ale pomija ważną kwestię: systemy zewnętrzne mogą również stanowić element implementacji. Na przykład, jeśli baza danych działa wyłącznie z naszą aplikacją, powinna być traktowana jako integralna część systemu i testowana na etapie tworzenia. Zapewni to pełniejsze i bardziej niezawodne działanie aplikacji jako całości, uwzględniając wszystkie interakcje z komponentami zewnętrznymi.
Artykuł Vladimira Khorikova „When to Mock” (przetłumaczony na Habr) przedstawia bardziej zaawansowane podejścia do wykorzystania mocków. Autor argumentuje, że mocki powinny być stosowane tylko do zależności niezarządzanych i niezwiązanych z procesami. Oznacza to, że mocki powinny być stosowane do komponentów, na które nie mamy bezpośredniego wpływu. Takie podejście znacznie poprawia efektywność testowania i zmniejsza prawdopodobieństwo wystąpienia błędów.
Testujemy klasę PaymentProcessor, która odpowiada za przetwarzanie płatności przychodzących. Klasa ta współdziała z zewnętrzną bramką płatności, zaimplementowaną w klasie PaymentGateway, do której nie mamy bezpośredniego dostępu. Testowanie funkcjonalności PaymentProcessor jest ważne dla zapewnienia prawidłowego przetwarzania transakcji i niezawodności systemu.
PaymentGateway to niezarządzana zależność, ponieważ wchodzi w interakcje z zewnętrznymi systemami płatności, do których mamy ograniczony dostęp. Ponieważ testowanie bramki płatności przy użyciu prawdziwych pieniędzy jest niepożądane, wskazane jest rozważenie utworzenia obiektu pozorowanego w celu jej symulacji. Pozwoli nam to skutecznie przetestować integrację z bramką płatności bez ryzykowania środków i zapewni stabilność testów. Wykorzystanie obiektów pozorowanych w takich przypadkach przyczynia się do bardziej elastycznego i bezpiecznego procesu rozwoju, pozwalając nam skupić się na funkcjonalności aplikacji.
Ma to dwie główne korzyści:
- Izolujemy naszą klasę od systemów zewnętrznych. Naszym celem jest przetestowanie, jak PaymentProcessor przetwarza płatności, a nie jak działają zewnętrzne systemy płatności. Mockowanie PaymentGateway izoluje testowanie PaymentProcessor od rzeczywistych systemów płatności.
- Możemy zaimplementować dowolne scenariusze testowe. Na przykład skonfiguruj mock PaymentGateway, aby emulował odpowiedzi systemu płatności dla udanych i nieudanych płatności.
Należy pamiętać, że mockowanie komponentów wewnętrznych może być uzasadnione w pewnych sytuacjach. Na przykład, jeśli planujesz zintegrować komponent B z testowaniem komponentu A, ale z jakiegoś powodu nie jest to możliwe – na przykład kierownik zespołu nie wybrał jeszcze biblioteki lub praca z JSON zajmuje dużo czasu – wówczas dopuszczalne jest użycie mock dla komponentu B. Pozwoli to na kontynuowanie rozwoju i testowania komponentu A bez opóźnień. Należy jednak pamiętać, że nadużywanie tego podejścia może prowadzić do problemów w przyszłości, dlatego należy je stosować oszczędnie.
Narzędzia do testowania pozorowanego
Po zapoznaniu się z teorią czas przejść do praktyki. Zacznijmy od zbudowania podstawowego zestawu narzędzi do testowania pozorowanego w Pythonie. Umożliwi to efektywne testowanie i zapewni niezawodność rozwiązań programistycznych.
Unittest jest częścią standardowej biblioteki Pythona i zapewnia potężne środowisko do tworzenia i uruchamiania testów. Umożliwia tworzenie obiektów pozorowanych, które odtwarzają zachowanie zależnych komponentów, umożliwiając izolację testowanego kodu i poprawę jego jakości. Warto jednak zauważyć, że testy jednostkowe nie są zaprojektowane do symulowania usług zewnętrznych, co ogranicza ich zastosowanie w niektórych scenariuszach. Korzystanie z testów jednostkowych pomaga zwiększyć niezawodność oprogramowania i upraszcza proces debugowania, czyniąc je niezbędnym narzędziem w arsenale programisty.
Zalety: Wygodna składnia do generowania obiektów pozorowanych.
Wady: Ograniczone możliwości symulowania serwerów zewnętrznych, ponieważ Unittest nie oferuje skutecznych narzędzi do tworzenia serwerów pozorowanych i emulowania zewnętrznych usług HTTP. Może to utrudniać testowanie interakcji z interfejsami API i innymi zdalnymi zasobami, co z kolei może negatywnie wpłynąć na jakość testów i niezawodność aplikacji.
Pytest.mock to zaawansowany moduł biblioteki Pytest, który oferuje zaawansowane możliwości tworzenia obiektów typu mock w porównaniu z Unittest. Chociaż korzystanie z Pytest.mock może wydawać się bardziej skomplikowane, jego funkcjonalność może znacznie uprościć proces testowania w Pythonie. Ten moduł udostępnia elastyczne narzędzia do symulacji zachowania obiektów, co usprawnia testowanie i pozwala uniknąć zależności od zasobów zewnętrznych.
Zaletami korzystania z obiektów typu mock są elastyczna konfiguracja zachowania oraz możliwość weryfikacji wywołań metod. Pozwala to na dokładniejsze symulowanie zachowania zależności w testach, co z kolei przyczynia się do wyższej jakości i niezawodności kodu. Obiekty typu mock pomagają programistom izolować testowane komponenty, co ułatwia identyfikację błędów i usprawnia proces debugowania.
Wadą korzystania z tego języka programowania jest jego złożona składnia, która może być trudna dla początkujących. Nauka podstaw i zasad kodowania wymaga czasu i wysiłku. Może to stanowić barierę dla osób, które dopiero rozpoczynają swoją przygodę z programowaniem. Dlatego ważne jest, aby wziąć to pod uwagę przy wyborze technologii do szkoleń i rozwoju.

Czytanie jest ważnym aspektem naszego życia, który przyczynia się do rozwoju osobistego. Pomaga poszerzać horyzonty, wzbogacać słownictwo i rozwijać krytyczne myślenie. Książki, artykuły i badania naukowe dają wyjątkową okazję do zdobycia nowej wiedzy i spojrzenia na świat. Co więcej, czytanie może być świetnym sposobem na relaks i ucieczkę od codziennej rutyny. Regularne czytanie poprawia koncentrację, pamięć i umiejętności analityczne, dzięki czemu jest nie tylko angażujące, ale i satysfakcjonujące. Ważne jest, aby znaleźć czas na czytanie w swoim harmonogramie, aby zmaksymalizować korzyści i wzbogacić swój wewnętrzny świat.
Przewodnik po Pytest: Testowanie kodu w Pythonie
Pytest to jeden z najpopularniejszych frameworków do testowania w Pythonie, oferujący potężne narzędzia do walidacji kodu. Pozwala programistom na łatwe pisanie testów, zachowując jednocześnie wysoki poziom elastyczności i prostoty. W tym przewodniku omówimy kluczowe funkcje Pytest i jego zalety w testowaniu aplikacji w Pythonie.
Pytest obsługuje wiele typów testów, w tym testy funkcjonalne i integracyjne. Jego prosta i intuicyjna struktura pozwala na szybkie tworzenie funkcji testowych, znacznie upraszczając proces tworzenia oprogramowania. Możesz zacząć od prostych testów, a następnie przejść do bardziej złożonych, w tym testowania kodu asynchronicznego i pracy z zestawami parametrów (fixtures) do przygotowywania danych.
Jedną z głównych zalet Pytest jest jego rozszerzalność. Wtyczki pozwalają dodawać nowe funkcje i ulepszać funkcjonalność testów. Dostępnych jest wiele gotowych wtyczek, które mogą pomóc Ci w pracy, na przykład do integracji CI/CD, obsługi różnych formatów raportów i wielu innych.
Pytest oferuje również zaawansowane narzędzia do analizy wyników testów. Możesz łatwo śledzić sukces testów i uzyskiwać pełne informacje o błędach, co pomaga szybko znaleźć i naprawić błędy w kodzie.
Aby rozpocząć korzystanie z Pytest, wystarczy zainstalować go za pomocą pip i utworzyć proste pliki testowe. Zalecamy przestrzeganie ogólnie przyjętych standardów nazewnictwa, co ułatwi wyszukiwanie i uruchamianie testów. Korzystanie z Pytest nie tylko przyspiesza proces testowania, ale także poprawia jakość kodu, wspierając bardziej stabilne tworzenie oprogramowania.
Podsumowując, Pytest to potężne narzędzie do testowania kodu Pythona, oferujące programistom elastyczność, prostotę i liczne możliwości poprawy jakości ich produktów programistycznych.
Postman to potężne narzędzie do testowania interfejsów API i generowania żądań HTTP. Umożliwia tworzenie serwerów pozorowanych, co jest wygodne w emulowaniu działania interfejsu API i testowaniu interakcji z usługami zewnętrznymi. Korzystanie z Postmana upraszcza proces tworzenia i testowania, zapewniając programistom narzędzia niezbędne do efektywnej pracy z interfejsami API.
Zalety:
- Intuicyjny interfejs do tworzenia żądań HTTP i testowania interfejsów API.
- Możliwość tworzenia serwerów pozorowanych w celu emulowania działania interfejsu API.
- Dobra integracja z różnymi usługami i narzędziami testowymi.
- Niezależność od języka programowania.
Wady korzystania z niektórych produktów lub usług mogą znacząco wpływać na wybór konsumenta. Po pierwsze, może to być wysoka cena, która czyni produkt niedostępnym dla szerokiego grona odbiorców. Po drugie, niektóre towary mogą być niskiej jakości, co prowadzi do szybkiego zużycia i konieczności wymiany. Warto również zwrócić uwagę na brak funkcjonalności, gdy produkt nie spełnia oczekiwań użytkownika lub nie rozwiązuje zgłoszonych problemów. Ponadto brak wsparcia ze strony producenta lub ograniczone informacje o produkcie mogą powodować niezadowolenie klientów. Wreszcie, trudności w użytkowaniu lub instalacji mogą stanowić poważną przeszkodę dla wielu użytkowników. Wszystkie te aspekty są ważne do rozważenia przy wyborze i ocenie produktów dostępnych na rynku.
- Nie nadaje się, jeśli chcesz mockować cokolwiek innego niż API i żądania HTTP.
- Wersja bezpłatna pozwala tylko na 1000 mocków miesięcznie.

Przygotowania
W poniższych sekcjach skupimy się na tworzeniu makiet, które będą symulować dwa główne typy zależności: zewnętrzne i wewnętrzne. Przed rozpoczęciem tego zadania ważne jest, aby poprawnie skonfigurować całą niezbędną infrastrukturę. Zapewni to solidne podstawy do testowania i rozwoju.
Przed rozpoczęciem upewnij się, że masz zainstalowanego Pythona. Jeśli go nie masz, pobierz instalator z oficjalnej strony Pythona i postępuj zgodnie z instrukcjami instalacji. Proces instalacji nie jest bardziej skomplikowany niż instalacja przeglądarki. Po zakończeniu instalacji zaleca się sprawdzenie, czy zakończyła się ona pomyślnie. Aby to zrobić, otwórz wiersz poleceń (w systemie Windows można to zrobić, naciskając kombinację klawiszy Win + R) i wpisz:
Jeśli Python jest zainstalowany na Twoim urządzeniu, zobaczysz jego wersję. Aby to zrobić, otwórz wiersz poleceń lub terminal i wpisz polecenie «python —version» lub «python3 —version». Dzięki temu szybko ustalisz, która wersja Pythona jest aktywna na Twoim komputerze. Upewnij się, że używasz najnowszej wersji, aby w pełni korzystać z bibliotek i narzędzi programistycznych.

Jeśli polecenie nie jest sformułowane poprawnie, cmd nie będzie w stanie zrozumieć Twoich intencji. Może to prowadzić do błędów i trudności podczas wykonywania poleceń. Dlatego ważne jest, aby formułować polecenia precyzyjnie i stosować poprawną składnię, aby zapewnić prawidłowe wykonywanie zapytań wiersza poleceń. Prawidłowe korzystanie z wiersza poleceń pozwala na efektywne zarządzanie systemem i wykonywanie niezbędnych operacji bez błędów.

Zalecamy korzystanie ze zintegrowanego środowiska programistycznego (IDE), które znacznie uprości pracę z kodem, eliminując potrzebę ręcznego określania ścieżek systemowych i importów. W naszym przypadku polecamy PyCharm. Instalacja tego IDE jest prosta: wystarczy pobrać plik instalacyjny z oficjalnej strony internetowej i postępować zgodnie z instrukcjami krok po kroku. Korzystanie z PyCharm zwiększy Twoją produktywność i uprości tworzenie projektów w Pythonie.
W tej sekcji przyjrzymy się, jak tworzyć makiety w Postmanie. Jeśli jesteś testerem pracującym z interfejsami API, z pewnością spotkasz się z tym potężnym środowiskiem narzędziowym. Instalacja Postmana jest prosta: wystarczy pobrać plik instalacyjny z oficjalnej strony internetowej, a program poprowadzi Cię przez proces instalacji. Makiety w Postmanie pomagają symulować zachowanie API, co upraszcza testowanie i pozwala skupić się na weryfikacji logiki aplikacji.
Testowanie makiety z zależnościami wewnętrznymi
Naszym celem jest przetestowanie procesora zamówień. Pozwoli nam to zidentyfikować potencjalne błędy i poprawić funkcjonalność systemu. Efektywne testowanie procesora zamówień zapewni wysoką jakość obsługi klienta i zoptymalizuje procesy biznesowe.
Utwórz projekt o nazwie test_example, który będzie odpowiadał nazwie folderu głównego w PyCharm. W ramach tego projektu utwórz plik o nazwie order.py, który będzie obiektem naszych testów.
Ten tekst opisuje dwie klasy: NotificationService, która odpowiada za wysyłanie powiadomień, oraz Order, która odpowiada za przetwarzanie zamówień. Należy zauważyć, że jedna z metod klasy Order zależy od NotificationService. Jednak w sytuacji, gdy implementacja NotificationService jest niedostępna, a funkcjonalność klasy Order wymaga przetestowania, możemy utworzyć obiekt pozorowany dla NotificationService. W tym celu utwórz nowy folder o nazwie tests w folderze test_example, a w nim plik o nazwie test_order.py.
W podanym przykładzie obiekt pozorowany mock_notification_service został utworzony za pomocą parametru spec_set. Ten parametr pozwala zdefiniować listę metod i atrybutów, które musi posiadać makieta. Wyraźnie określiliśmy, że makieta będzie zawierać wyłącznie metody i atrybuty zdefiniowane w klasie NotificationService. W ten sposób, za pomocą jednej linijki kodu, stworzyliśmy makiet o złożonej logice, znacznie upraszczając proces testowania i zwiększając jego wydajność.
W tym teście weryfikujemy, czy metoda send_notification jest wywoływana z poprawnymi argumentami. Aby uruchomić plik test_order.py, kliknij przycisk Uruchom.

Test uznaje się za pomyślny, jeśli metoda send_notification mock_notification_service Obiekt pozorowany jest wywoływany jednokrotnie z podanymi argumentami. W tym przypadku otrzymujemy następujący komunikat:

Uruchommy dodatkowe testy dla naszej klasy Order. Następujące funkcje testowe należy dodać do klasy TestOrder:

Załóżmy, że nasza klasa testowa zawsze raportuje pozytywne wyniki, niezależnie od faktycznych osiągnięć. Sprawdźmy to. Aby to zrobić, dodamy funkcję testową do klasy TestOrder, która celowo zakończy się niepowodzeniem.
Jeśli wszystkie kroki zostaną wykonane poprawnie, wynik zostanie zaprezentowany w następujący sposób:

Testowanie symulacyjne z zależnościami zewnętrznymi
Rozważmy sytuację, w której Twój komponent musi wejść w interakcję z zasobem, do którego nie masz bezpośredniego dostępu. W tym przypadku utworzymy symulowany serwer zdalny, który udostępni Twojej aplikacji dane pogodowe. Takie podejście pozwala na testowanie funkcjonalności bez łączenia się z prawdziwym API, co znacznie uprości i przyspieszy proces tworzenia. Serwer symulacyjny będzie symulował oczekiwane odpowiedzi, zapewniając w ten sposób realistyczne testowanie Twojego komponentu.
Utwórz nowy projekt o nazwie MockServerTest. W katalogu głównym projektu utwórz dwa pliki: weather_app i mock_server. Utwórz również folder o nazwie tests. Najpierw musisz zaimplementować klasę WeatherService w pliku weather_app.
Nasza klasa implementuje pojedynczą metodę get_temperature(), która wysyła żądanie GET i odbiera odpowiedź z serwera. Ta funkcjonalność jest wystarczająca do wykonywania bieżących zadań.
Utworzenie serwera pozorowanego to ważny krok w tworzeniu aplikacji. Aby to zrobić, otwórz plik mock_server i wklej do niego poniższy kod. Pozwoli to na symulację działania części serwerowej aplikacji, upraszczając testowanie i opracowywanie logiki po stronie klienta. Upewnij się, że kod spełnia Twoje wymagania i poprawnie obsługuje niezbędne żądania. Serwer pozorowany pomoże Ci skutecznie przetestować funkcjonalność Twojej aplikacji, niezależnie od stanu rzeczywistego serwera.
Utwórz plik test_weather_app_with_mock_server w folderze tests. Ten plik będzie używany do pisania testów, które sprawdzą funkcjonalność Twojej aplikacji pogodowej za pomocą serwera pozorowanego. Serwer pozorowany pozwoli Ci symulować odpowiedzi z rzeczywistego API, upraszczając proces testowania. Upewnij się, że testy obejmują wszystkie kluczowe aspekty aplikacji, w tym pobieranie danych pogodowych, obsługę błędów i wyświetlanie informacji użytkownikowi. Użyj odpowiednich bibliotek testowych i mockingowych, aby zwiększyć wydajność i niezawodność procesu.
Aby zapewnić pomyślne uruchomienie serwera przed testowaniem, musimy utworzyć plik prekonfiguracyjny. W tym celu utwórz plik o nazwie conftest.py w folderze tests. Ten plik posłuży do skonfigurowania testów i zainicjowania niezbędnych komponentów, zapewniając prawidłowe działanie serwera podczas testowania.
Konstrukcja oznaczona symbolem @ na początku reprezentuje element konfiguracyjny (fixture), czyli wstępnie przygotowany fragment danych używany w testowaniu. Ten element konfiguracyjny zawiera funkcję, która wywołuje metodę run_mock_server zaimportowaną z MockServerHandler i inicjuje jej wykonanie. Taka organizacja kodu pozwala na efektywne zarządzanie danymi testowymi i upraszcza proces testowania, co przyczynia się do wyższej jakości tworzenia oprogramowania.
Funkcja test_get_temperature_with_mock tworzy obiekt klasy WeatherService, który jest importowany z modułu weather_app. Funkcja ta porównuje wstępnie zdefiniowaną oczekiwaną temperaturę (expected_temperature) z odpowiedzią serwera. Pozwala to przetestować poprawne działanie usługi pogodowej i upewnić się, że zwraca ona poprawne dane. Testowanie z użyciem obiektów mock pomaga wyizolować funkcjonalność i zapewnia niezawodność aplikacji.
Otwórz program Postman i przejdź do zakładki Mock Servers po lewej stronie. Następnie kliknij przycisk „Utwórz serwer pozorowany”, aby utworzyć nowy serwer pozorowany.

Na następnym Na screen, pozostaw metodę żądania niezmienioną (GET). W polu URL wpisz „weather” i pozostaw kod odpowiedzi 200. W polu „treść odpowiedzi” wstaw strukturę podobną do JSON: {"temperature": 20}. Następnie kliknij „Dalej”.

Podaj nazwę serwera i zamknij reszta pól bez zmian. Kliknij przycisk Utwórz serwer pozorowany.

Serwer został skonfigurowany, a jego nazwa jest wyświetlana po lewej stronie. Teraz musisz uzyskać adres URL serwera. Aby to zrobić, kliknij „Kopiuj adres URL”. przycisk.

Zastąpimy adres localhost tym adresem URL w naszym mock_server i zaktualizujemy pasek adresu w Aplikacja weather_app powinna zostać przeniesiona na nowy adres serwera pozorowanego.
Uruchom weather_app_test_with_mock_server. Oczekiwany wynik powinien spełniać określone kryteria. Upewnij się, że testy działają poprawnie i dostarczają żądanych informacji pogodowych. Aby uzyskać optymalne rezultaty, upewnij się, że wszystkie zależności i ustawienia są poprawnie skonfigurowane. Pozwoli to uzyskać dokładne dane i poprawić wydajność aplikacji.

Serwer automatycznie zakończy swoją pracę po zakończeniu Testowanie.
Dodaj nową funkcję do pliku testowego w celu przeprowadzenia dodatkowych testów. Pomoże to poprawić jakość i niezawodność kodu. Upewnij się, że funkcja jest jasno zdefiniowana i spełnia wymagania testowe. Upewnij się, że skutecznie testuje niezbędne aspekty aplikacji, aby zapewnić jej prawidłowe działanie.
Rozpoczynamy nowy projekt mający na celu rozwiązanie bieżących problemów w naszej branży. Staramy się oferować innowacyjne rozwiązania, które pomogą poprawić wydajność i jakość świadczonych usług. Nasz zespół specjalistów wykorzystuje nowoczesne technologie i zaawansowane techniki, aby zapewnić maksymalną satysfakcję klienta.
Przywiązujemy szczególną wagę do analizy potrzeb rynku i dostosowywania naszej oferty do wymagań użytkowników. Każdy etap rozwoju jest dokładnie testowany, aby zapewnić niezawodność i bezpieczeństwo. Naszym celem jest zostanie liderem w branży poprzez dostarczanie wysokiej jakości rozwiązań spełniających najwyższe standardy.
Bądź na bieżąco, aby być na bieżąco z najnowszymi wiadomościami i osiągnięciami naszego projektu. Jesteśmy przekonani, że dzięki wspólnej pracy możemy osiągnąć znaczące rezultaty i przyczynić się do rozwoju naszej dziedziny.

Teraz Przejdźmy do tworzenia nieudanego testu. Do pliku testowego należy dodać następującą funkcję:
Wprowadzenie obsługi błędów do kodu serwera (mock_server) poprawi jego funkcjonalność. W tym celu zmodyfikuj metodę do_GET w klasie MockServerHandler. Te zmiany pozwolą serwerowi zwracać odpowiedzi o błędach w razie potrzeby, co zwiększy jego odporność i uprości proces debugowania. Skonfigurowanie obsługi błędów pozwoli również na dokładniejsze testowanie aplikacji klienckich współpracujących z tym serwerem.
Na początku pliku dodaj kod importu, który wygląda następująco: from http.server import BaseHTTPRequestHandler. Ten import umożliwi użycie klasy BaseHTTPRequestHandler do tworzenia niestandardowych procedur obsługi żądań HTTP w projekcie. Upewnij się, że ten kod znajduje się na samej górze pliku, aby uniknąć błędów w czasie wykonywania.
Weryfikacja to ważny krok w każdym procesie, umożliwiający identyfikację błędów i wad. Wysokiej jakości weryfikacja pomaga zapewnić wysokie standardy i zgodność z określonymi wymaganiami. Ważne jest, aby zwracać uwagę na każdy aspekt, niezależnie od tego, czy chodzi o tekst, produkt czy usługę. Skuteczna recenzja obejmuje kilka kluczowych elementów: dokładną analizę treści, analizę struktury oraz ocenę trafności treści dla grupy docelowej i jej potrzeb. Regularne recenzje przyczyniają się do poprawy jakości i efektywności, co z kolei przekłada się na lepsze wyniki i zadowolenie klienta. Nie zapominaj, że systematyczne testowanie jest kluczem do sukcesu i rozwoju.
Wszystko się udało: co tak naprawdę nie powinno działać Czy to nie działa?
Wyniki
Gratulujemy opanowania tworzenia i używania mocków. W rzeczywistych scenariuszach testowych kreatywność testera otwiera możliwości ciekawszych i bardziej zróżnicowanych zastosowań różnych typów dubli testowych. Mamy nadzieję, że następnym razem, gdy zetkniesz się z mockami, będziesz pewny swojej wiedzy i będziesz w stanie łatwo poruszać się po tym narzędziu. Jeśli interesuje Cię tworzenie testów w Pythonie, zalecamy zapoznanie się z naszym bezpłatnym kursem Pytest, który pomoże Ci pogłębić umiejętności i poprawić jakość testów.
Dowiedz się więcej o programowaniu i kodowaniu na naszym kanale Telegram. Subskrybuj, aby być na bieżąco z najnowszymi wiadomościami, wskazówkami i przydatnymi treściami!
Przeczytaj także:
- Postman: Czym jest i jak go używać
- „Najpierw staż — potem oferta, pieniądze, sukces”: Jak historyk został testerem
- Popularne pytania i zadania na rozmowach kwalifikacyjnych z testerami

