Výukový program PyTest: Co je to, jak nainstalovat, rámec, tvrzení

Co je PyTest?

PyTest je testovací rámec, který umožňuje uživatelům psát testovací kódy pomocí Python programovací jazyk. Pomáhá vám psát jednoduché a škálovatelné testovací případy pro databáze, rozhraní API nebo uživatelské rozhraní. PyTest se používá hlavně pro psaní testů pro API. Pomáhá psát testy od jednoduchých jednotkových testů až po komplexní funkční testy.

Proč používat PyTest?

Některé z výhod pytestu jsou

  • Velmi snadné začít s jeho jednoduchou a snadnou syntaxí.
  • Může spouštět testy paralelně.
  • Může spustit konkrétní test nebo podmnožinu testů
  • Automaticky detekovat testy
  • Přeskočit testy
  • open source

Jak nainstalovat PyTest

Následuje postup, jak nainstalovat PyTest:

Krok 1) Můžete nainstalovat pytest pomocí

pip install pytest==2.9.1

Jakmile je instalace dokončena, můžete ji potvrdit pomocí

py.test -h

Tím se zobrazí nápověda

nainstalovat PyTest

První základní PyTest

Nyní se naučíme, jak používat Pytest se základním příkladem PyTest.

Vytvořte složku study_pytest. V této složce vytvoříme naše testovací soubory.

Přejděte do této složky v příkazovém řádku.

Ve složce vytvořte soubor s názvem test_sample1.py

První základní PyTest

Přidejte do něj níže uvedený kód a uložte

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" 

Spusťte test pomocí příkazu

py.test

Získáte výstup jako

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

První základní PyTest

Zde v test_sample1.py F.

F říká selhání

Tečka(.) říká úspěch.

V sekci selhání můžete vidět neúspěšné metody a linii selhání. Zde x==y znamená 5==6, což je nepravda.

Dále v tomto tutoriálu PyTest se dozvíme o aserci v PyTest.

Tvrzení v PyTestu

Aserce Pytestu jsou kontroly, které vracejí stav True nebo False. V Python Pytest, pokud aserce selže v testovací metodě, pak se tam provádění této metody zastaví. Zbývající kód v této testovací metodě se neprovede a aserce Pytestu budou pokračovat další testovací metodou.

Příklady Pytest Assert:

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.

Zvážit

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

Umístěte tento kód do test_file1_method1() namísto výrazu

assert x == y,"test failed"

Spuštění testu poskytne selhání jako AssertionError: test se nezdařil x=5 y=6

Jak PyTest identifikuje testovací soubory a testovací metody

Ve výchozím nastavení pytest identifikuje pouze názvy souborů začínající na test_ nebo končící na _test jako testovací soubory. Můžeme však výslovně zmínit další názvy souborů (vysvětleno později). Pytest vyžaduje pro začátek názvy testovacích metod "test.“ Všechny ostatní názvy metod budou ignorovány, i když výslovně požádáme o spuštění těchto metod.

Podívejte se na některé příklady platných a neplatných názvů souborů pytest

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

Poznámka: Ano, můžeme výslovně požádat pytest, aby vybral testlogin.py a logintest.py

Podívejte se na některé příklady platných a neplatných metod testování pytestu

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

Poznámka: I když explicitně zmíníme file1_method1(), pytest tuto metodu nespustí.

Spusťte více testů z určitého souboru a více souborů

V současné době ve složce study_pytest máme soubor test_sample1.py. Předpokládejme, že máme více souborů, řekněme test_sample2.py , test_sample3.py. Ke spuštění všech testů ze všech souborů ve složce a podsložkách stačí spustit příkaz pytest.

py.test

Tím se spustí všechny názvy souborů začínající na test_ a názvy souborů končící na _test v této složce a podsložkách v této složce.

Chcete-li spustit testy pouze z určitého souboru, můžeme použít py.test

py.test test_sample1.py

Spusťte podmnožinu Entire Test pomocí PyTest

Někdy nechceme spustit celou testovací sadu. Pytest nám umožňuje spouštět specifické testy. Můžeme to udělat 2 způsoby

  • Seskupování názvů testů podle shody podřetězců
  • Seskupování testů podle markerů

Již máme test_sample1.py. Vytvořte soubor test_sample2.py a přidejte do něj níže uvedený kód

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"

Takže aktuálně máme

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

Možnost 1) Spusťte testy porovnáváním podřetězců

Zde pro spuštění všech testů, které mají v názvu method1, musíme spustit

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

Takže spuštěním py.test -k metoda1 -v získáte následující výsledek

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 ===============================

Zde můžete vidět až ke konci 2 testy byly zrušeny pomocí '-kmethod1' což jsou test_file1_method2 a test_file2_method2

Vyzkoušejte běh s různými kombinacemi jako: -

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'

Možnost 2) Spusťte testy podle značek

Pytest nám umožňuje nastavit různé atributy pro testovací metody pomocí pytest markerů, @pytest.mark . Chcete-li použít značky v testovacím souboru, musíme importovat pytest do testovacích souborů.

Zde použijeme různé názvy markerů na testovací metody a spustíme specifické testy založené na názvech markerů. Značky na názvy jednotlivých testů můžeme definovat pomocí

@pytest.mark.<name>.			

Definujeme markery set1 a set2 na testovacích metodách a test spustíme pomocí názvů markerů. Aktualizujte testovací soubory pomocí následujícího kódu

test_sample1.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"

test_sample2.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"

Můžeme spustit označený test

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

Spusťte py.test -m set1. Tím se spustí metody test_file1_method1, test_file2_method1, test_file2_method2.

Spuštěním py.test -m set2 se spustí test_file1_method2.

Spusťte testy paralelně s Pytestem

Obvykle bude mít testovací sada více testovacích souborů a stovky testovacích metod, jejichž provedení zabere značné množství času. Pytest nám umožňuje spouštět testy paralelně.

K tomu musíme nejprve nainstalovat pytest-xdist spuštěním

pip install pytest-xdist

Spusťte testy paralelně s Pytestem

Nyní můžete spustit testy

py.test -n 4

-n spouští testy pomocí více pracovníků. Ve výše uvedeném příkazu budou test provádět 4 pracovníci.

Svítidla Pytest

Svítidla se používají, když chceme před každou testovací metodou spustit nějaký kód. Takže místo opakování stejného kódu v každém testu definujeme svítidla. Svítidla se obvykle používají k inicializaci databázových připojení, předávání základny atd

Metoda je označena jako přípravek Pytest označením s

@pytest.fixture

Testovací metoda může používat zařízení Pytest uvedením zařízení jako vstupního parametru.

Vytvořte nový soubor test_basic_fixture.py s následujícím kódem

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"

Zde

  • Máme zařízení s názvem supply_AA_BB_CC. Tato metoda vrátí seznam 3 hodnot.
  • Máme 3 testovací metody porovnávající každou z hodnot.

Každá z testovacích funkcí má vstupní argument, jehož název se shoduje s dostupným zařízením. Pytest poté vyvolá odpovídající metodu fixture a vrácené hodnoty budou uloženy ve vstupním argumentu , zde seznam [25,35,45]. Nyní se položky seznamu používají v testovacích metodách pro srovnání.

Nyní spusťte test a podívejte se na výsledek

 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 =================================

Test test_comparewithBB je úspěšný, protože zz=BB=35 a zbývající 2 testy jsou neúspěšné.

Metoda přípravku má rozsah pouze v rámci toho testovacího souboru, který je definován. Pokud se pokusíme o přístup k zařízení v nějakém jiném testovacím souboru, zobrazí se chyba, že zařízení 'supply_AA_BB_CC' nebyl nalezen pro testovací metody v jiných souborech.

Chcete-li použít stejné zařízení proti více testovacím souborům, vytvoříme metody zařízení v souboru nazvaném conftest.py.

Podívejme se na to na níže uvedeném příkladu PyTest. Vytvořte 3 soubory conftest.py, test_basic_fixture.py, test_basic_fixture2.py s následujícím kódem

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"

pytest nejprve vyhledá přípravek v testovacím souboru a pokud jej nenajde, bude hledat v conftest.py

Spusťte test pomocí py.test -k test_comparewith -v, abyste získali výsledek, jak je uvedeno níže

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

Parametrizovaný test Pytestu

Účelem parametrizace testu je spustit test proti více sadám argumentů. Můžeme to udělat pomocí @pytest.mark.parametrize.

To uvidíme na níže uvedeném příkladu PyTest. Zde předáme 3 argumenty testovací metodě. Tato testovací metoda přidá první 2 argumenty a porovná je s 3. argumentem.

Vytvořte testovací soubor test_addition.py s níže uvedeným kódem

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"

Zde testovací metoda přijímá 3 argumenty – vstup1, vstup2, výstup. Přidá vstup1 a vstup2 a porovnává s výstupem.

Spusťte test pomocí py.test -k test_add -v a podívejte se na výsledek

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

Můžete vidět, že testy proběhly 2krát – jedna kontrola 5+5 ==10 a druhá kontrola 3+5 ==12

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

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

Pytest Xfail / Přeskočit testy

Nastanou situace, kdy nebudeme chtít provést test, nebo a modelový případ není pro konkrétní dobu relevantní. V těchto situacích máme možnost test Xfail nebo testy přeskočit

Test xfailed bude proveden, ale nebude počítán jako část neúspěšných nebo úspěšných testů. Pokud tento test selže, nebude zobrazeno žádné sledování. Můžeme xfail testy pomocí

@pytest.mark.xfail.

Přeskočení testu znamená, že test nebude proveden. Můžeme přeskočit testy pomocí

@pytest.mark.skip.

Upravte test_addition.py pomocí níže uvedeného kódu

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"

Zde

  • test_add_1 a test_add_2 jsou přeskočeny a nebudou provedeny.
  • test_add_3 a test_add_4 xfailed. Tyto testy budou provedeny a budou součástí testů xfailed (při selhání testu) nebo xpassed (při úspěšném testu). Nebude existovat žádná zpětná vazba pro selhání.
  • test_add_5 a test_add_6 budou provedeny a test_add_6 ohlásí selhání se zpětným sledováním, zatímco test_add_5 projde

Proveďte test pomocí py.test test_addition.py -v a podívejte se na výsledek

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 =================

Výsledky XML

Dokážeme vytvořit výsledky testů ve formátu XML, které můžeme předat serverům Continuous Integration k dalšímu zpracování a podobně. To lze provést pomocí

py.test test_sample1.py -v –junitxml=”result.xml”

Výsledek.xml zaznamená výsledek provedení testu. Níže naleznete ukázkový soubor result.xml

<?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>

Z můžeme vidět celkem dva testy, z nichž jeden je neúspěšný. Níže vidíte podrobnosti o každém provedeném testu štítek.

Pytest Framework Testování API

Nyní vytvoříme malý pytest framework pro testování API. Zde použité API je bezplatné https://reqres.in/. Tento web má pouze poskytovat testovatelné API. Tento web neukládá naše data.

Zde napíšeme nějaké testy pro

  • výpis některých uživatelů
  • přihlášení s uživateli

Vytvořte níže uvedené soubory s uvedeným kódem

conftest.py – mít přípravek, který dodá základní adresu URL pro všechny testovací metody

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

test_list_user.py – obsahuje testovací metody pro výpis platných a neplatných uživatelů

  • test_list_valid_user testuje platné uživatelské načtení a ověřuje odpověď
  • test_list_invaliduser testuje neplatné načtení uživatele a ověřuje odpověď
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 – obsahuje testovací metody pro testování funkčnosti přihlášení.

  • test_login_valid testuje platný pokus o přihlášení pomocí e-mailu a hesla
  • test_login_no_password testuje neplatný pokus o přihlášení bez zadání hesla
  • test_login_no_email testuje neplatný pokus o přihlášení bez předání e-mailu.
import pytest
import requests
import json
def test_login_valid(supply_url):
	url = supply_url + "/login/" 
	data = {'email':'test@test.com','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':'test@test.com'}
	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

Spusťte test pomocí py.test -v

Podívejte se na výsledek jako

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

Aktualizujte testy a vyzkoušejte různé výstupy

Shrnutí

V tomto tutoriálu PyTest jsme se zabývali

  • Nainstalujte pytest pomocí pip nainstalovat pytest=2.9.1
  • Jednoduchý program pytest a spusťte jej příkazem py.test.
  • Příkazy Assertion, Assert x==y, vrátí buď True nebo False.
  • Jak pytest identifikuje testovací soubory a metody.
  • Testovací soubory začínající na test_ nebo končící na _test
  • Testovací metody počínaje test
  • Příkaz py.test spustí všechny testovací soubory v této složce a podsložkách. Pro spuštění konkrétního souboru můžeme použít příkaz py.test
  • Spusťte podmnožinu testovacích metod
  • Seskupení názvů testů podle podřetězce matching.py.test -k -v spustí všechny testy, které mají ve svém názvu.
  • Spusťte test pomocí značek. Označte testy pomocí @pytest.mark. a spusťte testy pomocí pytest -m spustit testy označené jako .
  • Spusťte testy paralelně
  • Nainstalujte pytest-xdist pomocí pip install pytest-xdist
  • Spusťte testy pomocí py.test -n NUM, kde NUM je počet pracovníků
  • Vytvoření metod přípravku pro spuštění kódu před každým testem označením metody pomocí @pytest.fixture
  • Rozsah metody přípravku je v rámci souboru, který je definován.
  • K metodě upevnění lze přistupovat přes více testovacích souborů tak, že ji definujete v souboru conftest.py.
  • Testovací metoda může přistupovat k přípravku Pytest pomocí jeho použití jako vstupního argumentu.
  • Parametrizační testy pro spuštění proti více sadě vstupů.
    @pytest.mark.parametrize(“vstup1, vstup2, výstup”,[(5,5,10),(3,5,12)])
    def test_add(vstup1, vstup2, výstup):
    potvrdit vstup1+vstup2 == výstup “neúspěšné”
    spustí test se vstupy (5,5,10) a (3,5,12)
  • Skip/xfail testy pomocí @pytets.mark.skip a @pytest.mark.xfail
  • Vytvořte výsledky testu ve formátu XML, který pokrývá podrobnosti o provedeném testu pomocí py.test test_sample1.py -v –junitxml=”result.xml”
  • Ukázkový rámec pytest pro testování API

Shrňte tento příspěvek takto: