PyTest oktatóanyag: Mi az, hogyan kell telepíteni, keretrendszer, állítások

Mi az a PyTest?

PyTest egy tesztelési keretrendszer, amely lehetővé teszi a felhasználók számára, hogy tesztkódokat írjanak Python programozási nyelv. Segít egyszerű és méretezhető tesztesetek megírásában adatbázisokhoz, API-khoz vagy felhasználói felületekhez. A PyTest elsősorban API-k tesztjére szolgál. Segít teszteket írni az egyszerű egységtesztektől az összetett funkcionális tesztekig.

Miért érdemes a PyTestet használni?

A pytest néhány előnye az

  • Nagyon könnyű elkezdeni az egyszerű és könnyű szintaxis miatt.
  • Párhuzamosan futtathat teszteket.
  • Futtathat egy adott tesztet vagy tesztek egy részét
  • A tesztek automatikus felismerése
  • Tesztek kihagyása
  • Nyílt forráskód

A PyTest telepítése

A PyTest telepítésének folyamata a következő:

Step 1) A pytest a következővel telepítheti

pip install pytest==2.9.1

A telepítés befejezése után a gombbal megerősítheti

py.test -h

Ekkor megjelenik a súgó

telepítse a PyTestet

Az első alapvető PyTest

Most egy alap PyTest példával megtanuljuk, hogyan kell használni a Pytestet.

Hozzon létre egy study_pytest mappát. Ebben a mappában fogjuk létrehozni tesztfájljainkat.

Kérjük, keresse meg a mappát a parancssorban.

Hozzon létre egy test_sample1.py nevű fájlt a mappában

Az első alapvető PyTest

Adja hozzá az alábbi kódot, és mentse el

import pytest
def test_file1_method1():
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed"
def test_file1_method2():
	x=5
	y=6
	assert x+1 == y,"test failed" 

Futtassa a tesztet a paranccsal

py.test

A kimenetet mint

test_sample1.py F.
============================================== FAILURES ========================================
____________________________________________ test_sample1 ______________________________________
    def test_file1_method1():
    	x=5
    	y=6
       	assert x+1 == y,"test failed"
>      	assert x == y,"test failed"
E       AssertionError: test failed
E       assert 5 == 6
test_sample1.py:6: AssertionError

Az első alapvető PyTest

Itt a test_sample1.py F.

F azt mondja, kudarc

Pont(.) azt mondja, siker.

A hibák részben láthatja a sikertelen módszer(eke)t és a hibasort. Itt x==y azt jelenti, hogy 5==6, ami hamis.

Ebben a PyTest-oktatóanyagban a következő lépésben a PyTestben történő érvényesítésről fogunk tanulni.

Állítások a PyTestben

A Pytest állítások olyan ellenőrzések, amelyek igaz vagy hamis állapotot adnak vissza. In Python Pytest, ha egy állítás meghiúsul egy tesztmetódusban, akkor a metódus végrehajtása ott leáll. A tesztmódszer fennmaradó kódja nem kerül végrehajtásra, és a Pytest állítások a következő tesztmódszerrel folytatódnak.

Pytest Assert példák:

assert "hello" == "Hai" is an assertion failure.
assert 4==4 is a successful assertion
assert True is a successful assertion
assert False is an assertion failure.

Fontolja

assert x == y,"test failed because x=" + str(x) + " y=" + str(y)

Helyezze ezt a kódot a test_file1_method1()-be az állítás helyett

assert x == y,"test failed"

A teszt futtatásával a hiba as AssertionError: a teszt sikertelen x=5 y=6

Hogyan azonosítja a PyTest a tesztfájlokat és a vizsgálati módszereket

Alapértelmezés szerint a pytest csak a karakterekkel kezdődő fájlneveket azonosítja teszt_ vagy azzal végződve _teszt mint a tesztfájlok. Más fájlneveket azonban kifejezetten megemlíthetünk (később magyarázzuk). A Pytest megköveteli a tesztmetódusnevek kezdetét "teszt.” Az összes többi metódusnevet figyelmen kívül hagyja a rendszer, még akkor is, ha kifejezetten kérjük a metódusok futtatását.

Nézzen meg néhány példát érvényes és érvénytelen pytest fájlnevekre

test_login.py - valid
login_test.py - valid
testlogin.py -invalid
logintest.py -invalid

Megjegyzés: Igen, kifejezetten megkérhetjük a pytest-et, hogy válassza ki a testlogin.py és a logintest.py fájlokat

Tekintse meg az érvényes és érvénytelen pytest tesztmódszerek néhány példáját

def test_file1_method1(): - valid
def testfile1_method1(): - valid
def file1_method1(): - invalid	

Megjegyzés: Még ha kifejezetten megemlítjük is a file1_method1(), a pytest nem fogja futtatni ezt a metódust.

Futtasson több tesztet egy adott fájlból és több fájlból

Jelenleg a study_pytest mappában található egy test_sample1.py fájl. Tegyük fel, hogy több fájlunk van, mondjuk a test_sample2.py, test_sample3.py. Az összes teszt futtatásához a mappában és az almappákban található összes fájlból csak a pytest parancsot kell futtatnunk.

py.test

Ez az összes test_ karakterrel kezdődő fájlnevet és a _test karakterrel végződő fájlnevet futtatja az adott mappában és a mappa almappáiban.

Ha csak egy adott fájlból szeretne teszteket futtatni, használhatjuk a py.test fájlt

py.test test_sample1.py

Futtassa le az Entire Test egy részhalmazát a PyTest segítségével

Néha nem akarjuk a teljes tesztcsomagot futtatni. A Pytest lehetővé teszi bizonyos tesztek futtatását. 2 módon tehetjük meg

  • Tesztnevek csoportosítása részkarakterlánc-illesztéssel
  • A tesztek csoportosítása markerek szerint

Már van test_sample1.py. Hozzon létre egy test_sample2.py fájlt, és adja hozzá az alábbi kódot

def test_file2_method1():
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed because x=" + str(x) + " y=" + str(y)
def test_file2_method2():
	x=5
	y=6
	assert x+1 == y,"test failed"

Tehát jelenleg van

• test_sample1.py
• test_file1_method1()
• test_file1_method2()
• test_sample2.py
• test_file2_method1()
• test_file2_method2()

1. lehetőség) Futtasson teszteket részkarakterlánc-illesztéssel

Itt le kell futtatnunk az összes olyan tesztet, amelynek nevében a method1 szerepel

py.test -k method1 -v
-k <expression> is used to represent the substring to match
-v increases the verbosity

Tehát a py.test -k method1 -v futtatása a következő eredményt adja

test_sample2.py::test_file2_method1 FAILED
test_sample1.py::test_file1_method1 FAILED

============================================== FAILURES ==============================================
_________________________________________ test_file2_method1 _________________________________________
    def test_file2_method1():
    	x=5
    	y=6
       	assert x+1 == y,"test failed"
>      	assert x == y,"test failed because x=" + str(x) + " y=" + str(y)
E       AssertionError: test failed because x=5 y=6
E       assert 5 == 6
test_sample2.py:5: AssertionError

_________________________________________ test_file1_method1 _________________________________________
    @pytest.mark.only
    def test_file1_method1():
    	x=5
    	y=6
       	assert x+1 == y,"test failed"
>      	assert x == y,"test failed because x=" + str(x) + " y=" + str(y)
E       AssertionError: test failed because x=5 y=6
E       assert 5 == 6
test_sample1.py:8: AssertionError

================================= 2 tests deselected by '-kmethod1' ==================================
=============================== 2 failed, 2 deselected in 0.02 seconds ===============================

Itt a vége felé láthatod 2 teszt kijelölését megszüntette a '-kmethod1' amelyek a teszt_fájl1_módszer2 és a teszt_fájl2_módszer2

Próbáljon meg futni különféle kombinációkkal, például: -

py.test -k method -v - will run all the four methods
py.test -k methods -v – will not run any test as there is no test name matches the substring 'methods'

2. lehetőség: Futtasson teszteket markerekkel

A Pytest lehetővé teszi, hogy különböző attribútumokat állítsunk be a vizsgálati módszerekhez a pytest markerek (@pytest.mark) segítségével. Ahhoz, hogy jelölőket használjunk a tesztfájlban, importálnunk kell a pytest-et a tesztfájlokba.

Itt különböző markerneveket fogunk alkalmazni a tesztelési módszerekre, és specifikus teszteket futtatunk a markernevek alapján. A segítségével meghatározhatjuk a markereket az egyes tesztneveken

@pytest.mark.<name>.			

A vizsgálati módszereken meghatározzuk a set1 és set2 markereket, és a tesztet a markernevek segítségével fogjuk lefuttatni. Frissítse a tesztfájlokat a következő kóddal

teszt_minta1.py

import pytest
@pytest.mark.set1
def test_file1_method1():
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed because x=" + str(x) + " y=" + str(y)

@pytest.mark.set2
def test_file1_method2():
	x=5
	y=6
	assert x+1 == y,"test failed"

teszt_minta2.py

import pytest
@pytest.mark.set1
def test_file2_method1():
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed because x=" + str(x) + " y=" + str(y)

@pytest.mark.set1
def test_file2_method2():
	x=5
	y=6
	assert x+1 == y,"test failed"

A megjelölt tesztet lefuttathatjuk

py.test -m <name>
-m <name> mentions the marker name

Futtassa a py.test -m set1 parancsot. Ez a teszt_fájl1_módszere1, teszt_fájl2_módszere1, teszt_fájl2_módszere2 metódusait fogja futtatni.

A py.test -m set2 futtatása a test_file1_method2 parancsot fogja futtatni.

Futtasson teszteket a Pytesttel párhuzamosan

Általában egy tesztcsomag több tesztfájlt és több száz tesztmódszert tartalmaz, amelyek végrehajtása jelentős időt vesz igénybe. A Pytest lehetővé teszi a tesztek párhuzamos futtatását.

Ehhez először telepítenünk kell a pytest-xdist futtatásával

pip install pytest-xdist

Futtasson teszteket a Pytesttel párhuzamosan

Most már futtathat teszteket

py.test -n 4

-n több dolgozó használatával futtatja le a teszteket. A fenti parancsban 4 dolgozó lesz a teszt futtatása.

Pytest Fixtures

A rögzítéseket akkor használjuk, ha minden tesztelési módszer előtt valamilyen kódot szeretnénk futtatni. Tehát ahelyett, hogy minden tesztben megismételnénk ugyanazt a kódot, rögzítéseket határozunk meg. Általában a rögzítéseket adatbázis-kapcsolatok inicializálására, a bázis átadására stb

A metódus Pytest-fixtureként van megjelölve a -val

@pytest.fixture

Egy tesztmódszer használhat Pytest fixture-t, ha bemeneti paraméterként említi a rögzítést.

Hozzon létre egy új test_basic_fixture.py fájlt a következő kóddal

import pytest
@pytest.fixture
def supply_AA_BB_CC():
	aa=25
	bb =35
	cc=45
	return [aa,bb,cc]

def test_comparewithAA(supply_AA_BB_CC):
	zz=35
	assert supply_AA_BB_CC[0]==zz,"aa and zz comparison failed"

def test_comparewithBB(supply_AA_BB_CC):
	zz=35
	assert supply_AA_BB_CC[1]==zz,"bb and zz comparison failed"

def test_comparewithCC(supply_AA_BB_CC):
	zz=35
	assert supply_AA_BB_CC[2]==zz,"cc and zz comparison failed"

Itt

  • Van egy supply_AA_BB_CC nevű lámpatestünk. Ez a módszer egy 3 értékből álló listát ad vissza.
  • 3 vizsgálati módszerünk van az egyes értékek összehasonlítására.

Mindegyik tesztfüggvény rendelkezik egy bemeneti argumentummal, amelynek neve egyezik egy elérhető rögzítővel. A Pytest ezután meghívja a megfelelő fixture metódust, és a visszaadott értékek a bemeneti argumentumban lesznek tárolva, itt a lista [25,35,45]. Most a listaelemeket használják az összehasonlítás vizsgálati módszereiben.

Most futtassa a tesztet, és nézze meg az eredményt

 py.test test_basic_fixture
test_basic_fixture.py::test_comparewithAA FAILED                                                                                                                                                                                       
test_basic_fixture.py::test_comparewithBB PASSED                                                                                                                                                                                       
test_basic_fixture.py::test_comparewithCC FAILED
                                                                                                                                                                                       
============================================== FAILURES ==============================================
_________________________________________ test_comparewithAA _________________________________________
supply_AA_BB_CC = [25, 35, 45]
    def test_comparewithAA(supply_AA_BB_CC):
    	zz=35
>   	assert supply_AA_BB_CC[0]==zz,"aa and zz comparison failed"
E    AssertionError: aa and zz comparison failed
E    assert 25 == 35
test_basic_fixture.py:10: AssertionError

_________________________________________ test_comparewithCC _________________________________________
supply_AA_BB_CC = [25, 35, 45]
    def test_comparewithCC(supply_AA_BB_CC):
    	zz=35
>   	assert supply_AA_BB_CC[2]==zz,"cc and zz comparison failed"
E    AssertionError: cc and zz comparison failed
E    assert 45 == 35
test_basic_fixture.py:16: AssertionError
================================= 2 failed, 1 passed in 0.05 seconds =================================

A test_comparewithBB teszt sikeres, mivel zz=BB=35, és a fennmaradó 2 teszt sikertelen.

A rögzítési metódusnak csak a definiált tesztfájlon belül van hatóköre. Ha megpróbáljuk elérni a fixture-t egy másik tesztfájlban, hibaüzenetet kapunk, amely azt mondja, hogy fixture A 'supply_AA_BB_CC' nem található más fájlokban található vizsgálati módszerekhez.

Ha ugyanazt a fixture-t több tesztfájllal is használni szeretné, a conftest.py nevű fájlban fixture metódusokat hozunk létre.

Lássuk ezt az alábbi PyTest példán keresztül. Hozzon létre 3 fájlt: conftest.py, test_basic_fixture.py, test_basic_fixture2.py a következő kóddal

conftest.py

import pytest
@pytest.fixture
def supply_AA_BB_CC():
	aa=25
	bb =35
	cc=45
	return [aa,bb,cc]

test_basic_fixture.py

import pytest
def test_comparewithAA(supply_AA_BB_CC):
	zz=35
	assert supply_AA_BB_CC[0]==zz,"aa and zz comparison failed"

def test_comparewithBB(supply_AA_BB_CC):
	zz=35
	assert supply_AA_BB_CC[1]==zz,"bb and zz comparison failed"

def test_comparewithCC(supply_AA_BB_CC):
	zz=35
	assert supply_AA_BB_CC[2]==zz,"cc and zz comparison failed"

test_basic_fixture2.py

import pytest
def test_comparewithAA_file2(supply_AA_BB_CC):
	zz=25
	assert supply_AA_BB_CC[0]==zz,"aa and zz comparison failed"

def test_comparewithBB_file2(supply_AA_BB_CC):
	zz=25
	assert supply_AA_BB_CC[1]==zz,"bb and zz comparison failed"

def test_comparewithCC_file2(supply_AA_BB_CC):
	zz=25
	assert supply_AA_BB_CC[2]==zz,"cc and zz comparison failed"

A pytest először megkeresi a fixture-t a tesztfájlban, és ha nem találja, akkor a conftest.py fájlban

Futtassa a tesztet a py.test -k test_comparewith -v paranccsal, hogy megkapja az alábbi eredményt

test_basic_fixture.py::test_comparewithAA FAILED  
test_basic_fixture.py::test_comparewithBB PASSED 
test_basic_fixture.py::test_comparewithCC FAILED 
test_basic_fixture2.py::test_comparewithAA_file2 PASSED 
test_basic_fixture2.py::test_comparewithBB_file2 FAILED 
test_basic_fixture2.py::test_comparewithCC_file2 FAILED

Pytest paraméterezett teszt

A teszt paraméterezésének célja egy teszt futtatása több argumentumkészlettel szemben. Ezt a @pytest.mark.parametrize segítségével tehetjük meg.

Ezt látni fogjuk az alábbi PyTest példával. Itt 3 argumentumot adunk át egy tesztmódszernek. Ez a tesztmódszer hozzáadja az első 2 argumentumot, és összehasonlítja a 3. argumentummal.

Hozza létre a test_addition.py tesztfájlt az alábbi kóddal

import pytest
@pytest.mark.parametrize("input1, input2, output",[(5,5,10),(3,5,12)])
def test_add(input1, input2, output):
	assert input1+input2 == output,"failed"

Itt a tesztmódszer 3 argumentumot fogad el – input1, input2, output. Hozzáadja az input1-et és input2-t, és összehasonlítja a kimenettel.

Futtassuk le a tesztet a py.test -k test_add -v paranccsal, és nézzük meg az eredményt

test_addition.py::test_add[5-5-10] PASSED                                                                                                                                                                                              
test_addition.py::test_add[3-5-12] FAILED                                                                                                                                                                                              
============================================== FAILURES ==============================================
__________________________________________ test_add[3-5-12] __________________________________________
input1 = 3, input2 = 5, output = 12
    @pytest.mark.parametrize("input1, input2, output",[(5,5,10),(3,5,12)])
    def test_add(input1, input2, output):
>   	assert input1+input2 == output,"failed"
E    AssertionError: failed
E    assert (3 + 5) == 12
test_addition.py:5: AssertionError

A tesztek 2-szer futottak le – az egyik 5+5 ==10, a másik pedig 3+5 ==12

test_addition.py::test_add[5-5-10] SIKERTELEN

test_addition.py::test_add[3-5-12] SIKERTELEN

Pytest Xfail / Skip Tests

Lesznek olyan helyzetek, amikor nem akarunk tesztet végrehajtani, vagy a próbaper nem releváns egy adott időre. Ilyen helyzetekben lehetőségünk van a teszt sikertelenségére vagy a tesztek kihagyására

Az xfailed teszt végrehajtásra kerül, de nem számít sikertelen vagy sikeres tesztnek. Ha a teszt sikertelen, nem jelenik meg a visszakövetés. Megbukhatunk a tesztek használatával

@pytest.mark.xfail.

A teszt kihagyása azt jelenti, hogy a teszt nem kerül végrehajtásra. A teszteket kihagyhatjuk a használatával

@pytest.mark.skip.

Szerkessze a test_addition.py fájlt az alábbi kóddal

import pytest
@pytest.mark.skip
def test_add_1():
	assert 100+200 == 400,"failed"

@pytest.mark.skip
def test_add_2():
	assert 100+200 == 300,"failed"

@pytest.mark.xfail
def test_add_3():
	assert 15+13 == 28,"failed"

@pytest.mark.xfail
def test_add_4():
	assert 15+13 == 100,"failed"

def test_add_5():
	assert 3+2 == 5,"failed"

def test_add_6():
	assert 3+2 == 6,"failed"

Itt

  • A teszt_add_1 és a teszt_add_2 kimarad, és nem kerül végrehajtásra.
  • teszt_add_3 és teszt_add_4 x sikertelen. Ezek a tesztek végrehajtásra kerülnek, és az xfailed (a teszt sikertelensége esetén) vagy az xpassed (teszt sikeressége esetén) tesztek részét képezik. A kudarcoknak nem lesz nyoma.
  • A test_add_5 és a test_add_6 végrehajtásra kerül, és a test_add_6 hibajelzést küld a visszakövetéssel, miközben a test_add_5 sikeres

Hajtsa végre a tesztet a py.test test_addition.py -v paranccsal, és nézze meg az eredményt

test_addition.py::test_add_1 SKIPPED
test_addition.py::test_add_2 SKIPPED
test_addition.py::test_add_3 XPASS
test_addition.py::test_add_4 xfail
test_addition.py::test_add_5 PASSED
test_addition.py::test_add_6 FAILED

============================================== FAILURES ==============================================
_____________________________________________ test_add_6 _____________________________________________
    def test_add_6():
>   	assert 3+2 == 6,"failed"
E    AssertionError: failed
E    assert (3 + 2) == 6
test_addition.py:24: AssertionError

================ 1 failed, 1 passed, 2 skipped, 1 xfailed, 1 xpassed in 0.07 seconds =================

Eredmények XML

Teszteredményeket készíthetünk XML formátumban, amelyeket továbbíthatunk a Continuous Integration szerverekre további feldolgozásra stb. Ezt úgy lehet megtenni

py.test test_sample1.py -v –junitxml=”eredmény.xml”

Az result.xml fájl rögzíti a teszt végrehajtásának eredményét. Keresse meg alább a result.xml mintát

<?xml version="1.0" encoding="UTF-8"?>
<testsuite errors="0" failures="1" name="pytest" skips="0" tests="2" time="0.046">
   <testcase classname="test_sample1" file="test_sample1.py" line="3" name="test_file1_method1" time="0.001384973526">
     <failure message="AssertionError:test failed because x=5 y=6 assert 5 ==6">
    @pytest.mark.set1
    def test_file1_method1():
    	x=5
    	y=6
       	assert x+1 == y,"test failed"
>      	assert x == y,"test failed because x=" + str(x) + " y=" + str(y)
E       AssertionError: test failed because x=5 y=6
E       assert 5 == 6
         test_sample1.py:9: AssertionError
    </failure>
   </testcase>
   <testcase classname="test_sample1" file="test_sample1.py" line="10" name="test_file1_method2" time="0.000830173492432" />
</testsuite>

Tól összesen két tesztet láthatunk, amelyek közül az egyik sikertelen. Az alábbiakban az egyes végrehajtott tesztek részleteit láthatja címke.

Pytest Framework API tesztelése

Most létrehozunk egy kis pytest keretrendszert az API teszteléséhez. Az itt használt API egy ingyenes https://reqres.in/. Ez a webhely csak azért készült, hogy tesztelhető API-t biztosítson. Ez a weboldal nem tárolja adatainkat.

Itt írunk néhány tesztet

  • néhány felhasználó felsorolása
  • bejelentkezni a felhasználókkal

Hozd létre az alábbi fájlokat a megadott kóddal

conftest.py – van egy fixture, amely megadja az alap URL-t az összes vizsgálati módszerhez

import pytest
@pytest.fixture
def supply_url():
	return "https://reqres.in/api"

test_list_user.py – tartalmazza az érvényes és érvénytelen felhasználók listázásához szükséges tesztmódszereket

  • A test_list_valid_user teszteli az érvényes felhasználói lekérést, és ellenőrzi a választ
  • A test_list_invaliduser teszteli az érvénytelen felhasználói lekérést, és ellenőrzi a választ
import pytest
import requests
import json
@pytest.mark.parametrize("userid, firstname",[(1,"George"),(2,"Janet")])
def test_list_valid_user(supply_url,userid,firstname):
	url = supply_url + "/users/" + str(userid)
	resp = requests.get(url)
	j = json.loads(resp.text)
	assert resp.status_code == 200, resp.text
	assert j['data']['id'] == userid, resp.text
	assert j['data']['first_name'] == firstname, resp.text

def test_list_invaliduser(supply_url):
	url = supply_url + "/users/50"
	resp = requests.get(url)
	assert resp.status_code == 404, resp.text

test_login_user.py – tesztmódszereket tartalmaz a bejelentkezési funkciók tesztelésére.

  • A test_login_valid teszteli az érvényes bejelentkezési kísérletet e-mail címmel és jelszóval
  • A test_login_no_password teszteli az érvénytelen bejelentkezési kísérletet jelszó átadása nélkül
  • A test_login_no_email az érvénytelen bejelentkezési kísérletet e-mail átadása nélkül teszteli.
import pytest
import requests
import json
def test_login_valid(supply_url):
	url = supply_url + "/login/" 
	data = {'email':'[email protected]','password':'something'}
	resp = requests.post(url, data=data)
	j = json.loads(resp.text)
	assert resp.status_code == 200, resp.text
	assert j['token'] == "QpwL5tke4Pnpja7X", resp.text

def test_login_no_password(supply_url):
	url = supply_url + "/login/" 
	data = {'email':'[email protected]'}
	resp = requests.post(url, data=data)
	j = json.loads(resp.text)
	assert resp.status_code == 400, resp.text
	assert j['error'] == "Missing password", resp.text

def test_login_no_email(supply_url):
	url = supply_url + "/login/" 
	data = {}
	resp = requests.post(url, data=data)
	j = json.loads(resp.text)
	assert resp.status_code == 400, resp.text
	assert j['error'] == "Missing email or username", resp.text

Futtassa a tesztet a py.test -v használatával

Lásd az eredményt mint

test_list_user.py::test_list_valid_user[1-George] PASSED                                                                                                                                                                               
test_list_user.py::test_list_valid_user[2-Janet] PASSED                                                                                                                                                                                
test_list_user.py::test_list_invaliduser PASSED                                                                                                                                                                                        
test_login_user.py::test_login_valid PASSED                                                                                                                                                                                            
test_login_user.py::test_login_no_password PASSED                                                                                                                                                                                      
test_login_user.py::test_login_no_email PASSED

Frissítse a teszteket, és próbáljon ki különféle kimeneteket

Összegzésként

Ebben a PyTest oktatóanyagban foglalkoztunk

  • A pytest telepítése a segítségével pip telepítés pytest=2.9.1
  • Egyszerű pytest program, és futtassa a py.test paranccsal.
  • Az assert x==y állítások igaz vagy hamis értéket adnak vissza.
  • Hogyan azonosítja a pytest a tesztfájlokat és -módszereket.
  • Fájlok tesztelése a következővel kezdődik: teszt_ vagy azzal végződve _teszt
  • Vizsgálati módszerek kezdve teszt
  • py.test parancs futtatja az összes tesztfájlt a mappában és az almappákban. Egy adott fájl futtatásához használhatjuk a py.test parancsot
  • Futtassa le a vizsgálati módszerek egy részhalmazát
  • A tesztnevek csoportosítása a matching.py.test -k részkarakterlánc szerint -v futtatja az összes tesztet nevében.
  • Futtassa le a tesztet markerekkel.Jelölje meg a teszteket a @pytest.mark használatával. és futtassa a teszteket a pytest -m használatával jelű tesztek futtatásához .
  • Futtasson teszteket párhuzamosan
  • A pytest-xdist telepítése a pip install pytest-xdist segítségével
  • Futtasson teszteket a py.test -n NUM paranccsal, ahol a NUM a dolgozók száma
  • Fixture metódusok létrehozása a kód futtatásához minden teszt előtt a metódus @pytest.fixture megjelölésével
  • A rögzítési metódusok hatóköre a definiált fájlon belül van.
  • Egy rögzítési módszer több tesztfájlon keresztül is elérhető, ha a conftest.py fájlban definiálja.
  • Egy tesztmetódus elérheti a Pytest-fixture-t, ha bemeneti argumentumként használja.
  • Paraméterezési tesztek több bemeneti készlettel történő futtatáshoz.
    @pytest.mark.parametrize(“bemenet1, bemenet2, kimenet”,[(5,5,10),(3,5,12)])
    def test_add(bemenet1, bemenet2, kimenet):
    assert input1+input2 == output,”sikertelen”
    futtatja a tesztet az (5,5,10) és (3,5,12) bemenetekkel
  • Tesztek kihagyása/xfail a @pytets.mark.skip és @pytest.mark.xfail használatával
  • Hozzon létre teszteredményeket XML formátumban, amely lefedi a végrehajtott teszt részleteit a py.test test_sample1.py -v –junitxml=”result.xml” használatával
  • Egy minta pytest keretrendszer API teszteléséhez

Foglald össze ezt a bejegyzést a következőképpen: