denna handledning förklarar hur Python kan användas för Testprogrammering och listar funktionerna och jämförelsen av de bästa Python-Testramarna:
med den utbredda tillämpningen av artificiell intelligens har Python blivit ett populärt programmeringsspråk.
denna handledning kommer att täcka hur Python kan användas för testprogrammering tillsammans med några Python-baserade testramar.
låt oss börja!!
= > kontrollera alla Python Tutorials här.
Vad är Python?
enligt den traditionella definitionen är Python ett tolkat, allmänt programmeringsspråk på hög nivå som hjälper programmerare att skriva hanterbar och logisk kod för små och stora projekt.
några av fördelarna med pythoner är:
- ingen kompilering orsakar snabb körning av Edit-Test-Debug-cykeln.
- lätt felsökning
- omfattande supportbibliotek
- lätt att lära sig datastruktur
- hög produktivitet
- teamsamarbete
arbetar i Python
- tolken läser python-koden från källfilen och undersöker den för ett syntaxfel.
- Om koden är felfri konverterar tolken koden till motsvarande ’Byte-kod’.
- denna bytekod överförs sedan till Python Virtual Machine (PVM) där bytekoden åter sammanställs för fel om någon.
Vad är Python-testning?
- automatiserad testning är ett välkänt sammanhang i testvärlden. Det är där testplanerna körs med skript istället för en människa.
- Python levereras med verktyg och bibliotek som stöder automatiserad testning för ditt system.
- Python – testfall är relativt lätta att skriva. Med den ökade användningen av Python blir Python-baserade testautomatiseringsramar också populära.
lista över Python-Testramar
Enlisted nedan är några Python-Testramar som du borde veta.
- Robot
- PyTest
- Unittest
- DocTest
- Nose2
- vittna
jämförelse av Python-testverktyg
låt oss snabbt sammanfatta dessa ramar i en kort jämförelsetabell:
licens | en del av | Kategori | Kategori Special feature |
|
---|---|---|---|---|
robot |
fri programvara (ASF-licens} |
python generiska testbibliotek. | Acceptanstestning | Nyckelordstyrd testmetod. |
PyTest |
Free software (MIT License) | Stand alone, allows compact test suites. | Unit Testing | Special and simple class fixture for making testing easier. |
unittest |
Free software (MIT License) | Part of Python standard library. | Unit Testing | Fast test collection and flexible test execution. |
DocTest |
Free software (MIT License) | Part of Python standard library. | Unit Testing | Python Interactive Shell for the command prompt and inclusive application. |
Nose2 |
Free software (BSD License) |
Carries unittest features with additional feature and plugins. | unittest extension | A large number of plugins. |
vittna |
fri programvara (ASF licens) |
bär unittest och näsa funktioner med ytterligare funktion och plugins. | unittest förlängning | test upptäckt förbättring. |
(förkortningar: MIT = Massachusetts Institute of Technology (1980), BSD = Berkeley Software Distribution(1988), ASF = Apache Software Foundation (2004))
Låt oss börja!!
#1) Robot
- Det mest populära Robotramverket är ett ramverk för automatisering av öppen källkod baserat på Python.
- detta ramverk är helt utvecklat i Python och används för Acceptanstestning och testdriven utveckling. Nyckelord stil används för att skriva testfall i Robot framework.
- roboten kan köra Java och. Net och stöder också automatiseringstestning på plattform som Windows, Mac OS och Linux för stationära applikationer, mobila applikationer, webbapplikationer etc.
- tillsammans med Acceptanstestning används Robot också för Robotic Process Automation (rpa).
- Pip (paketinstallatör för Python) rekommenderas starkt för Robotinstallation.
- användningen av tabelldatasyntax, sökordsdriven testning, rika bibliotek & verktygsuppsättning och parallell testning är några av de starka funktionerna i Robot som gör den populär bland testare.
exempel:
*** Settings ***Library SeleniumLibrary*** Variables ***${SERVER} localhost:7272${BROWSER} Firefox${DELAY} 0${VALID USER} demo${VALID PASSWORD} mode${LOGIN URL} http://${SERVER}/${WELCOME URL} http://${SERVER}/welcome.html${ERROR URL} http://${SERVER}/error.html*** Keywords ***Open Browser To Login Page Open Browser ${LOGIN URL} ${BROWSER} Maximize Browser Window Set Selenium Speed ${DELAY}Login Page Should Be Open Title Should Be Login PageGo To Login Page Go To ${LOGIN URL} Login Page Should Be OpenInput Username ${username} Input Text username_field ${username}Input Password ${password} Input Text password_field ${password}Submit Credentials Click Button login_buttonWelcome Page Should Be Open Location Should Be ${WELCOME URL} Title Should Be Welcome Page
Här är ett exempel på misslyckad testkörning.
Here is a sample of Successful Test Execution.
Packages/Methods:
Package Name | Working | Package Import |
---|---|---|
run() | To run tests. | from robot import run |
run_cli() | To run tests with command line argument. | från robot import run_cli |
rebot () | för att bearbeta testutgång. | från robot import rebot |
länk till API: Robot Framework User Guide
nedladdningslänk: Robot
#2) PyTest
- PyTest är en öppen källkod Python-baserad testning ramverk som i allmänhet är all-purpose men speciellt för funktionell och API-testning.
- Pip (paketinstallatör för Python) krävs för PyTest-installation.
- den stöder enkel eller komplex textkod för att testa API, databaser och UIs.
- enkel syntax är till hjälp för enkel testkörning.
- rika plugins och kan köra tester parallellt.
- kan köra någon specifik delmängd av tester.
exempel:
import pytest //Import unittest module//def test_file1_method(): //Function inside class// x=5 y=6 assert x+1 == y,"test failed"
för att köra testet använd py.testkommando.
skärmdump för referens:
paket / metoder:
funktion | parametrar | arbetar |
---|---|---|
pytest.ungefär () | förväntad, rel = ingen, abs = ingen, nan_ok = False |
hävda att två siffror eller två uppsättningar av siffror är ungefär lika med vissa skillnader. |
pytest.fail () | msg(str) pytrace (bool) |
om det exekverande testet misslyckas explicit visas meddelandet. |
pytest.skip() | allow_module_level(bool) | Skip the executing test with the message shown. |
pytest.exit() | msg (str) returncode (int) |
Exit testing process. |
pytest.main() | args=None plugins=None |
Return exit code once in-process test execution is done. |
pytest.raises() | expected_exception: Expectation | Assert that a code block call raises expected_exception or to raise a failure exception |
pytest.warns() | expected_warning: Förväntan | hävda varning med funktionerna |
om du vill komma åt ett test skrivet i en specifik fil använder vi kommandot nedan.
py.test <filename>
Pytest fixtur: Pytest fixtur används för att köra kod innan testmetoden utförs för att undvika kodupprepning. Detta används i princip för att initiera databasanslutning.
Du kan definiera PyTest fixtur som visas nedan.
@pytest.fixture
påstående: påstående är villkoret som returnerar sant eller falskt. Testkörningen stannar när påståendet misslyckas.
nedan är ett exempel:
def test_string_equal():assert double(55) == 62assert 25 == 62+ where 25 = double(55)
länk till API: Pytest API
nedladdningslänk: Pytest
#3) Unittest
- Unittest är det allra första Python-baserade automatiserade enhetstestramverket som utformades för att fungera med Python-standardbiblioteket.
- stöder återanvändning av testdräkter och testorganisation.
- Det inspirerades av JUnit och stöder testautomatisering inklusive testsamlingar, testoberoende, installationskod för test etc.
- Det kallas också som PyUnit.
- Unittest2 är en backport av ytterligare nya funktioner läggs till Unittest.
standard arbetsflöde för Unittest:
- importera Unittest-modulen i programkoden.
- Du kan definiera din egen klass.
- skapa funktioner i klassen som du har definierat.
- placera unittest.main () som är den huvudsakliga metoden längst ner i koden för att köra testfallet.
exempel:
import unittest //Import unittest module//def add(x,y): return x + yclass Test(unittest.TestCase): //Define your class with testcase// def addition(self): self.assertEquals(add(4,5),9)<strong>//Function inside class//if __name__ == '__main__': unittest.main()<strong>//Insert main() method//
skärmdump för referens:
paket / metoder:
metod | arbetar |
---|---|
setup () | anropas före utförande av testmetod för att förbereda testinstallationen. |
tearDown () | anropas efter testmetod utförande även om testet kastar ett undantag. |
setUpClass () | anropas efter tester i en enskild klass. |
tearDownClass () | anropas efter tester i en enskild klass. |
kör () | kör testet med resultat. |
debug () | kör testet utan resultat. |
addTest () | Lägg till testmetoden i testpaketet. |
Upptäck () | hittar alla testmoduler i underkataloger från den specifika katalogen. |
assertEqual(a,b) | för att testa jämlikhet mellan två objekt. |
asserTrue/assertFalse(villkor) | för att testa booleskt tillstånd. |
(Obs: unittest.mock () är ett bibliotek för Python-testning som gör det möjligt att ersätta systemdelar med mock-objekt. Core mock-klassen hjälper till att enkelt skapa en testsvit.)
länk till API: Unittest API
nedladdningslänk: Unittest
#4) DocTest
- Doctest är en modul som ingår i Pythons standarddistribution och används för White-box-enhetstestning.
- den söker efter interaktiva python-sessioner för att kontrollera om de fungerar exakt som krävs.
- Det använder sig av selektiva Python-funktioner som docstrings, Python interactive shell och Python introspection (bestämning av egenskaper hos objekt vid körning).
- kärnfunktioner:
- uppdatering av docstring
- utför regressionstestning
- funktionerna testfile() och testmod () används för att tillhandahålla grundläggande gränssnitt.
exempel:
def test(n): import math if not n >= 0: raise ValueError("n must be >= 0") //number should be 0 or greater than 0 if math.floor(n) != n: raise ValueError("n must be exact integer") //Error when number is not an integer if n+1 == n: raise OverflowError("n too large") //Error when number is too large r = 1 f = 2 while f <= n: //Calculate factorial r *= f f += 1 return rif __name__ == "__main__": import doctest //Import doctest doctest.testmod() //Calling the testmod method
skärmdump för referens:
paket / funktioner:
Function | Parameters |
---|---|
doctest.testfile() | filename (mendatory) |
doctest.testmod() | m]
|
doctest.DocFileSuite() | *paths, |
doctest.DocTestSuite() |
Note: För att kontrollera interaktiva exempel i textfilen kan vi använda funktionen testfile ();
doctest.testfile ("example.txt”)
Du kan direkt köra testet från kommandoraden med;
python factorial.py
länk till API: DocTest API
nedladdningslänk: Doctest
#5) Nose2
- nose2 är efterföljaren till Nose och det är ett Python-baserat enhetstestramverk som kan köra doctests och unitTests.
- Nose2 är baserad på unittest därför kallas förlänga unittest eller unittest med plugin som har utformats för att göra testning enkelt och enklare.
- näsa använder kollektiva tester från unittest.testcase och stöder flera funktioner för att skriva tester och undantag.
- Nose stöder paketfixturer, klasser, moduler och komplex initialisering som ska definieras vid en enda tidpunkt istället för att skriva ofta.
exempel:
from mynum import *import nosedef test_add_integers(): assert add(5, 3) == 8def test_add_floats(): assert add(1.5, 2.5) == 4def test_add_strings(): nose.tools.assert_raises(AssertionError, add, 'paul', 'carol') // To throw one of the expected exception to passif __name__ == '__main__': nose.run()
skärmdump för referens:
paket / metoder:
Method | Parameters | Working |
---|---|---|
nose.tools.ok_ | (expr, msg = None) | Shortcut to assert. |
nose.tools.ok_ | (a,b, msg = None) | Shortcut to ‘assert a==b, ”%r != %r” % (a, b) |
nose.tools.make_decorator | (func) | To replicate metadata for the given function. |
nose.tools.höjer | (*undantag) | för att kasta ett av de förväntade undantagen att passera. |
näsa.verktyg.timed | (limit) | för att ange tidsgränsen inom vilken testet ska få ett pass. |
näsa.verktyg.with_setup | (setup = None, teardown = None) | för att lägga till installationsmetod till en testfunktion. |
näsa.verktyg.intest | (func) | metod eller funktion kan kallas test. |
näsa.verktyg.nottest | (func) | metod eller funktion kan inte kallas test. |
länk till API: Plugins för Nose2
nedladdningslänk: Nose2
#6) vittna
- vittna var utformad för att ersätta unittest och näsa. Vittna har mer avancerade funktioner över unittest.
- vittna är populärt som en Java-implementering av semantisk testning (lätt att lära sig och implementera programvarutestspecifikation).
- att utföra automatiserad enhet, Integration och systemtestning är lättare att vittna om.
funktioner
- enkel syntax till fixturmetod.
- improviserad test upptäckt.
- klassnivå inställning och nedkoppling fixtur metod.
- Extensible plugin system.
- lätt att hantera testverktyg.
exempel:
from testify import *class AdditionTestCase(TestCase): @class_setup def init_the_variable(self): self.variable = 0 @setup def increment_the_variable(self): self.variable += 1 def test_the_variable(self): assert_equal(self.variable, 1) @suite('disabled', reason='ticket #123, not equal to 2 places') def test_broken(self): # raises 'AssertionError: 1 !~= 1.01' assert_almost_equal(1, 1.01, threshold=2) @teardown def decrement_the_variable(self): self.variable -= 1 @class_teardown def get_rid_of_the_variable(self): self.variable = Noneif __name__ == "__main__":run()
skärmdump för referens:
paket / metoder:
Paketnamn | arbetar | Paketimport |
---|---|---|
assert | tillhandahåller omfattande testverktyg för systemtestning. | importera ”github.com/stretchr/testify/assert” |
mock | användbart för att testa dina objekt och samtal. | importera ”github.com/stretchr/testify/mock” |
Kräv | fungerar som samma som att hävda men stoppar testkörning när test misslyckas. | importera ” github.com/stretchr/testify/require” |
suite | det ger logik för att skapa testsvitstruktur och metoder. | importera ”github.com/stretchr/testify/suite” |
länk till API: paketfiler av vittna
nedladdningslänk: vittna
ytterligare Python Testing Framework
hittills har vi granskat de mest populära Python Testing Framework. Det finns några fler namn på den här listan som kan bli populära i framtiden.
#7) Behave
- Behave kallas BDD (Behavior Driven Development) testramverk som också används för svart låda testning. Behave använder det naturliga språket för att skriva tester och arbetar med Unicode-strängar.
- Behave katalog innehåller funktionsfiler som har en vanlig textformat ser ut som naturligt språk och Python steg implementeringar.
länk till API: Behave User Guide
nedladdningslänk: Behave
#8) sallad
- sallad är användbar för beteendestyrd Utvecklingstestning. Det gör testprocessen enkel och skalbar.
- sallad innehåller steg som:
- beskriver beteende
- steg definition i Python.
- kör koden
- modifiera koden för att klara testet.
- kör den modifierade koden.
- dessa steg följs i 3 – 4 gånger för att göra programvaran felfri och därigenom förbättra dess kvalitet.
länk till API: sallad dokumentation
nedladdningslänk: sallad
Vanliga frågor och svar
Låt oss ta en titt på några av de vanligaste vanliga frågorna om detta ämne-
Q #1) Varför används Python för automatisering?
svar: som ’Python kommer med verktyg och bibliotek som stöder automatiserad testning för ditt system’, det finns flera andra skäl till varför Python används för testning.
- Python är objektorienterad och funktionell som låter programmerare avgöra om funktionen och klasserna är lämpliga enligt kraven.
- Python erbjuder ett rikt bibliotek med användbara paket för testning efter installation av ’Pip’.
- statslösa funktioner och enkel syntax är användbara för att skapa läsbara tester.
- Python spelar rollen som bron mellan testfallet och testkoden.
- Python stöder dynamisk duck typing.
- erbjuder väl konfigurerad IDE och bra stöd till BDD-ramverket.
- Rich kommandoradsstöd är till hjälp för att utföra en manuell kontroll.
- enkel och bra struktur, modularitet, rik verktygsuppsättning och paket kan vara användbara för skalutveckling.
Q #2) Hur man strukturerar ett Python-test?
Svar: När du skapar ett test i Python bör du överväga två saker som anges nedan.
- vilken modul / del av systemet du vill testa?
- vilken typ av testning väljer du (om enhetstestning eller integrationstestning)?
den övergripande strukturen för Python-testet är lika enkelt som andra där vi bestämmer komponenterna i tester som-ingångar, testkod som ska utföras, utmatning och jämförelse av utdata med förväntade resultat.
Q #3) vilket automatiseringsverktyg är skrivet i Python?
svar: Buildout är ett automatiseringsverktyg som är skrivet i och utökat med Python och används för att automatisera mjukvaruaggregat. Utbyggnad kan tillämpas på alla programfaser från utveckling till distribution.
detta verktyg är baserat på 3 kärnprinciper:
- repeterbarhet: det anges projektkonfiguration utvecklats i samma miljö bör ge samma resultat oavsett deras historia.
- Componentization: Programvarutjänsten bör innehålla självövervakningsverktyg och bör konfigurera övervakningssystemet under produktdistribution.
- Automation: programvarudistribution bör vara mycket automatiserad och tidsbesparande.
Q #4) kan Python användas med selen?
Svar: Ja. Python-språk används med selen för att utföra testning. Python API är till hjälp för att ansluta till webbläsaren via Selenium. Python Selenium combination kan användas för att skriva funktionella/acceptanstester med Selenium WebDriver.
Q # 5) är selen med Python bra?
svar: Det finns flera anledningar till varför selen och Python anses vara en bra kombination:
- selen har den starkaste verktygssatsen för att stödja snabbtestautomatisering.
- selen erbjuder dedikerade testfunktioner för att utföra webbapplikationstestning som hjälper till att undersöka verkligt applikationsbeteende.Python är ett objektbaserat och användarvänligt skriptspråk på hög nivå med en enkel sökordsstruktur.
Nu när det gäller att använda selen med Python har det flera fördelar som anges nedan.
- lätt att koda och läsa.
- Python API är extremt användbart för att ansluta dig till webbläsaren via Selenium.
- selen skickar standardkommando för Python till olika webbläsare oavsett dess designvariationer.
- Python är relativt enkelt och kompakt än de andra programmeringsspråken.
- Python kommer med ett stort samhälle för att stödja dem som är helt nya att använda selen med Python för att utföra automatiseringstestning.
- Det är gratis och öppet programmeringsspråk hela tiden.
- Selenium WebDriver är en annan stark anledning till att använda selen med Python. Selenium WebDriver har starkt bindande stöd för Pythons enkla användargränssnitt.
Q #6) Vilka är åtgärderna för att välja det bästa Python-testramverket?
svar: För att välja det bästa Python-testramverket bör nedanstående punkter beaktas:
- Om skriptens kvalitet och struktur uppfyller dina syften. Programmeringsskriptet ska vara lätt att förstå / underhålla och fritt från defekter.
- Programmeringsstrukturen för Python spelar en viktig roll för att välja testramverket som består – attribut, uttalanden, funktioner, operatörer, moduler och standardbiblioteksfiler.
- hur enkelt kan du generera tester och i vilken utsträckning kan de återanvändas?
- den metod som antagits för test / testmodul utförande (modul körtekniker).
Q #7) Hur väljer man det bästa Python-Testramverket?
svar: att förstå fördelarna och begränsningarna för varje ramverk är ett bättre sätt att välja det bästa Python-Testramverket. Låt oss utforska –
Robot Framework:
fördelar:
- Nyckelordstyrd testmetod hjälper till att skapa läsbara testfall på ett enklare sätt.
- flera API: er
- enkel testdatasyntax
- stöder parallell testning via Selenium Grid.
Begränsningar:
- att skapa anpassade HTML-rapporter är ganska knepigt med Robot.
- mindre stöd för parallell testning.
- Det kräver Python 2.7.14 och senare.
Pytest:
fördelar:
- stöder kompakt testpaket.
- inget behov av debugger eller någon explicit testlogg.
- flera fixturer
- utbyggbara plugins
- enkelt och enkelt testskapande.
- möjligt att skapa testfall med färre buggar.
Begränsningar:
- inte kompatibel med andra ramar.
Unittest:
fördelar:
- inget behov av någon ytterligare modul.
- lätt att lära sig för testare på nybörjarnivå.
- enkelt och enkelt testkörning.
- snabb testrapport generation.
Begränsningar
- snake_case namngivning av Python och camelCase namngivning av JUnit orsakar lite förvirring.
- oklar avsikt med testkoden.
- kräver en enorm mängd standardkod.
Doctest:
fördelar:
- ett bra alternativ för att utföra små tester.
- testdokumentation inom metoden ger också ytterligare information om hur metoden fungerar.
Begränsningar
- det jämför bara utskriften. Varje variation i utgången kommer att orsaka ett testfel.
näsa 2:
fördelar:
- näsa 2 stöder mer testkonfiguration än unittest.
- den innehåller en betydande uppsättning aktiva plugins.
- olika API från unittest som ger mer information om felet.
Begränsningar:
- när du installerar plugins från tredje part måste du installera setup tool / distribuera paket, eftersom Nose2 stöder Python 3 men inte plugins från tredje part.
vittna:
fördelar:
- lätt att förstå och använda.
- enhet, Integration och systemtester kan enkelt skapas.
- hanterbara och återanvändbara testkomponenter.
- lägga till nya funktioner för att Vittnaär enkelt.
Begränsningar:
- ursprungligen Testify utvecklades för att ersätta unittest och näsa men processen att transitera den till pytest är på, så det rekommenderas för användarna att undvika att använda Testify för några kommande projekt.
Behave Framework:
fördelar:
- enkelt utförande av alla typer av testfall.
- detaljerad resonemang & tänkande
- klarhet i QA/Dev-utgång.
Begränsningar:
- Det stöder bara svart låda testning.
sallad Ram:
fördelar:
- enkelt språk för att skapa flera testscenarier.
- användbart för beteendestyrda testfall för black-box-testning.
Begränsningar:
- Det behöver starkt stark samordning mellan utvecklare, testare & intressenter.
Du kan välja det bästa lämpliga Python-testramverket genom att överväga ovanstående fördelar och begränsningar som hjälper till att utveckla kriterierna som passar dina affärsbehov.
Q #8) vilket ramverk är bäst för Python Automation?
svar: Medan vi överväger fördelarna och begränsningarna kan vi betrakta testtypen som en av åtgärderna för att välja bästa testramverk:
- funktionstestning: Robot, PyTest, Unittest
- beteendestyrd testning: uppför, sallad
Robot är det bästa ramverket för dem som är nya för Python-testning och vill få en solid start.
slutsats
Subunit, Trial, Test resources, Sancho, Testtools är några fler namn som läggs till i listan över Python-testramverk. Det finns dock bara några verktyg som har populariserats så långt som Python-testning är ett relativt nytt koncept som introduceras i testvärlden.
företag arbetar med att göra dessa verktyg bättre så att de är lätta att förstå och utföra testning. Med de rika och exakta klassfixturerna, plugins och paket kan dessa verktyg bli välkända och föredragna för att utföra Python-testning.
samtidigt ger ramar som nämns ovan från unittest to Testify mycket nödvändigt stöd och service för att uppnå den avsedda systemprestandan.