Top 8 Python Testing Frameworks i 2021

Hvis du har tænkt ved dig selv: “Hmm… hvilket programmeringssprog skal jeg starte min testrejse med?” – Python er dit svar. Men det er ikke kun for begyndere! I en nylig undersøgelse, som jeg lavede på LinkedIn, kan vi se, at selv blandt erfarne programmører stemte næsten 35 %, at Python er deres mest foretrukne programmeringssprog (dog ikke alt for langt foran alle tiders favorit Java, der kom på 2. pladsen med 32 %).

I årenes løb har Python faktisk vundet frem blandt både testere og udviklere, og det er det hurtigst voksende programmeringssprog derude (som vi kan se i Stack Overflow Trends-diagrammet nedenfor), og vi ved alle, hvad det betyder… Popularitet = relevans!

I slutningen af denne artikel er det mit mål at hjælpe dig med at se, hvor kraftfuldt programmeringssproget Python er, og hvilken Python-testramme der passer bedst til dine projektbehov.

Hvad er så godt ved Python til testautomatisering?

Python er et open source-programmeringssprog, der først blev udgivet i 1991 med en hensigt om at levere et intuitivt, simpelt, menneskeligt læsbart, elegant og mindre overskueligt programmeringssprog at arbejde med. Og når det kommer til test, er sådanne kvaliteter et must, især når vi har manuelle testere i teamet (som ikke nødvendigvis har programmeringsfærdigheder), som nu overgår til automatisering og kan nyde godt af Pythons hurtige indlæringskurve til at skrive scripts hurtigt.

Der er en hel del grunde til, hvorfor Pythons popularitet er steget inden for testautomatisering, og hvorfor det anses for at være et af de bedste valg til testautomatisering. Blandt disse grunde finder du bl.a: Det er både objektorienteret og funktionelt, det har et rigt bibliotek af pakker til test, et verdensomspændende stærkt fællesskab og meget mere! Jeg anbefaler at læse mere om det på den fantastiske AutomationPanda Blog.

Det rigtige Python Testing Framework for dig

Med den stigende brug af Python stiger også populariteten af testframeworks baseret på Python. I første omgang kan det være en smule forvirrende at vide, hvilken en at vælge ud af alle de mange værktøjer derude, da hver enkelt har sine fordele og ulemper. Når det er sagt, har hvert projekt og hver organisation forskellige krav og begrænsninger, og derfor er vi nødt til at tage dem alle i betragtning, når vi vælger et værktøj, der passer bedst til os. Jeg anbefaler at læse disse gode artikler om, hvordan du vælger det rigtige værktøj til dig:

  1. Sådan vælger du det rigtige testautomatiseringsværktøj
  2. Sådan vælger du det bedste værktøj – researchproces
  3. Kriterier for valg af de rigtige værktøjer til funktionel testning

Og selvfølgelig – hvorfor findes der pros and cons-lister, hvis ikke for at hjælpe os med at få yderligere vejledning om vores yndlingsværktøjer, alt samlet på ét sted! 😉 Så lad os dykke dybt ned i de 8 bedste Python-testframeworks derude og udforske både deres fordele såvel som mangler, så du kan komme så meget tættere på at vælge det ideelle Python-testframework til dine behov.

For- og ulemper ved de 8 bedste Python-testframeworks

  1. Robot Framework
  2. Pytest
  3. TestProject
  4. PyUnit (Unittest)
  5. Nose2
  6. Behave
  7. Lettuce
  8. Testify
  9. Konklusion

Robot Framework (RF)

Robot Framework (RF) er en open source ramme for testautomatisering til acceptprøvning, accepttestdrevet udvikling (ATDD) og automatisering af robotprocesser (RPA). Dens kerne er implementeret i Python, men kan også køre på Jython (Java-implementering af Python) og IronPython (Python for .NET framework). For at køre det skal du installere Python version 2.7.14 eller højere.

Pros

  • Baseret på Keyword-driven testing (KDT) tilgang, hvilket gør det muligt for os nemt at oprette testcases ved hjælp af menneskeligt læsbare nøgleord (ingen erfaring med kodning er påkrævet).
  • Understøtter alle operativsystemer (Windows, Linux eller MacOS) og alle applikationer (web, mobil og desktop apps).
  • Giver klare og brugervenlige HTML-rapporteringsdata (herunder skærmbilleder).
  • Rigt økosystem med mange API’er, der gør det til en meget udvidelig ramme og gør det muligt at integrere med ethvert andet 3. partsværktøj.
  • God fællesskabsstøtte og online ressourcer.

Begreber

  • Parallel testning understøttes ikke out of the box, men det kan opnås via Selenium Grid eller via Pabot (en parallel eksekutor til RF).
  • På godt og ondt tvinger det dig til at arbejde efter en foruddefineret metodologi, Den indledende indlæringskurve kan være lidt længere end normalt for nybegyndere
  • Skabelse af generiske nøgleord kan tage længere tid end blot at skrive kodede tests
  • Det er ikke nemt at tilpasse rapporterne.
  • Har ikke en egentlig if/else-konstruktion, men der er flere måder at få den samme effekt på (som kan udforskes i deres officielle dokumentation)

Bottom line: Hvis du ønsker at implementere en nøgleordsdrevet rammetilgang, der gør det muligt for manuelle testere og forretningsanalytikere at oprette automatiseringstests, er RF løsningen for dig, der leverer en række udvidelser & biblioteker og er nem at bruge. Men hvis du er på udkig efter at udvikle komplekse scenarier, da du bliver nødt til at foretage nogle tilpasninger, som ikke er indbygget i rammen.

Pytest

Pytest er en open source testramme, der muligvis er en af de mest udbredte Python-testrammer derude. Pytest understøtter også enhedstest, funktionel testning og API-testning. For at køre det skal du bruge Python version 3.5 eller højere.

Pros

  • Giver mulighed for kompakte og enkle testsuiter.
  • Er meget udvidelig ved hjælp af plugins, såsom: pytest-randomly, pytest-cov, pytest-django, pytest-bdd.
  • Du kan også tilføje pytest html-plugin til dit projekt for at udskrive HTML-rapporter med en enkelt kommandolinjeindstilling.
  • Kan køre tests parallelt ved hjælp af et Pytest-plugin pytest-xdist. Du kan også læse mere om det her.
  • Har et meget stort fællesskab.
  • Understøtter fixtures, der hjælper dig med at dække alle parameterkombinationer uden at omskrive testcases, og er en fantastisk måde at administrere kontekst mellem trin.

Kontra

  • Kompatibilitet er ikke nøglen for Pytest, for selvom du nemt kan skrive testcases med Pytest, vil du ikke kunne bruge dem inden for andre testrammer på grund af brugen af Pytests unikke rutiner.
Bundlinje: Hvis du ønsker at oprette, enhedstests, små og koncise tests, der understøtter komplekse scenarier, er denne modne fuldt udbyggede ramme noget for dig.

TestProject

TestProject er 100% GRATIS komplet automatiseringsramme med rapporter i skyen. Ved hjælp af TestProject kan du nemt udvikle testautomatisering til mobil, web eller generiske formål med Python open source SDK’et. Det understøtter Python version 3.6 eller højere, og understøtter både Pytest- og Unittest-rammerne. TestProject indeholder alle de nødvendige afhængigheder som en del af den enkelt eksekverbare agent på tværs af platforme (Du kan se denne webinaroptagelse for at komme i gang).

Pros

  • En enkelt eksekverbar agent, der indeholder alle de 3. partsbiblioteker, der er nødvendige for at udføre og udvikle testautomatisering til mobil, web og generiske tests.
  • GRATISKE automatiske cloud-baserede rapporter i HTML/PDF-format (herunder skærmbilleder).
  • Udførelseshistorik tilgængelig via RESTful API.
  • Altid opdateret med de nyeste og stabile Selenium/Appium-driverversioner.
  • Single SDK til web, Android, iOS og generiske tests.
  • Indbygget testkører og rapporteringsfunktioner.
  • Support på tværs af platforme for Mac, Windows, Linux og Docker.
  • Stort fællesskab og support: forum, blog og indbygget live chat.

Begreber

  • Agenten kan køre tests én test ad gangen, så for parallel testning skal du bruge Docker Agents.
  • Rapporterne er kun tilgængelige på TestProject cloud, for at gemme den lokalt skal du downloade en PDF-rapport eller bruge RESTful API.
  • Agenten har brug for internetforbindelse for at køre/udføre test.

Bottom line: Hvis du leder efter en enkelt ramme, der dækker hele din automatiseringsindsats fra ende til anden, så er TestProject helt sikkert noget for dig og passer perfekt til teams med blandede færdigheder, fra begyndere til erfarne automatiseringseksperter.

PyUnit (Unittest)

PyUnit (Unittest) er en ramme for enhedstest til Python, som er inspireret af JUnit. Det er standardrammen for Python-testning, der leveres out of the box med Python-pakken, og dermed er det den ramme, som de fleste udviklere starter deres testning med.

Pros

  • Da den er en del af Python-standardbiblioteket, er der ingen yderligere moduler, der skal installeres – den leveres out of the box med Python-pakken.
  • Byder enkel og fleksibel udførelse af testtilfælde.
  • Shurtig generering af testrapporter, både XML-rapporter og unittest-sml-rapportering.

Cons

  • Intentionen i testkoden bliver nogle gange uklar, da den understøtter abstraktion.
  • Der kræves en enorm mængde boilerplate-kode.
  • Da baseret på Junit er camelCase-navngivningsmetoden i brug, i stedet for Pythons snake_case-navngivningskonvention.
Bottom line: Hvis du er på udkig efter grundlæggende enhedstest og er bekendt med xUnit-rammer, vil du finde det meget nemt at komme i gang med PyUnit, og det vil sandsynligvis være det mest komfortable for dig, uden behov for yderligere afhængigheder.

Nose2

Nose2 er en efterfølger til Nose og er grundlæggende PyUnit (Unittest), men med plugins. Nose2 udvider PyUnit ud over dets funktionalitet med forskellige plugins, der tilføjer understøttelse af testudførelse, testopdagelse, decorators, fixtures, parameterisering osv.

Pros

  • Nemt at komme i gang med, da det udvider PyUnit (Unittest)-rammen, der leveres out of the box med Python-biblioteket.
  • Inkluderer et stort antal indbyggede plugins, der kan gøre din test hurtigere og nemmere.
  • Muliggør parallel testning ved hjælp af mp-plugin’et.
  • Samler tests automatisk, så længe du følger nogle enkle retningslinjer for organisering af dit bibliotek og din testkode.

Begreber

  • Mangel på omfattende dokumentation, hvilket kan holde dig tilbage, hvis du lige er begyndt.
  • Men ikke så aktivt vedligeholdt i modsætning til andre frameworks.

Bottom line: Hvis du allerede bruger PyUnit, kan du lige så godt give Nose2 en chance og undersøge, hvordan det udvider PyUnit.

Behave

Behave er et af de mest populære Python BDD-testrammer (behavior-driven development) for testning. Selvom det ikke officielt er en del af Cucumber-projektet, fungerer det meget lig Cucumber-rammerne.

Pros

  • Gør det muligt at skrive testcases i et læsbart sprog, hvilket fører til let samarbejde på tværs af teams med lignende funktioner.
  • Der er en stor mængde dokumentation og support til rådighed, som kan hjælpe med at komme i gang.
  • Understøtter fuldt ud Gherkin-sproget – dermed kræver oprettelsen af funktionsfiler ingen teknisk viden.
  • Har Django- og Flask-integrationer.

Konsekvenser

  • Der er ingen understøttelse af parallel eksekvering.
  • Kun til black box-testning.

Bottom line: Hvis dit team følger en BDD-tilgang, du har tidligere BDD-viden (såsom Cucumber, SpecFlow osv.) og er på udkig efter black box testing – bør du helt sikkert tjekke Behave ud. Du bør også udforske andre Python BDD frameworks som f.eks: Pytest-bdd, Lettuce (vil blive beskrevet nedenfor), Radish og flere i denne artikel om sammenligning af Python BDD-testrammer. Hvis du har brug for mere end black box testing, bør du kigge et andet sted hen.

Lettuce

Lettuce er et andet Python BDD framework, og det er baseret på Cucumber. Kræver Python 2.7.14 eller højere.

Pros

  • Understøtter Gherkin-sprog, hvilket gør det muligt for selv ikke-tekniske teammedlemmer nemt at oprette tests ved hjælp af naturligt sprog.
  • Lignende Behave, bruges det mest til black-box-test, men kan bruges til flere testtyper. For eksempel kan Lettuce teste forskellige server- og databaseadfærd og interaktioner.

Cons

  • Mangler noget af funktionsrigdommen fra andre frameworks, så mere velegnet til små projekter.
  • Dets support og dokumentation synes ikke at blive vedligeholdt.
  • Kræver dedikeret kommunikation mellem alle projektets interessenter: dev, QA og ledere for at sikre, at implementeringen bliver vellykket.

Bottom line: Hvis du har et lille BDD-projekt, er Lettuce en god mulighed for nem og naturlig sproglig testoprettelse blandt alle teammedlemmer.

Testify

Testify er designet til at erstatte de almindelige Unittest- og Nose-rammer og har avancerede funktioner i forhold til standard Unittest.

Pros

  • Bruges til enhedstest, integrationstest og systemtest.
  • For dem, der er bekendt med Unittest, er Testify meget let at komme i gang med.
  • Har omfattende plugins.
  • Lignende Nose2, Testify muliggør testopdagelse.
  • Enkle syntaks til fixture-metode.

Kontra

  • Mangel på omfattende dokumentation, så nybegyndere skal måske investere i at finde relevante ressourcer.
  • Parallel testning er ikke let at opnå.

Bottom line: Hvis du har tidligere erfaring med Unittest, vil det være ret nemt for dig at tilpasse dine eksisterende tests til at fungere med Testify, så det er helt sikkert værd at tjekke ud.

Slutning

Vi er nået til enden af denne sammenligningsliste over python-testrammer, og nu er det tid til at vælge den, der passer bedst til dine krav.

Er du på udkig efter en mere BDD-tilgang? Er det unit testing du søger at opnå eller mere af funktionel testning? Har dit team teknisk eller kodningserfaring, eller består de mest af nybegyndere? Disse og mange andre spørgsmål er dem, du skal tage i betragtning, når du forsøger at træffe en beslutning. Hver af de ovennævnte rammer har sine fordele såvel som ulemper, og der findes ikke noget, der hedder godt eller dårligt, men snarere passende. Passende til dine egne behov og produktkrav.

Jeg håber, at denne artikel var i stand til at hjælpe dig ikke kun med at forstå, hvor fantastisk Python er til automatiseringstest, men også hjælpe dig på din rejse til nem Python-testning!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.