Samouczek PyTest: co to jest, jak zainstalować, framework, asercje

Co to jest PyTest?

PyTest to framework testowy, który pozwala użytkownikom pisać kody testowe przy użyciu Python język programowania. Pomaga pisać proste i skalowalne przypadki testowe dla baz danych, API lub UI. PyTest jest głównie używany do pisania testów dla API. Pomaga pisać testy od prostych testów jednostkowych do złożonych testów funkcjonalnych.

Dlaczego warto używać PyTest?

Oto niektóre zalety pytestu

  • Bardzo łatwy na początek ze względu na prostą i łatwą składnię.
  • Można uruchamiać testy równolegle.
  • Może uruchomić określony test lub podzbiór testów
  • Automatycznie wykrywaj testy
  • Pomiń testy
  • Otwarte źródło

Jak zainstalować PyTest

Poniżej przedstawiono proces instalacji PyTest:

Krok 1) Możesz zainstalować pytest przez

pip install pytest==2.9.1

Po zakończeniu instalacji możesz to potwierdzić za pomocą

py.test -h

Spowoduje to wyświetlenie pomocy

zainstaluj PyTest

Pierwszy podstawowy test Py

Teraz nauczymy się używać Pytest na podstawowym przykładzie PyTest.

Utwórz folder study_pytest. W tym folderze utworzymy nasze pliki testowe.

Przejdź do tego folderu w wierszu poleceń.

Utwórz plik o nazwie test_sample1.py w folderze

Pierwszy podstawowy test Py

Dodaj do niego poniższy kod i zapisz

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" 

Uruchom test za pomocą polecenia

py.test

Otrzymasz dane wyjściowe 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

Pierwszy podstawowy test Py

Tutaj w test_sample1.py F.

F mówi porażkę

Kropka(.) oznacza sukces.

W sekcji niepowodzeń możesz zobaczyć metody zakończone niepowodzeniem oraz linię niepowodzenia. Tutaj x==y oznacza 5==6, co jest fałszywe.

W dalszej części tego samouczka PyTest dowiemy się o asercji w PyTest.

Asercje w PyTest

Asercje Pytest to kontrole, które zwracają status Prawda lub Fałsz. W Python Pytest, jeśli asercja w metodzie testowej nie powiedzie się, wówczas wykonanie tej metody zostanie tam zatrzymane. Pozostały kod w tej metodzie testowej nie jest wykonywany, a asercje Pytest będą kontynuowane w następnej metodzie testowej.

Przykłady 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.

Rozważać

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

Umieść ten kod w test_file1_method1() zamiast asercji

assert x == y,"test failed"

Uruchomienie testu spowoduje niepowodzenie jako AssertionError: test nie powiódł się x=5 y=6

Jak PyTest identyfikuje pliki testowe i metody testowe

Domyślnie pytest identyfikuje tylko nazwy plików zaczynające się od test_ lub kończąc na _test jako pliki testowe. Możemy jednak wyraźnie wspomnieć o innych nazwach plików (wyjaśnione później). Pytest wymaga, aby nazwy metod testowych zaczynały się od "test.” Wszystkie inne nazwy metod zostaną zignorowane, nawet jeśli jawnie poprosimy o uruchomienie tych metod.

Zobacz kilka przykładów prawidłowych i nieprawidłowych nazw plików pytest

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

Uwaga: tak, możemy jawnie poprosić pytest o wybranie testlogin.py i logintest.py

Zobacz kilka przykładów prawidłowych i nieprawidłowych metod testowych pytest

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

Uwaga: nawet jeśli wyraźnie wspomnimy o file1_method1() pytest nie uruchomi tej metody.

Uruchom wiele testów z określonego pliku i wielu plików

Obecnie w folderze study_pytest mamy plik test_sample1.py. Załóżmy, że mamy wiele plików, powiedzmy test_sample2.py, test_sample3.py. Aby uruchomić wszystkie testy ze wszystkich plików w folderze i podfolderach, wystarczy uruchomić komendę pytest.

py.test

Spowoduje to uruchomienie wszystkich nazw plików zaczynających się od test_ i kończących się na _test w tym folderze i podfolderach w tym folderze.

Aby uruchomić testy tylko z określonego pliku, możemy użyć py.test

py.test test_sample1.py

Uruchom podzbiór całego testu za pomocą PyTest

Czasami nie chcemy uruchamiać całego zestawu testów. Pytest pozwala nam uruchamiać określone testy. Możemy to zrobić na 2 sposoby

  • Grupowanie nazw testów według dopasowania podłańcucha
  • Grupowanie testów według markerów

Mamy już test_sample1.py. Utwórz plik test_sample2.py i dodaj do niego poniższy kod

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 mamy obecnie

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

Opcja 1) Uruchom testy, dopasowując podciąg

Tutaj, aby uruchomić wszystkie testy mające w nazwie metodę 1, musimy uruchomić

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

Tak więc uruchomienie py.test -k method1 -v da Ci następujący wynik

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

Tutaj widać koniec 2 testy odznaczono za pomocą „-kmethod1” którymi są plik_testowy1_method2 i plik_testowy2_method2

Spróbuj biegać z różnymi kombinacjami, takimi jak: -

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'

Opcja 2) Uruchom testy według markerów

Pytest pozwala nam ustawić różne atrybuty metod testowych za pomocą znaczników pytest, @pytest.mark . Aby użyć znaczników w pliku testowym, musimy zaimportować pytest do plików testowych.

Tutaj zastosujemy różne nazwy markerów do metod testowych i przeprowadzimy określone testy w oparciu o nazwy markerów. Możemy zdefiniować znaczniki na nazwach poszczególnych testów za pomocą

@pytest.mark.<name>.			

Definiujemy znaczniki set1 i set2 w metodach testowych i uruchomimy test, używając nazw znaczników. Zaktualizuj pliki testowe za pomocą następującego kodu

test_przykład1.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_przykład2.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"

Możemy przeprowadzić oznaczony test wg

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

Uruchom py.test -m set1. Spowoduje to uruchomienie metod plik_testowy1_method1, plik_testowy2_method1, plik_testowy2_method2.

Uruchomienie py.test -m set2 spowoduje uruchomienie pliku testowego1_method2.

Uruchamiaj testy równolegle z Pytestem

Zwykle zestaw testów będzie zawierał wiele plików testowych i setki metod testowych, których wykonanie zajmie dużo czasu. Pytest pozwala nam na równoległe uruchamianie testów.

W tym celu musimy najpierw zainstalować pytest-xdist, uruchamiając

pip install pytest-xdist

Uruchamiaj testy równolegle z Pytestem

Możesz teraz przeprowadzić testy

py.test -n 4

-N uruchamia testy przy użyciu wielu procesów roboczych. W powyższym poleceniu test będzie wykonywany przez 4 pracowników.

Urządzenia Pytesta

Urządzenia są używane, gdy chcemy uruchomić jakiś kod przed każdą metodą testową. Zamiast więc powtarzać ten sam kod w każdym teście, definiujemy urządzenia. Zwykle urządzenia służą do inicjowania połączeń z bazą danych, przekazywania bazy itp

Metoda jest oznaczana jako urządzenie Pytest poprzez oznaczenie

@pytest.fixture

Metoda testowa może wykorzystywać urządzenie Pytest, podając urządzenie jako parametr wejściowy.

Utwórz nowy plik test_basic_fixture.py z następującym kodem

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"

Tutaj

  • Mamy urządzenie o nazwie Supply_AA_BB_CC. Ta metoda zwróci listę 3 wartości.
  • Mamy 3 metody testowania porównujące każdą z wartości.

Każda funkcja testowa posiada argument wejściowy, którego nazwa pasuje do dostępnego urządzenia. Następnie Pytest wywołuje odpowiednią metodę mocowania, a zwrócone wartości zostaną zapisane w argumencie wejściowym, tutaj jest to lista [25,35,45]. Teraz elementy listy są używane w metodach testowych do porównania.

Teraz uruchom test i zobacz wynik

 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 został zaliczony, ponieważ zz=BB=35, a pozostałe 2 testy zakończyły się niepowodzeniem.

Metoda mocowania ma zasięg tylko w obrębie tego pliku testowego, w którym jest zdefiniowana. Jeśli spróbujemy uzyskać dostęp do urządzenia w innym pliku testowym, pojawi się błąd mówiący, że urządzenie Nie znaleziono „supply_AA_BB_CC”. dla metod testowych w innych plikach.

Aby użyć tego samego urządzenia w wielu plikach testowych, utworzymy metody urządzeń w pliku o nazwie conftest.py.

Zobaczmy to na poniższym przykładzie PyTest. Utwórz 3 pliki conftest.py, test_basic_fixture.py, test_basic_fixture2.py z następującym kodem

konkurs.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 będzie najpierw szukał urządzenia w pliku testowym, a jeśli nie zostanie znaleziony, będzie szukać w pliku conftest.py

Uruchom test za pomocą py.test -k test_comparewith -v, aby uzyskać wynik jak poniżej

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

Test parametryczny Pytest

Celem parametryzacji testu jest uruchomienie testu na wielu zestawach argumentów. Możemy to zrobić za pomocą @pytest.mark.parametrize.

Zobaczymy to na poniższym przykładzie PyTest. Tutaj przekażemy 3 argumenty do metody testowej. Ta metoda testowa doda pierwsze 2 argumenty i porówna je z trzecim argumentem.

Utwórz plik testowy test_addition.py z poniższym kodem

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"

Tutaj metoda testowa akceptuje 3 argumenty: input1, input2, output. Dodaje input1 i input2 i porównuje z outputem.

Uruchommy test za pomocą py.test -k test_add -v i zobacz wynik

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

Możesz zobaczyć, że testy przeprowadzono 2 razy – jeden sprawdzający 5+5 ==10 i drugi sprawdzający 3+5 ==12

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

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

Pytest Xfail / Pomiń testy

Będą pewne sytuacje, w których nie będziemy chcieli wykonać testu, lub a walizka testowa nie dotyczy konkretnego czasu. W takich sytuacjach mamy możliwość Xnie zdania testu lub pominięcia testów

Test xfailed zostanie wykonany, ale nie będzie liczony jako część testów nieudanych lub zaliczonych. Nie zostanie wyświetlony żaden ślad, jeśli ten test się nie powiedzie. Możemy xfail testy za pomocą

@pytest.mark.xfail.

Pominięcie testu oznacza, że ​​test nie zostanie wykonany. Możemy pominąć testy używając

@pytest.mark.skip.

Edytuj plik test_addition.py za pomocą poniższego kodu

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"

Tutaj

  • test_add_1 i test_add_2 są pomijane i nie zostaną wykonane.
  • test_add_3 i test_add_4 kończą się niepowodzeniem. Testy te zostaną wykonane i będą częścią testów xfailed (w przypadku niepowodzenia testu) lub xpassed (w przypadku pomyślnego przejścia testu). Nie będzie żadnego śladu po niepowodzeniach.
  • testy_add_5 i test_add_6 zostaną wykonane, a test_add_6 zgłosi błąd ze śledzeniem, dopóki test_add_5 zakończy się pomyślnie

Wykonaj test za pomocą py.test test_addition.py -v i zobacz wynik

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

Wyniki XML

Możemy tworzyć wyniki testów w formacie XML, które możemy przesłać do serwerów Continuous Integration w celu dalszego przetwarzania i tak dalej. Można to zrobić poprzez

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

Plik Result.xml zarejestruje wynik wykonania testu. Znajdź przykładowy plik Result.xml poniżej

<?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 możemy zobaczyć łącznie dwa testy, z których jeden jest nieudany. Poniżej możesz zobaczyć szczegóły dotyczące każdego wykonanego testu pod etykietka.

Framework Pytest Testowanie API

Teraz utworzymy mały framework pytest do testowania API. Używany tutaj interfejs API jest bezpłatny https://reqres.in/. Celem tej witryny jest wyłącznie udostępnianie testowalnego interfejsu API. Ta strona nie przechowuje naszych danych.

Tutaj napiszemy kilka testów dla

  • listę niektórych użytkowników
  • zaloguj się z użytkownikami

Utwórz poniższe pliki z podanym kodem

conftest.py – posiada urządzenie, które dostarczy podstawowy adres URL dla wszystkich metod testowych

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

test_list_user.py – zawiera metody testowe umożliwiające wylistowanie prawidłowych i nieprawidłowych użytkowników

  • test_list_valid_user sprawdza poprawność pobrania użytkownika i weryfikuje odpowiedź
  • test_list_invaliduser sprawdza nieprawidłowe pobranie użytkownika i weryfikuje odpowiedź
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 – zawiera metody testowe umożliwiające testowanie funkcjonalności logowania.

  • test_login_valid sprawdza poprawność próby logowania za pomocą adresu e-mail i hasła
  • test_login_no_password testuje nieprawidłową próbę logowania bez podawania hasła
  • test_login_no_email sprawdza nieudaną próbę logowania bez przekazywania adresu e-mail.
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

Uruchom test za pomocą py.test -v

Zobacz wynik 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

Zaktualizuj testy i wypróbuj różne wyniki

Podsumowanie

W tym samouczku PyTest omówiliśmy

  • Zainstaluj pytest za pomocą instalacja pipsa pytest=2.9.1
  • Prosty program pytest i uruchom go za pomocą polecenia py.test.
  • Instrukcje asercyjne,twierdzenie x==y, zwrócą wartość Prawda lub Fałsz.
  • Jak pytest identyfikuje pliki i metody testowe.
  • Testuj pliki zaczynające się od test_ lub kończąc na _test
  • Metody testowe zaczynające się od test
  • Polecenie py.test uruchomi wszystkie pliki testowe w tym folderze i podfolderach. Aby uruchomić konkretny plik, możemy użyć polecenia py.test
  • Uruchom podzbiór metod testowych
  • Grupowanie nazw testów według podciągu match.py.test -k -v uruchomi wszystkie testy posiadające w jego imieniu.
  • Uruchom test za pomocą znaczników. Oznacz testy za pomocą @pytest.mark. i uruchom testy, używając pytest -m do uruchomienia testów oznaczonych jako .
  • Uruchom testy równolegle
  • Zainstaluj pytest-xdist za pomocą pip install pytest-xdist
  • Uruchom testy, używając py.test -n NUM, gdzie NUM to liczba procesów roboczych
  • Tworzenie metod urządzeń do uruchamiania kodu przed każdym testem poprzez oznaczenie metody @pytest.fixture
  • Zakres metody mocowania mieści się w pliku, w którym jest zdefiniowany.
  • Dostęp do metody mocowania można uzyskać w wielu plikach testowych, definiując ją w pliku conftest.py.
  • Metoda testowa może uzyskać dostęp do urządzenia Pytest, używając go jako argumentu wejściowego.
  • Testowanie parametrów w celu uruchomienia go na wielu zestawach danych wejściowych.
    @pytest.mark.parametrize(“wejście1, wejście2, wyjście”,[(5,5,10),(3,5,12)])
    def test_add(wejście1, wejście2, wyjście):
    potwierdzić wejście 1 + wejście 2 == wyjście, „nie powiodło się”
    uruchomi test z danymi wejściowymi (5,5,10) i (3,5,12)
  • Testy pomijania/xfail przy użyciu @pytets.mark.skip i @pytest.mark.xfail
  • Utwórz wyniki testów w formacie XML, który obejmuje szczegóły wykonanych testów, używając py.test test_sample1.py -v –junitxml=”result.xml”
  • Przykładowa platforma pytest do testowania interfejsu API

Podsumuj ten post następująco: