Top 8 Python Testing Frameworks in 2021

Jeśli myślałeś sobie: „Hmm… od którego języka programowania powinienem zacząć swoją podróż po testach?”. – Python jest twoją odpowiedzią. Ale nie jest on tylko dla początkujących! W ostatnim badaniu, które przeprowadziłem na LinkedIn, możemy zobaczyć, że nawet wśród doświadczonych programistów, prawie 35% głosowało, że Python jest ich najbardziej ulubionym językiem programowania (choć nie za daleko od ulubionej Javy, która zajęła 2 miejsce z 32%).

Przez lata, Python rzeczywiście zyskiwał na popularności zarówno wśród testerów jak i programistów i jest najszybciej rozwijającym się językiem programowania (jak możemy zobaczyć na poniższym wykresie Stack Overflow Trends), a wszyscy wiemy co to oznacza… Popularność = znaczenie!

Pod koniec tego artykułu, moim celem jest pomóc Ci zobaczyć jak potężny jest język programowania Python, i który framework testowy Pythona jest najlepszy dla Twoich potrzeb projektowych.

Co jest takiego wspaniałego w Pythonie dla automatyzacji testów?

Python jest open-source’owym językiem programowania, który został po raz pierwszy wydany w 1991 roku z zamiarem zapewnienia intuicyjnego, prostego, czytelnego dla człowieka, eleganckiego i mniej skomplikowanego języka programowania do pracy. A jeśli chodzi o testowanie, takie cechy są koniecznością, szczególnie gdy mamy w zespole testerów manualnych (którzy niekoniecznie mają umiejętności programistyczne), którzy przechodzą teraz do automatyzacji i mogą korzystać z szybkiej krzywej uczenia się Pythona, aby szybko pisać skrypty.

Jest całkiem sporo powodów, dla których popularność Pythona rośnie w dziedzinie automatyzacji testów i dlaczego jest on uważany za jeden z najlepszych wyborów do automatyzacji testów. Wśród tych powodów znajdziesz: Zen of Python (19 zasad przewodnich filozofii projektowania Pythona), przyjazny dla początkujących, ale również potężny dla ekspertów, jest zarówno obiektowy jak i funkcjonalny, posiada bogatą bibliotekę pakietów do testowania, silną społeczność na całym świecie i wiele więcej! Polecam przeczytać więcej o nim na wspaniałym Blogu AutomationPanda.

Właściwy Python Testing Framework Dla Ciebie

Wraz z rosnącym użyciem Pythona, popularność frameworków testujących opartych na Pythonie również rośnie. Na początku, może to być trochę mylące wiedząc, który z nich wybrać z całego bogactwa narzędzi tam, jak każdy z nich ma swoje plusy i minusy. To powiedziawszy, każdy projekt i organizacja ma inne wymagania i ograniczenia, dlatego musimy wziąć je wszystkie pod uwagę przy wyborze narzędzia, które będzie dla nas najlepsze. Polecam przeczytanie tych świetnych artykułów o tym, jak wybrać odpowiednie narzędzie dla siebie:

  1. How To Select The Right Test Automation Tool
  2. How to Select The Best Tool – Research Process
  3. Criteria for Selecting the Right Functional Testing Tools

I oczywiście – po co istnieją listy plusów i minusów, jeśli nie po to, aby pomóc nam uzyskać dodatkowe wskazówki na temat naszych ulubionych narzędzi, wszystko w jednym miejscu! 😉 Tak więc, zanurkujmy głęboko w 8 najlepszych frameworków testowych Pythona i zbadajmy zarówno ich zalety, jak i wady, abyś mógł zbliżyć się do wyboru idealnego frameworka testowego Pythona dla swoich potrzeb.

Pros i Cons of Top 8 Python Testing Frameworks

  1. Robot Framework
  2. Pytest
  3. TestProject
  4. PyUnit (Unittest)
  5. Nose2
  6. Behave
  7. .

  8. Lettuce
  9. Testify
  10. Conclusion

Robot Framework (RF)

Robot Framework (RF) jest frameworkiem open source do automatyzacji testów akceptacyjnych, ATDD (Accept Test Driven Development) i RPA (Robotic Process Automation). Jego rdzeń jest zaimplementowany w Pythonie, ale może również działać na Jythonie (implementacja Pythona w Javie) i IronPythonie (Python dla .NET framework). Do jego uruchomienia wymagana jest instalacja Pythona w wersji 2.7.14 lub wyższej.

Pros

  • Based on Keyword-driven testing (KDT) approach, thus allowing us to easily create test cases using human-readable keywords (no coding experience required).
  • Supports all operating systems (Windows, Linux, or MacOS), and all applications (web, mobile and desktop apps).
  • Dostarcza przejrzyste i przyjazne dla użytkownika dane raportowe HTML (w tym zrzuty ekranu).
  • Bogaty ekosystem z wieloma interfejsami API, co czyni go wysoce rozszerzalnym frameworkiem i pozwala na integrację z każdym innym narzędziem 3rd party.
  • Wsparcie społeczności i zasoby online.

Konsekwencje

  • Testy równoległe nie są wspierane, ale można je osiągnąć poprzez Selenium Grid lub Pabota (równoległy executor dla RF).
  • Na dobre i na złe zmusza do pracy według predefiniowanej metodologii, Początkowa krzywa uczenia się może być nieco dłuższa niż zwykle dla żółtodziobów
  • Tworzenie generycznych słów kluczowych może trwać dłużej niż samo pisanie zakodowanych testów
  • Niełatwo dostosować raporty.
  • Nie posiada rzeczywistej konstrukcji if/else, ale istnieje kilka sposobów na uzyskanie tego samego efektu (jak można zbadać w ich oficjalnej dokumentacji)

Dolna linia: Jeśli szukasz wdrożenia podejścia ramowego opartego na słowach kluczowych, które pozwoli testerom manualnym i analitykom biznesowym tworzyć testy automatyzacji, RF jest rozwiązaniem dla Ciebie, zapewniając wiele rozszerzeń & bibliotek i łatwość użycia. Jednakże, jeśli szukasz możliwości tworzenia złożonych scenariuszy, ponieważ będziesz musiał wykonać kilka dostosowań, które nie są wbudowane w framework.

Pytest

Pytest jest open-source’owym frameworkiem testowym, który jest prawdopodobnie jednym z najczęściej używanych frameworków testowych Pythona. Pytest wspiera testy jednostkowe, funkcjonalne i API. Aby go uruchomić będziesz potrzebował Pythona w wersji 3.5 lub wyższej.

Pros

  • Pozwala na kompaktowe i proste zestawy testów.
  • Jest wysoce rozszerzalny poprzez użycie wtyczek, takich jak: pytest-randomly, pytest-cov, pytest-django, pytest-bdd.
  • Możesz również dodać wtyczkę pytest html do swojego projektu, aby drukować raporty HTML z jedną prostą opcją wiersza poleceń.
  • Możesz uruchamiać testy równolegle używając wtyczki Pytest pytest-xdist. Możesz przeczytać więcej na ten temat również tutaj.
  • Ma bardzo dużą społeczność.
  • Obsługuje fixtures pomagając Ci pokryć wszystkie kombinacje parametrów bez przepisywania przypadków testowych, i jest świetnym sposobem na zarządzanie kontekstem pomiędzy krokami.

Konsekwencje

  • Kompatybilność nie jest kluczowa dla Pytest, ponieważ mimo że możesz łatwo pisać przypadki testowe z Pytest, nie będziesz w stanie użyć ich w żadnym innym frameworku testowym z powodu użycia unikalnych procedur Pytest.
Dolna linia: Jeśli szukasz do tworzenia, testów jednostkowych, małych i zwięzłych testów, które obsługują złożone scenariusze, ten dojrzały w pełni funkcjonalny framework jest dla Ciebie.

TestProject

TestProject jest 100% DARMOWY kompletny framework automatyzacji z raportami w chmurze. Używając TestProject, możesz łatwo rozwijać automatyzację testów dla urządzeń mobilnych, stron internetowych lub ogólnych celów z Python open source SDK. Obsługuje Python w wersji 3.6 lub wyższej i wspiera zarówno Pytest jak i Unittest. TestProject zawiera wszystkie zależności wymagane jako część pojedynczego międzyplatformowego agenta (Możesz obejrzeć to nagranie webinarium, aby zacząć).

Pros

  • Jeden agent wykonywalny, który zawiera wszystkie biblioteki stron trzecich potrzebne do wykonania i rozwoju automatyzacji testów dla testów mobilnych, internetowych i ogólnych.
  • DARMOWE automatyczne raporty w chmurze w formacie HTML/PDF (w tym zrzuty ekranu).
  • Historia wykonania dostępna przez RESTful API.
  • Zawsze aktualne z najnowszymi i stabilnymi wersjami sterowników Selenium/Appium.
  • Pojedyncze SDK dla testów webowych, Android, iOS i generycznych.
  • Wbudowany runner testowy i możliwości raportowania.
  • Obsługa platform Mac, Windows, Linux i Docker.
  • Duża społeczność i wsparcie: forum, blog i wbudowany czat na żywo.

Konsekwencje

  • Agent może uruchamiać testy pojedynczo, dlatego do testów równoległych musisz użyć Docker Agents.
  • Raporty są dostępne tylko w chmurze TestProject, aby przechowywać je lokalnie będziesz musiał pobrać raport PDF lub użyć RESTful API.
  • Agent potrzebuje połączenia z Internetem aby uruchomić/wykonać testy.

Podsumowanie: Jeśli szukasz pojedynczego frameworka, który obejmuje całe twoje wysiłki automatyzacji end to end, to TestProject jest zdecydowanie tym dla ciebie i idealnym dopasowaniem dla zespołów z mieszanymi zestawami umiejętności, od początkujących do doświadczonych ekspertów automatyzacji.

PyUnit (Unittest)

PyUnit (Unittest) jest frameworkiem testów jednostkowych dla Pythona, który został zainspirowany przez JUnit. Jest to domyślny framework testowy Pythona, który wychodzi z pudełka z pakietem Pythona, a więc ten, z którym większość programistów zaczyna swoje testy.

Pros

  • Ponieważ jest częścią standardowej biblioteki Pythona, nie ma dodatkowych modułów wymaganych do zainstalowania – wychodzi z pudełka z pakietem Pythona.
  • Oferuje proste i elastyczne wykonywanie przypadków testowych.
  • Szybkie generowanie raportów z testów, zarówno raportów XML jak i unittest-sml-reporting.

Konsekwencje

  • Intencje kodu testowego czasami stają się niejasne, ponieważ wspiera abstrakcję.
  • Wymagana jest ogromna ilość kodu typu boilerplate.
  • Ponieważ w oparciu o Junit, metoda nazewnictwa camelCase jest w użyciu, zamiast konwencji nazewnictwa snake_case Pythona.
Dolna linia: Jeśli szukasz podstawowych testów jednostkowych i jesteś zaznajomiony z frameworkami xUnit, bardzo łatwo będzie Ci rozpocząć pracę z PyUnit i prawdopodobnie byłby on dla Ciebie najwygodniejszy, bez konieczności posiadania dodatkowych zależności.

Nose2

Nose2 jest następcą Nose i jest w zasadzie PyUnit (Unittest), ale z wtyczkami. Nose2 rozszerza PyUnit poza jego funkcjonalność z różnymi wtyczkami, które dodają wsparcie dla wykonywania testów, odkrywania testów, dekoratorów, uchwytów, parametryzacji, itp.

Pros

  • Łatwy do rozpoczęcia pracy z nim, ponieważ rozszerza ramy PyUnit (Unittest), które są dostarczane po wyjęciu z pudełka z biblioteką Pythona.
  • Zawiera dużą liczbę wbudowanych wtyczek, które mogą uczynić twoje testy szybszymi i łatwiejszymi.
  • Umożliwia testowanie równoległe za pomocą wtyczki mp.
  • Zbiera testy automatycznie, tak długo jak przestrzegasz kilku prostych wskazówek dotyczących organizacji biblioteki i kodu testowego.

Konsekwencje

  • Brak obszernej dokumentacji, która może cię powstrzymać, jeśli dopiero zaczynasz.
  • Nie jest tak aktywnie utrzymywany w przeciwieństwie do innych frameworków.

Podsumowanie: Jeśli już używasz PyUnit, możesz równie dobrze dać Nose2 strzał i zbadać, jak rozszerza PyUnit.

Behave

Behave jest jednym z najbardziej popularnych frameworków testujących Python BDD (behavior-driven development). Chociaż oficjalnie nie jest częścią projektu Cucumber, działa bardzo podobnie do frameworków Cucumber.

Pros

  • Pozwala na pisanie przypadków testowych w czytelnym języku, co prowadzi do łatwej współpracy między zespołami o podobnych cechach.
  • Duża ilość dokumentacji i wsparcia jest dostępna, aby pomóc w rozpoczęciu pracy.
  • W pełni wspiera język Gherkin – dzięki temu tworzenie plików funkcji nie wymaga żadnej wiedzy technicznej.
  • Ma integracje z Django i Flask.

Konsekwencje

  • Nie ma wsparcia dla równoległego wykonywania.
  • Tylko dla testów czarnej skrzynki.

Podsumowanie: Jeśli Twój zespół podąża za podejściem BDD, masz wcześniejszą wiedzę na temat BDD (taką jak Cucumber, SpecFlow, itp.) i szukasz testów czarnej skrzynki – powinieneś zdecydowanie sprawdzić Behave. Powinieneś również zbadać inne Pythonowe frameworki BDD takie jak: Pytest-bdd, Lettuce (do opisania poniżej), Radish i więcej w tym artykule porównującym frameworki testujące Python BDD. Jeśli potrzebujesz czegoś więcej niż testowanie czarnej skrzynki, to powinieneś szukać gdzie indziej.

Lettuce

Lettuce to kolejny framework Pythona BDD i jest oparty na Cucumber. Wymaga Pythona 2.7.14 lub nowszego.

Pros

  • Wspiera język Gherkin, dzięki czemu umożliwia nawet nietechnicznym członkom zespołu łatwe tworzenie testów przy użyciu języka naturalnego.
  • Podobny do Behave, jest używany głównie do testowania black-box, ale może być używany do większej ilości typów testów. Na przykład, Lettuce może testować różne zachowania i interakcje serwera i bazy danych.

Konsekwencje

  • Brak niektórych z bogactwa funkcji innych frameworków, więc bardziej nadaje się do małych projektów.
  • Jego wsparcie i dokumentacja nie wydają się być utrzymywane.
  • Wymaga dedykowanej komunikacji między wszystkimi interesariuszami projektu: dev, QA i menedżerami, aby upewnić się, że wdrożenie jest udane.

Dolna linia: Jeśli masz mały projekt BDD, Lettuce jest świetną opcją do łatwego, a także tworzenia testów w języku naturalnym wśród wszystkich członków zespołu.

Testify

Testify został zaprojektowany, aby zastąpić wspólne frameworki Unittest i Nose i ma zaawansowane funkcje do standardowego Unittest.

Pros

  • Używany do testów jednostkowych, testów integracyjnych i testów systemowych.
  • Dla tych, którzy są zaznajomieni z Unittest, Testify jest bardzo łatwy do rozpoczęcia pracy.
  • Ma rozbudowane wtyczki.
  • Podobny do Nose2, Testify umożliwia odkrywanie testów.
  • Prosta składnia do metody fixture.

Konsekwencje

  • Brak obszernej dokumentacji, przez co początkujący mogą potrzebować zainwestować w znalezienie odpowiednich zasobów.
  • Testy równoległe nie są łatwe do osiągnięcia.

Podsumowanie: Jeśli masz wcześniejsze doświadczenie z Unittest, będzie Ci całkiem łatwo dostosować istniejące testy do pracy z Testify, więc zdecydowanie warto to sprawdzić.

Konkluzja

Dobiegliśmy do końca tej listy porównawczej pythonowych frameworków testujących, a teraz nadszedł czas, aby wybrać ten, który najbardziej pasuje do Twoich wymagań.

Czy szukasz bardziej podejścia BDD? Czy jest to testowanie jednostkowe, które chcesz osiągnąć, czy bardziej testowanie funkcjonalne? Czy Twój zespół ma doświadczenie techniczne lub w kodowaniu, czy też składa się głównie z początkujących? Te pytania i wiele innych są tymi, które musisz wziąć pod uwagę próbując podjąć decyzję. Każdy z powyższych frameworków ma swoje zalety, jak również wady, i nie ma czegoś takiego jak dobre lub złe, ale raczej odpowiednie. Odpowiedni dla twoich własnych potrzeb i wymagań produktu.

Mam nadzieję, że ten artykuł był w stanie pomóc ci nie tylko w zrozumieniu jak świetny jest Python dla testów automatyzacji, ale także pomóc ci w twojej podróży do łatwego testowania Pythona!

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.