PyTest-opetusohjelma: Mikä on, kuinka asentaa, puitteet, väitteet

Mikä on PyTest?

PyTest on testauskehys, jonka avulla käyttäjät voivat kirjoittaa testikoodeja käyttämällä Python ohjelmointikieli. Sen avulla voit kirjoittaa yksinkertaisia ​​ja skaalautuvia testitapauksia tietokannoille, API:ille tai käyttöliittymälle. PyTestiä käytetään pääasiassa API-testien kirjoittamiseen. Se auttaa kirjoittamaan testejä yksinkertaisista yksikkötesteistä monimutkaisiin toiminnallisiin testeihin.

Miksi käyttää PyTestiä?

Jotkut pytestin eduista ovat

  • Erittäin helppo aloittaa sen yksinkertaisen ja helpon syntaksin ansiosta.
  • Testejä voi suorittaa rinnakkain.
  • Voi suorittaa tietyn testin tai testien osajoukon
  • Tunnista testit automaattisesti
  • Ohita testit
  • Avoin lähdekoodi

PyTestin asentaminen

Seuraavassa on prosessi PyTestin asentamiseksi:

Vaihe 1) Pytestin voi asentaa käyttämällä

pip install pytest==2.9.1

Kun asennus on valmis, voit vahvistaa sen painamalla

py.test -h

Tämä näyttää ohjeen

asenna PyTest

Ensimmäinen perus PyTest

Nyt opimme käyttämään Pytestiä PyTest-perusesimerkillä.

Luo kansio study_pytest. Luomme testitiedostomme tähän kansioon.

Siirry kyseiseen kansioon komentorivillä.

Luo kansioon tiedosto nimeltä test_sample1.py

Ensimmäinen perus PyTest

Lisää alla oleva koodi siihen ja tallenna

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" 

Suorita testi komennolla

py.test

Saat tulosteen muodossa

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

Ensimmäinen perus PyTest

Täällä test_sample1.py F.

F sanoo epäonnistumisen

Piste(.) sanoo menestystä.

Vika-osiossa näet epäonnistuneet menetelmät ja vikarivin. Tässä x==y tarkoittaa 5==6, mikä on epätosi.

Seuraavaksi tässä PyTest-opetusohjelmassa opimme väittämisestä PyTestissä.

Väitteet PyTestissä

Pytest-väitteet ovat tarkistuksia, jotka palauttavat joko True tai False tilan. sisään Python Pytest, jos väite epäonnistuu testimenetelmässä, menetelmän suoritus pysäytetään siellä. Kyseisen testimenetelmän jäljellä olevaa koodia ei suoriteta, ja Pytest-vahvistukset jatkuvat seuraavalla testimenetelmällä.

Pytest Assert esimerkkejä:

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.

Harkita

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

Aseta tämä koodi kohtaan test_file1_method1() väitteen sijaan

assert x == y,"test failed"

Testin suorittaminen antaa epäonnistumisen as AssertionError: testi epäonnistui x=5 y=6

Kuinka PyTest tunnistaa testitiedostot ja testimenetelmät

Oletusarvoisesti pytest tunnistaa vain tiedostonimet, jotka alkavat kirjaimella testata_ tai päättyen _testata kuin testitiedostot. Voimme kuitenkin mainita nimenomaisesti muita tiedostonimiä (selvitetty myöhemmin). Pytest vaatii aluksi testimenetelmien nimet "testata.” Kaikki muut menetelmän nimet ohitetaan, vaikka pyytäisimme nimenomaisesti suorittamaan kyseiset menetelmät.

Katso esimerkkejä kelvollisista ja virheellisistä pytest-tiedostojen nimistä

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

Huomautus: Kyllä, voimme nimenomaisesti pyytää pytestiä valitsemaan testlogin.py ja logintest.py

Katso esimerkkejä kelvollisista ja virheellisistä pytest-testimenetelmistä

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

Huomautus: Vaikka mainitsemme nimenomaisesti file1_method1() pytest ei suorita tätä menetelmää.

Suorita useita testejä tietystä tiedostosta ja useista tiedostoista

Tällä hetkellä kansiossa study_pytest on tiedosto test_sample1.py. Oletetaan, että meillä on useita tiedostoja, esimerkiksi test_sample2.py, test_sample3.py. Suorittaaksemme kaikki testit kaikista kansion ja alikansioiden tiedostoista meidän on vain suoritettava pytest-komento.

py.test

Tämä suorittaa kaikki tiedostonimet, jotka alkavat kirjaimella test_ ja tiedostonimet, jotka päättyvät _testiin kyseisessä kansiossa ja sen alikansioissa.

Jos haluat suorittaa testejä vain tietystä tiedostosta, voimme käyttää py.testiä

py.test test_sample1.py

Suorita koko testin osajoukko PyTestillä

Joskus emme halua suorittaa koko testipakettia. Pytestin avulla voimme suorittaa tiettyjä testejä. Voimme tehdä sen kahdella tavalla

  • Testien nimien ryhmittely osamerkkijonovastaavuuden perusteella
  • Testien ryhmittely merkkien mukaan

Meillä on jo test_sample1.py. Luo tiedosto test_sample2.py ja lisää siihen alla oleva koodi

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"

Meillä on siis tällä hetkellä

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

Vaihtoehto 1) Suorita testit osamerkkijonoa sovittamalla

Täällä meidän on suoritettava kaikki testit, joiden nimessä on metodi1

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

Joten py.test -k method1 -v suorittaminen antaa seuraavan tuloksen

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

Tästä näkee loppua kohden 2 testiä poistettu valinnalla '-kmethod1' jotka ovat testi_tiedosto1_menetelmä2 ja testitiedosto2_menetelmä2

Kokeile juosta eri yhdistelmillä, kuten: -

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'

Vaihtoehto 2) Suorita testit merkkien avulla

Pytestin avulla voimme asettaa erilaisia ​​attribuutteja testimenetelmille käyttämällä pytest-merkkejä, @pytest.mark . Jotta voimme käyttää merkkejä testitiedostossa, meidän on tuotava pytest testitiedostoihin.

Tässä käytämme erilaisia ​​merkkien nimiä testausmenetelmiin ja suoritamme erityisiä testejä markkerien nimien perusteella. Voimme määrittää kunkin testinimen markkerit käyttämällä

@pytest.mark.<name>.			

Määrittelemme testausmenetelmille markkereita set1 ja set2, ja suoritamme testin käyttämällä markkerien nimiä. Päivitä testitiedostot seuraavalla koodilla

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"

Voimme suorittaa merkityn testin mennessä

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

Suorita py.test -m set1. Tämä suorittaa menetelmät testi_tiedosto1_menetelmä1, testitiedosto2_menetelmä1, testitiedosto2_menetelmä2.

Py.test -m set2 suorittaminen suorittaa test_file1_method2.

Suorita testit rinnakkain Pytestin kanssa

Yleensä testipaketissa on useita testitiedostoja ja satoja testimenetelmiä, joiden suorittaminen vie paljon aikaa. Pytestin avulla voimme suorittaa testejä rinnakkain.

Tätä varten meidän on ensin asennettava pytest-xdist suorittamalla

pip install pytest-xdist

Suorita testit rinnakkain Pytestin kanssa

Voit suorittaa testejä nyt

py.test -n 4

-n suorittaa testit käyttämällä useita työntekijöitä. Yllä olevassa komennossa on 4 työntekijää suorittamaan testi.

Pytest Fixtures

Fixtureja käytetään, kun haluamme suorittaa jonkin koodin ennen jokaista testimenetelmää. Joten sen sijaan, että toistaisimme samaa koodia jokaisessa testissä, määrittelemme kiinnikkeet. Yleensä kiinnittimiä käytetään tietokantayhteyksien alustamiseen, tukikohdan läpikulkuun jne

Metodi merkitään Pytest-kiinnitykseksi merkitsemällä

@pytest.fixture

Testausmenetelmä voi käyttää Pytest-kiinnitystä mainitsemalla kiinnikkeen syöttöparametrina.

Luo uusi tiedosto test_basic_fixture.py seuraavalla koodilla

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"

Tässä

  • Meillä on valaisin nimeltä supply_AA_BB_CC. Tämä menetelmä palauttaa kolmen arvon luettelon.
  • Meillä on 3 testimenetelmää, joita verrataan kutakin arvoa vastaan.

Jokaisella testifunktiolla on syöttöargumentti, jonka nimi vastaa käytettävissä olevaa kiinnitystä. Pytest kutsuu sitten vastaavan kiinnitysmenetelmän ja palautetut arvot tallennetaan input-argumenttiin, tässä luetteloon [25,35,45]. Nyt listakohteita käytetään vertailun testausmenetelmissä.

Suorita nyt testi ja katso tulos

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

Testi test_comparewithBB on hyväksytty, koska zz=BB=35, ja loput 2 testiä epäonnistuvat.

Kiinnitysmenetelmällä on laajuus vain siinä määritetyssä testitiedostossa. Jos yritämme päästä kiinni johonkin muuhun testitiedostoon, saamme virheilmoituksen, jossa sanotaan kiinnitys 'supply_AA_BB_CC' ei löytynyt muiden tiedostojen testimenetelmiä varten.

Jos haluat käyttää samaa kiinnitystä useita testitiedostoja vastaan, luomme kiinnitysmenetelmät tiedostoon nimeltä conftest.py.

Katsotaan tämä alla olevan PyTest-esimerkin avulla. Luo 3 tiedostoa conftest.py, test_basic_fixture.py, test_basic_fixture2.py seuraavalla koodilla

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 etsii kiinnittimen ensin testitiedostosta ja jos sitä ei löydy, se etsii conftest.py

Suorita testi komennolla py.test -k test_comparewith -v saadaksesi alla olevan tuloksen

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

Pytestin parametroitu testi

Testin parametroinnin tarkoitus on suorittaa testi useiden argumenttijoukkojen suhteen. Voimme tehdä tämän @pytest.mark.parametrize.

Näemme tämän alla olevan PyTest-esimerkin avulla. Tässä välitämme 3 argumenttia testimenetelmälle. Tämä testimenetelmä lisää kaksi ensimmäistä argumenttia ja vertaa sitä kolmanteen argumenttiin.

Luo testitiedosto test_addition.py alla olevalla koodilla

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"

Tässä testimenetelmä hyväksyy 3 argumenttia - input1, input2, output. Se lisää tulo1:n ja input2:n ja vertaa lähtöön.

Suoritetaan testi komennolla py.test -k test_add -v ja katsotaan tulos

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

Voit nähdä testejä ajettuina 2 kertaa – yksi tarkistus 5+5 ==10 ja toinen tarkistus 3+5 ==12

test_addition.py::test_add[5-5-10] HYVÄKSYTTY

test_addition.py::test_add[3-5-12] Epäonnistunut

Pytest Xfail / Ohita testit

Joissakin tilanteissa emme halua suorittaa testiä tai a testitapaus ei ole relevanttia tietylle ajalle. Näissä tilanteissa meillä on mahdollisuus X hylätä testi tai ohittaa testit

Xfailed-testi suoritetaan, mutta sitä ei lasketa osaksi epäonnistuneiksi tai läpäisiksi testeiksi. Jäljitystä ei näytetä, jos testi epäonnistuu. Voimme hylätä testejä käyttämällä

@pytest.mark.xfail.

Testin ohittaminen tarkoittaa, että testiä ei suoriteta. Voimme ohittaa testit käyttämällä

@pytest.mark.skip.

Muokkaa test_addition.py-tiedostoa alla olevalla koodilla

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"

Tässä

  • test_add_1 ja test_add_2 ohitetaan, eikä niitä suoriteta.
  • testi_lisää_3 ja testi_lisäys_4 ovat epäonnistuneita. Nämä testit suoritetaan ja ne ovat osa xfailed (jos testi epäonnistuu) tai xpassed (on test pass) -testejä. Epäonnistumisista ei tule jälkiä.
  • test_add_5 ja test_add_6 suoritetaan ja test_add_6 raportoi epäonnistumisesta jäljittämisellä, kun test_add_5 menee läpi.

Suorita testi komennolla py.test test_addition.py -v ja katso tulos

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

Tulokset XML

Voimme luoda testituloksia XML-muodossa, jotka voimme syöttää Continuous Integration -palvelimille jatkokäsittelyä varten ja niin edelleen. Tämän voi tehdä

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

result.xml tallentaa testin suoritustuloksen. Etsi tulos.xml esimerkki alta

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

From voimme nähdä yhteensä kaksi testiä, joista yksi on epäonnistunut. Alla näet kunkin suoritetun testin tiedot tag.

Pytest Framework API:n testaus

Nyt luomme pienen pytest-kehyksen API:n testaamiseksi. Tässä käytetty API on ilmainen https://reqres.in/. Tämä sivusto on tarkoitettu vain testattavan API:n tarjoamiseen. Tämä sivusto ei tallenna tietojamme.

Kirjoitamme tähän joitain testejä varten

  • luetellaan joitain käyttäjiä
  • kirjaudu sisään käyttäjien kanssa

Luo alla olevat tiedostot annetulla koodilla

conftest.py – sinulla on laite, joka toimittaa perus-URL-osoitteen kaikille testimenetelmille

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

test_list_user.py – sisältää testimenetelmät kelvollisten ja virheellisten käyttäjien luetteloimiseksi

  • test_list_valid_user testaa kelvollisen käyttäjän haun ja tarkistaa vastauksen
  • test_list_invaliduser testaa virheellisen käyttäjän haun ja tarkistaa vastauksen
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 – sisältää testimenetelmiä kirjautumistoimintojen testaamiseen.

  • test_login_valid testaa kelvollisen kirjautumisyrityksen sähköpostiosoitteella ja salasanalla
  • test_login_no_password testaa virheellisen kirjautumisyrityksen ilman salasanan välittämistä
  • test_login_no_email testaa virheellisen kirjautumisyrityksen ilman sähköpostin välittämistä.
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

Suorita testi komennolla py.test -v

Katso tulos muodossa

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

Päivitä testit ja kokeile erilaisia ​​lähtöjä

Yhteenveto

Tässä PyTest-opetusohjelmassa käsitimme

  • Asenna pytest käyttämällä pip asennus pytest=2.9.1
  • Yksinkertainen pytest-ohjelma ja suorita se py.test-komennolla.
  • Väitelauseet, assert x==y, palauttavat joko tosi tai epätosi.
  • Miten pytest tunnistaa testitiedostot ja -menetelmät.
  • Testaa tiedostoja alkaen testata_ tai päättyen _testata
  • Testausmenetelmät alkaen testi
  • py.test-komento suorittaa kaikki testitiedostot kyseisessä kansiossa ja alikansioissa. Tietyn tiedoston suorittamiseksi voimme käyttää komentoa py.test
  • Suorita testimenetelmien osajoukko
  • Testin nimien ryhmittely alimerkkijonon perusteella matching.py.test -k -v suorittaa kaikki testit sen nimessä.
  • Suorita testi merkkien avulla. Merkitse testit käyttämällä @pytest.mark. ja suorita testit komennolla pytest -m suorittaa testejä, jotka on merkitty .
  • Suorita testit rinnakkain
  • Asenna pytest-xdist komennolla pip install pytest-xdist
  • Suorita testit komennolla py.test -n NUM, jossa NUM on työntekijöiden lukumäärä
  • Kiinnitysmenetelmien luominen koodin suorittamiseksi ennen jokaista testiä merkitsemällä menetelmä @pytest.fixture
  • Kiinnitysmenetelmän laajuus on määritetyn tiedoston sisällä.
  • Kiinnitysmenetelmää voidaan käyttää useissa testitiedostoissa määrittämällä se conftest.py-tiedostossa.
  • Testausmenetelmä voi käyttää Pytest-kiinnitystä käyttämällä sitä syöttöargumenttina.
  • Parametriset testit sen suorittamiseksi useita syötteitä vastaan.
    @pytest.mark.parametrize("tulo1, input2, output",[(5,5,10),(3,5,12)])
    def test_add(tulo1, tulo2, lähtö):
    assert input1+input2 == output "epäonnistui"
    suorittaa testin syötteillä (5,5,10) ja (3,5,12)
  • Ohita/xfail-testit käyttämällä @pytets.mark.skip ja @pytest.mark.xfail
  • Luo testituloksia XML-muodossa, joka kattaa suoritetun testin tiedot käyttämällä py.test test_sample1.py -v –junitxml=”result.xml”
  • Esimerkki pytest-kehyksestä API:n testaamiseen