Om du har tänkt för dig själv: ”Hmm… vilket programmeringsspråk ska jag börja min testresa med?” – Python är ditt svar. Men det är inte bara för nybörjare! I en nyligen genomförd undersökning som jag gjorde på LinkedIn kan vi se att till och med bland erfarna programmerare röstade nästan 35 % att Python är deras mest favoritprogrammeringsspråk (dock inte alltför långt ifrån alla tiders favorit Java, som kom på andra plats med 32 %).
Under årens lopp har Python verkligen fått ett uppsving bland både testare och utvecklare och det är det snabbast växande programmeringsspråket där ute (som vi kan se i tabellen Stack Overflow Trends nedan), och vi vet alla vad det betyder… Popularitet = relevans!
I slutet av den här artikeln är mitt mål att hjälpa dig att se hur kraftfullt programmeringsspråket Python är och vilket testramverk i Python som passar bäst för dina projektbehov.
Vad är så bra med Python för testautomatisering?
Python är ett programmeringsspråk med öppen källkod som först släpptes 1991 med avsikt att tillhandahålla ett intuitivt, enkelt, människoläsbart, elegant och mindre rörigt programmeringsspråk att arbeta med. Och när det gäller testning är sådana egenskaper ett måste, särskilt när vi har manuella testare i teamet (som inte nödvändigtvis har programmeringskunskaper) som nu övergår till automatisering och kan njuta av Pythons snabba inlärningskurva för att skriva skript snabbt.
Det finns en hel del anledningar till varför Pythons popularitet har stigit inom området för testautomatisering och varför det anses vara ett av de bästa valen för testautomatisering. Bland dessa anledningar hittar du bland annat följande: Det är både objektorienterat och funktionellt, det har ett rikt bibliotek av paket för testning, ett världsomspännande starkt samhälle och mycket mer! Jag rekommenderar att du läser mer om det på den grymma AutomationPanda-bloggen.
The Right Python Testing Framework For You
Med den ökande användningen av Python ökar också populariteten av testramverk baserade på Python. Till en början kan det vara lite förvirrande att veta vilket man ska välja bland alla de många verktyg som finns, eftersom vart och ett av dem har sina för- och nackdelar. Med det sagt har varje projekt och organisation olika krav och begränsningar, därför måste vi ta hänsyn till dem alla när vi väljer ett verktyg som passar oss bäst. Jag rekommenderar att du läser dessa bra artiklar om hur du väljer rätt verktyg för dig:
- Hur man väljer rätt verktyg för testautomatisering
- Hur man väljer det bästa verktyget – forskningsprocess
- Kriterier för att välja rätt verktyg för funktionstestning
Och naturligtvis – varför finns det listor med för- och nackdelar, om det inte är för att hjälpa oss att få ytterligare vägledning om våra favoritverktyg, allt på ett och samma ställe! 😉 Så, låt oss dyka djupt ner i de åtta bästa Python-testramverken som finns och utforska både deras fördelar och brister så att du kan komma så mycket närmare att välja det perfekta Python-testramverket för dina behov.
Fördelar och nackdelar med de 8 bästa testramverken för Python
- Robot Framework
- Pytest
- TestProject
- PyUnit (Unittest)
- Nose2
- Behave
- Lettuce
- Testify
- Slutsats
Robot Framework (RF)
Robot Framework (RF) är ett ramverk för testautomatisering med öppen källkod för acceptanstester, acceptanstestdriven utveckling (ATDD) och automatisering av robotprocesser (RPA). Dess kärna är implementerad i Python, men kan också köras på Jython (Java-implementering av Python) och IronPython (Python för .NET-ramverket). För att köra den måste du installera Python version 2.7.14 eller högre.
Pros
- Baserad på Keyword-driven testing (KDT), vilket gör att vi enkelt kan skapa testfall med hjälp av mänskligt läsbara nyckelord (ingen erfarenhet av kodning krävs).
- Stöd för alla operativsystem (Windows, Linux eller MacOS) och alla tillämpningar (webb-, mobil- och datorapplikationer).
- Gör tydliga och användarvänliga HTML-rapporteringsdata (inklusive skärmdumpar).
- Rikt ekosystem med många API:er som gör det till ett mycket utbyggbart ramverk och som gör det möjligt att integrera med alla andra verktyg från tredje part.
- Gott samhällsstöd och online-resurser.
Minus
- Parallell testning stöds inte out of the box, men det kan uppnås via Selenium Grid eller via Pabot (en parallell utförare för RF).
- På gott och ont tvingar den dig att arbeta enligt fördefinierad metodik, den initiala inlärningskurvan kan vara lite längre än vanligt för nybörjare
- Skapa generiska nyckelord kan ta längre tid än att bara skriva kodade tester
- Inte lätt att anpassa rapporterna.
- Har ingen egentlig if/else-konstruktion, men det finns flera sätt att få samma effekt (vilket kan utforskas i deras officiella dokumentation)
Bottom line: Om du vill implementera ett nyckelordsdrivet ramverk som gör det möjligt för manuella testare och affärsanalytiker att skapa automatiseringstester, är RF lösningen för dig, som tillhandahåller en mängd olika tilläggsbibliotek & och som är lätta att använda. Men om du är på jakt efter att utveckla komplexa scenarier, eftersom du kommer att behöva göra vissa anpassningar som inte är inbyggda i ramverket.
Pytest
Pytest är ett testramverk med öppen källkod som möjligen är ett av de mest använda testramverken i Python som finns. Pytest stöder enhetstestning, funktionstestning och API-testning. För att köra det behöver du Python version 3.5 eller högre.
Pros
- Gör det möjligt att skapa kompakta och enkla testsviter.
- Är mycket utbyggbar med hjälp av plugins, till exempel: pytest-randomly, pytest-cov, pytest-django, pytest-bdd.
- Du kan också lägga till pytest html-plugin till ditt projekt för att skriva ut HTML-rapporter med ett enkelt kommandoradsalternativ.
- Kan köra tester parallellt med hjälp av ett Pytest-plugin pytest-xdist. Du kan läsa mer om det här också.
- Har ett mycket stort community.
- Stöder fixturer som hjälper dig att täcka alla parameterkombinationer utan att skriva om testfall, och är ett bra sätt att hantera kontext mellan steg.
Kons
- Kompatibilitet är inte nyckeln för Pytest, för även om du enkelt kan skriva testfall med Pytest kommer du inte att kunna använda dessa inom något annat testramverk på grund av användandet av Pytests unika rutiner.
TestProject
TestProject är ett 100 % GRATIS komplett automatiseringsramverk med molnrapporter. Med TestProject kan du enkelt utveckla testautomatisering för mobil, webb eller generiska ändamål med Pythons SDK med öppen källkod. Det stöder Python version 3.6 eller högre och stöder både Pytest och Unittest ramverk. TestProject innehåller alla beroenden som krävs som en del av den enda plattformsoberoende agentkörbara versionen (Du kan titta på den här webinarinspelningen för att komma igång).
Pros
- En enda agentkörbar version som innehåller alla bibliotek från tredje part som behövs för att exekvera och utveckla testautomatisering för mobila, webbaserade och generiska tester.
- GRATISKA automatiska molnbaserade rapporter i HTML/PDF-format (inklusive skärmdumpar).
- Exekveringshistorik tillgänglig via RESTful API.
- Altid uppdaterad med de senaste och stabila versionerna av Selenium/Appium-drivrutiner.
- Single SDK för webb, Android, iOS och generiska tester.
- Inbyggd testkörare och rapporteringsfunktioner.
- Plattformsövergripande stöd för Mac, Windows, Linux och Docker.
- Stort community och support: forum, blogg och inbyggd livechatt.
Baktigheter
- Agenten kan köra testerna ett test i taget, för parallell testning behöver du alltså använda Docker Agents.
- Rapporterna är endast tillgängliga i TestProject-molnet, för att lagra dem lokalt måste du ladda ner en PDF-rapport eller använda RESTful API.
- Agenten behöver internetuppkoppling för att köra/utföra tester.
Bottom line: Om du letar efter ett enda ramverk som täcker hela ditt automatiseringsarbete från början till slut är TestProject definitivt något för dig och passar perfekt för team med blandade färdigheter, från nybörjare till erfarna automatiseringsexperter.
PyUnit (Unittest)
PyUnit (Unittest) är ett ramverk för enhetstestning för Python som är inspirerat av JUnit. Det är standardramverket för testning av Python som följer med Pythonpaketet och därmed det ramverk som de flesta utvecklare börjar sin testning med.
Pros
- Då det är en del av standardbiblioteket för Python krävs inga ytterligare moduler att installera – det följer med Pythonpaketet.
- Erbjuder enkelt och flexibelt utförande av testfall.
- Snabbt genererande av testrapporter, både XML-rapporter och unittest-sml-rapportering.
Konsekvenser
- Intentionen i testkoden blir ibland oklar, eftersom den stöder abstraktion.
- En enorm mängd boilerplate-kod krävs.
- Då den är baserad på Junit används namngivningsmetoden camelCase, istället för Pythons namngivningskonvention snake_case.
Nose2
Nose2 är en efterföljare till Nose och är i princip PyUnit (Unittest), men med tilläggsmoduler. Nose2 utökar PyUnit utöver dess funktionalitet med olika plugins som lägger till stöd för testutförande, testupptäckt, dekoratorer, fixturer, parametrisering etc.
Pros
- Lätt att komma igång med eftersom det utökar PyUnit (Unittest)-ramverket som levereras med Pythonbiblioteket.
- Inkluderar ett stort antal inbyggda plugins som kan göra din testning snabbare och enklare.
- Möjliggör parallell testning med hjälp av insticksmodulen mp.
- Samlar in tester automatiskt, så länge du följer några enkla riktlinjer för att organisera ditt bibliotek och din testkod.
Konsekvenser
- Missnöje med omfattande dokumentation vilket kan hålla dig tillbaka om du precis har börjat.
- Inte så aktivt underhållet till skillnad från andra ramverk.
Bottom line: Om du redan använder PyUnit kan du lika gärna ge Nose2 en chans och utforska hur det utökar PyUnit.
Behave
Behave är ett av de mest populära testramverken för BDD-testning (behavior-driven development) i Python. Även om det inte officiellt är en del av Cucumber-projektet fungerar det mycket likt Cucumber-ramverken.
Pros
- Gör det möjligt att skriva testfall på ett lättläst språk, vilket leder till ett enkelt samarbete mellan team med liknande funktioner.
- En stor mängd dokumentation och stöd finns tillgängligt för att hjälpa till att komma igång.
- Har fullt stöd för språket Gherkin – skapandet av funktionsfiler kräver alltså inga tekniska kunskaper.
- Har Django- och Flask-integrationer.
Konsekvenser
- Det finns inget stöd för parallell exekvering.
- Endast för black box-testning.
Bottom line: Om ditt team följer en BDD-strategi, du har tidigare BDD-kunskaper (t.ex. Cucumber, SpecFlow, etc.) och letar efter testning av svarta lådor – bör du definitivt kolla in Behave. Du bör också utforska andra BDD-ramverk i Python som t.ex: Pytest-bdd, Lettuce (kommer att beskrivas nedan), Radish med flera i denna artikel om jämförelse av Python BDD-testramverk. Om du behöver mer än black box-testning bör du leta på annat håll.
Lettuce
Lettuce är ett annat Python BDD-ramverk och det är baserat på Cucumber. Kräver Python 2.7.14 eller högre.
Pros
- Stöder språket Gherkin, vilket gör det möjligt för även icke-tekniska teammedlemmar att enkelt skapa tester med hjälp av naturligt språk.
- Som liknar Behave används det mestadels för black-box-testning men kan användas för fler testtyper. Till exempel kan Lettuce testa olika server- och databasbeteenden och interaktioner.
Cons
- Missgynnar en del av funktionsrikedomen hos andra ramverk, vilket gör att det lämpar sig bättre för små projekt.
- Dess stöd och dokumentation verkar inte underhållas.
- Kräver dedikerad kommunikation mellan alla intressenter i projektet: utvecklare, kvalitetssäkring och chefer för att se till att implementeringen blir framgångsrik.
Bottom line: Om du har ett litet BDD-projekt är Lettuce ett bra alternativ för enkelt och naturligt språkligt testskapande bland alla teammedlemmar.
Testify
Testify är utformat för att ersätta de vanliga Unittest- och Nose-ramverken och har avancerade funktioner jämfört med standard Unittest.
Pros
- Används för enhetstestning, integrationstestning och systemtestning.
- För dem som är bekanta med Unittest är Testify mycket lätt att komma igång med.
- Har omfattande plugins.
- Liknande Nose2 möjliggör Testify testupptäckt.
- Enklare syntax för fixturmetod.
Konsekvenser
- Missar omfattande dokumentation, vilket gör att nybörjare kan behöva investera i att hitta relevanta resurser.
- Parallell testning är inte lätt att uppnå.
Bottom line: Om du har tidigare erfarenhet av Unittest kommer det att vara ganska lätt för dig att justera dina befintliga tester för att fungera med Testify, så det är definitivt värt att kolla in.
Slutsats
Vi har kommit till slutet av den här jämförelselistan för testramverk i Python, och nu är det dags att välja det som passar dina krav bäst.
Söker du mer efter en BDD-strategi? Är det enhetstestning du vill uppnå eller mer av funktionell testning? Har ditt team teknisk eller kodningserfarenhet eller består det mest av nybörjare? Det är dessa och många andra frågor som du måste ta hänsyn till när du försöker fatta ett beslut. Var och en av de ovan nämnda ramarna har sina fördelar och nackdelar, och det finns inget som är bra eller dåligt, utan snarare lämpligt. Lämplig för dina egna behov och produktkrav.
Jag hoppas att den här artikeln kunde hjälpa dig att inte bara förstå hur bra Python är för automatiseringstestning, utan också hjälpa dig på din resa till enkel Python-testning!