Pokud jste si říkali: „Hmm… jakým programovacím jazykem bych měl začít svou cestu k testování?“. – Python je vaší odpovědí. Není však jen pro začátečníky! V nedávném průzkumu, který jsem provedl na LinkedIn, můžeme vidět, že dokonce i mezi zkušenými programátory hlasovalo téměř 35 % pro to, že Python je jejich nejoblíbenějším programovacím jazykem (i když ne příliš daleko před všemi oblíbenou Javou, která se umístila na 2. místě s 32 %).
V průběhu let Python skutečně získává na popularitě jak mezi testery, tak mezi vývojáři a je to nejrychleji rostoucí programovací jazyk (jak můžeme vidět v grafu trendů Stack Overflow níže), a všichni víme, co to znamená… Popularita = relevance!
Na konci tohoto článku je mým cílem pomoci vám zjistit, jak mocný je programovací jazyk Python a který testovací framework Pythonu se nejlépe hodí pro potřeby vašeho projektu.
Co je na Pythonu tak skvělého pro automatizaci testování?
Python je programovací jazyk s otevřeným zdrojovým kódem, který byl poprvé vydán v roce 1991 se záměrem poskytnout intuitivní, jednoduchý, lidsky čitelný, elegantní a méně komplikovaný programovací jazyk pro práci. A pokud jde o testování, jsou takové vlastnosti nutností, zvláště když máme v týmu manuální testery (kteří nemusí nutně mít programátorské dovednosti), kteří nyní přecházejí na automatizaci a mohou využívat rychlou křivku učení jazyka Python k rychlému psaní skriptů.
Existuje poměrně dost důvodů, proč popularita jazyka Python v oblasti automatizace testů roste a proč je považován za jednu z nejlepších voleb pro automatizaci testů. Mezi těmito důvody najdete např: Python je zen (19 hlavních principů filozofie návrhu Pythonu), je přátelský pro začátečníky, ale výkonný i pro experty, je objektově orientovaný i funkční, má bohatou knihovnu balíčků pro testování, celosvětově silnou komunitu a mnoho dalších! Doporučuji si o něm přečíst více na úžasném blogu AutomationPanda.
Vhodný testovací framework pro Python
S rostoucím používáním Pythonu roste i obliba testovacích frameworků založených na Pythonu. Zpočátku může být trochu matoucí vědět, který z nepřeberného množství nástrojů si vybrat, protože každý z nich má svá pro a proti. Jak již bylo řečeno, každý projekt a každá organizace má jiné požadavky a omezení, a proto je při výběru nástroje, který pro nás bude nejvhodnější, musíme vzít v úvahu všechny. Doporučuji přečíst si tyto skvělé články o tom, jak vybrat ten správný nástroj pro vás:
- Jak vybrat správný nástroj pro automatizaci testování
- Jak vybrat nejlepší nástroj – proces výzkumu
- Kritéria pro výběr správných nástrojů pro funkční testování
A samozřejmě – proč existují seznamy kladů a záporů, když ne proto, aby nám pomohly získat další vodítka o našich oblíbených nástrojích, a to na jednom místě! 😉 Pojďme se tedy ponořit do hloubky 8 nejlepších frameworků pro testování v jazyce Python a prozkoumat jejich výhody i nedostatky, abyste byli o to blíže výběru ideálního frameworku pro testování v jazyce Python pro vaše potřeby.
Výhody a nevýhody 8 nejlepších frameworků pro testování v jazyce Python
- Robot Framework
- Pytest
- TestProject
- PyUnit (Unittest)
- Nose2
- Behave
- Lettuce
- Testify
- Závěr
.
Robot Framework (RF)
Robot Framework (RF) je open source testovací automatizační framework pro akceptační testování, vývoj řízený akceptačními testy (ATDD) a automatizaci robotických procesů (RPA). Jeho jádro je implementováno v jazyce Python, ale může běžet také v jazycích Jython (javovská implementace jazyka Python) a IronPython (framework Python pro .NET). Pro jeho spuštění je třeba nainstalovat Python verze 2.7.14 nebo vyšší.
Pros
- Založen na přístupu KDT (Keyword-driven testing), což nám umožňuje snadno vytvářet testovací případy pomocí lidsky čitelných klíčových slov (nejsou nutné žádné zkušenosti s kódováním).
- Podporuje všechny operační systémy (Windows, Linux nebo MacOS) a všechny aplikace (webové, mobilní a desktopové aplikace).
- Poskytuje přehledné a uživatelsky přívětivé údaje v HTML zprávách (včetně snímků obrazovky).
- Bohatý ekosystém s množstvím rozhraní API, což z něj činí vysoce rozšiřitelný framework a umožňuje integraci s jakýmkoli dalším nástrojem třetí strany.
- Velká podpora komunity a online zdroje.
Nevýhody
- Paralelní testování není podporováno z výroby, ale lze ho dosáhnout pomocí Selenium Grid nebo pomocí Pabot (paralelní spouštěč pro RF).
- V dobrém i zlém vás nutí pracovat podle předem definované metodiky, Počáteční křivka učení může být pro nováčky o něco delší než obvykle
- Vytváření obecných klíčových slov může trvat déle než pouhé psaní kódovaných testů
- Není snadné přizpůsobit sestavy.
- Nemá skutečnou konstrukci if/else, ale existuje několik způsobů, jak dosáhnout stejného efektu (jak lze prozkoumat v jejich oficiální dokumentaci)
Závěr: Pokud chcete implementovat rámcový přístup založený na klíčových slovech, který umožní manuálním testerům a obchodním analytikům vytvářet automatizační testy, je pro vás řešením RF, který poskytuje řadu rozšíření & knihoven a snadno se používá. Pokud si však dáváte pozor na vývoj složitých scénářů, protože budete muset provést některé úpravy, které nejsou ve frameworku zabudovány.
Pytest
Pytest je open-source testovací framework, který je pravděpodobně jedním z nejpoužívanějších frameworků pro testování v jazyce Python. Pytest podporuje jednotkové testování, funkční testování a také testování API. K jeho spuštění budete potřebovat Python verze 3.5 nebo vyšší.
Pros
- Umožňuje vytvářet kompaktní a jednoduché testovací sady.
- Je vysoce rozšiřitelný pomocí zásuvných modulů, jako jsou: pytest-randomly, pytest-cov, pytest-django, pytest-bdd.
- Do projektu můžete také přidat zásuvný modul pytest html pro tisk HTML sestav pomocí jedné jednoduché volby příkazového řádku.
- Může spouštět testy paralelně pomocí zásuvného modulu pytest-xdist. I o něm si můžete přečíst více zde.
- Má velmi početnou komunitu.
- Podporuje fixtures, které vám pomohou pokrýt všechny kombinace parametrů bez přepisování testovacích případů a jsou skvělým způsobem, jak spravovat kontext mezi jednotlivými kroky.
Nevýhody
- Kompatibilita není pro Pytest klíčová, protože ačkoli můžete snadno psát testovací případy pomocí Pytestu, nebudete je moci použít v rámci žádného jiného testovacího rámce kvůli použití jedinečných rutin Pytestu.
TestProject
TestProject je 100% ZDARMA kompletní automatizační framework s cloudovými sestavami. Pomocí TestProject můžete snadno vyvíjet automatizaci testů pro mobilní, webové nebo obecné účely pomocí open source SDK Python. Podporuje Python verze 3.6 nebo vyšší a podporuje rámce Pytest i Unittest. TestProject obsahuje všechny potřebné závislosti jako součást jediného multiplatformního spustitelného agenta (Pro začátek se můžete podívat na záznam tohoto webináře).
Pros
- Jediný spustitelný agent, který obsahuje všechny knihovny třetích stran potřebné pro spouštění a vývoj automatizace testů pro mobilní, webové a obecné testy.
- Zdarma Automatické cloudové reporty ve formátu HTML/PDF (včetně snímků obrazovky).
- Historie provádění přístupná přes RESTful API.
- Vždy aktuální s nejnovějšími a stabilními verzemi ovladačů Selenium/Appium.
- Jediné SDK pro webové, Android, iOS a generické testy.
- Vestavěný testovací runner a možnosti reportování.
- Podpora různých platforem pro Mac, Windows, Linux a Docker.
- Velká komunita a podpora: fórum, blog a vestavěný živý chat.
Nevýhody
- Agent může spouštět testy po jednom testu, pro paralelní testování byste tedy museli použít Docker Agenty.
- Reporty jsou k dispozici pouze na cloudu TestProject, pro lokální uložení si budete muset stáhnout report ve formátu PDF nebo použít RESTful API.
- Agent potřebuje pro spuštění/vykonání testů připojení k internetu.
Bottom line:
PyUnit (Unittest)
PyUnit (Unittest) je framework pro jednotkové testování pro Python, který byl inspirován JUnitem. Je to výchozí framework pro testování v Pythonu, který se dodává jako součást balíčku Python, a proto s ním většina vývojářů začíná své testování.
Pros
- Jelikož je součástí standardní knihovny Pythonu, není třeba instalovat žádné další moduly – dodává se jako součást balíčku Python.
- Nabízí jednoduché a flexibilní provádění testovacích případů.
- Rychlé generování testovacích zpráv, a to jak zpráv XML, tak unittest-sml-reporting.
Nevýhody
- Záměr testovacího kódu je někdy nejasný, protože podporuje abstrakci.
- Vyžaduje obrovské množství kotelního kódu.
- Protože vychází z Junitu, používá se metoda pojmenování camelCase namísto pojmenovací konvence Pythonu snake_case.
Nose2
Nose2 je nástupcem Nose a je to v podstatě PyUnit (Unittest), ale s doplňky. Nose2 rozšiřuje PyUnit nad rámec jeho funkčnosti o různé zásuvné moduly, které přidávají podporu pro provádění testů, zjišťování testů, dekorátory, fixtures, parametrizaci atd.
Pros
- Snadno se s ním začíná, protože rozšiřuje rámec PyUnit (Unittest), který je dodáván jako součást knihovny Pythonu.
- Obsahuje velké množství vestavěných zásuvných modulů, které mohou urychlit a usnadnit vaše testování.
- Umožňuje paralelní testování pomocí zásuvného modulu mp.
- Sbírá testy automaticky, pokud dodržíte několik jednoduchých pokynů pro uspořádání knihovny a testovacího kódu.
Nevýhody
- Nedostatek rozsáhlé dokumentace, což vás může brzdit, pokud teprve začínáte.
- Není tak aktivně udržován na rozdíl od jiných frameworků.
Dole:
Behave
Behave je jeden z nejpopulárnějších testovacích frameworků pro Python BDD (behavior-driven development). Ačkoli není oficiálně součástí projektu Cucumber, funguje velmi podobně jako frameworky Cucumber.
Pros
- Umožňuje psát testovací případy v čitelném jazyce, což vede ke snadné spolupráci napříč týmy s podobnými funkcemi.
- K dispozici je velké množství dokumentace a podpory, která pomůže v začátcích.
- Plně podporuje jazyk Gherkin – tvorba feature souborů tedy nevyžaduje žádné technické znalosti.
- Má integrace s jazyky Django a Flask.
Nevýhody
- Není zde podpora paralelního spouštění.
- Pouze pro testování černých skříněk.
Dole: Pokud se váš tým řídí přístupem BDD, máte předchozí znalosti BDD (např. Cucumber, SpecFlow atd.) a hledáte testování černých skříněk – určitě byste měli vyzkoušet Behave. Měli byste také prozkoumat další BDD frameworky pro Python, jako např: Pytest-bdd, Lettuce (bude popsán níže), Radish a další v tomto článku o srovnání BDD frameworků pro testování v Pythonu. Pokud potřebujete víc než jen testování černé skříňky, měli byste se poohlédnout jinde.
Lettuce
Lettuce je další framework BDD pro Python a je založen na Cucumberu. Vyžaduje Python 2.7.14 nebo vyšší.
Pros
- Podporuje jazyk Gherkin, a tak umožňuje i netechnickým členům týmu snadno vytvářet testy pomocí přirozeného jazyka.
- Podobně jako Behave se používá hlavně pro black-box testování, ale lze jej použít pro více typů testování. Lettuce například dokáže testovat různá chování a interakce serveru a databáze.
Nevýhody
- Nedisponuje některými bohatými funkcemi jiných frameworků, takže je vhodnější pro malé projekty.
- Jeho podpora a dokumentace se nezdají být udržovány.
- Vyžaduje specializovanou komunikaci mezi všemi zúčastněnými stranami projektu: dev, QA a manažery, aby byla implementace úspěšná.
Dole:
Testify
Testify je navržen tak, aby nahradil běžné frameworky Unittest a Nose a má pokročilé funkce oproti standardnímu Unittestu.
Pros
- Používá se pro unit testy, integrační testy a systémové testy.
- Pro ty, kteří znají Unittest, je Testify velmi snadné začít používat.
- Má rozsáhlé zásuvné moduly.
- Podobně jako Nose2 umožňuje Testify objevování testů.
- Jednoduchá syntaxe metody fixture.
Nevýhody
- Nedostatek rozsáhlé dokumentace, takže začátečníci možná budou muset investovat do hledání příslušných zdrojů.
- Paralelní testování není snadné dosáhnout.
Dole:
Závěr
Dospěli jsme ke konci tohoto srovnávacího seznamu frameworků pro testování v Pythonu a nyní je čas vybrat ten, který nejvíce vyhovuje vašim požadavkům.
Hledáte spíše BDD přístup? Jde vám o jednotkové testování, nebo spíše o funkční testování? Má váš tým technické nebo programátorské zkušenosti, nebo se skládá převážně ze začátečníků? Tyto a mnohé další otázky je třeba vzít v úvahu při rozhodování. Každý z výše uvedených rámců má své výhody i nevýhody a neexistuje něco jako dobrý nebo špatný, ale spíše vhodný. Vhodné pro vaše vlastní potřeby a požadavky na produkt.
Doufám, že vám tento článek dokázal pomoci nejen v pochopení toho, jak skvělý je Python pro automatizační testování, ale také vám pomůže na vaší cestě za snadným testováním v Pythonu!