Pytest - Terminarz
Urządzenia to funkcje, które będą uruchamiane przed każdą funkcją testową, do której są stosowane. Urządzenia są używane do dostarczania pewnych danych do testów, takich jak połączenia z bazami danych, adresy URL do testowania i pewne dane wejściowe. Dlatego zamiast uruchamiać ten sam kod dla każdego testu, możemy dołączyć do testów funkcję fixture, która uruchomi się i zwróci dane do testu przed wykonaniem każdego testu.
Funkcja jest oznaczona jako urządzenie przez -
@pytest.fixture
Funkcja testowa może używać urządzenia, podając nazwę urządzenia jako parametr wejściowy.
Utwórz plik test_div_by_3_6.py i dodaj do niego poniższy kod
import pytest
@pytest.fixture
def input_value():
input = 39
return input
def test_divisible_by_3(input_value):
assert input_value % 3 == 0
def test_divisible_by_6(input_value):
assert input_value % 6 == 0
Tutaj mamy nazwaną funkcję urządzenia input_value, który dostarcza dane wejściowe do testów. Aby uzyskać dostęp do funkcji urządzenia, testy muszą podać nazwę urządzenia jako parametr wejściowy.
Pytest podczas wykonywania testu zobaczy nazwę urządzenia jako parametr wejściowy. Następnie wykonuje funkcję urządzenia, a zwrócona wartość jest przechowywana w parametrze wejściowym, który może być użyty w teście.
Wykonaj test za pomocą następującego polecenia -
pytest -k divisible -v
Powyższe polecenie wygeneruje następujący wynik -
test_div_by_3_6.py::test_divisible_by_3 PASSED
test_div_by_3_6.py::test_divisible_by_6 FAILED
============================================== FAILURES
==============================================
________________________________________ test_divisible_by_6
_________________________________________
input_value = 39
def test_divisible_by_6(input_value):
> assert input_value % 6 == 0
E assert (39 % 6) == 0
test_div_by_3_6.py:12: AssertionError
========================== 1 failed, 1 passed, 6 deselected in 0.07 seconds
==========================
Jednak podejście to ma swoje własne ograniczenia. Funkcja fixture zdefiniowana w pliku testowym ma zasięg tylko w pliku testowym. Nie możemy użyć tego urządzenia w innym pliku testowym. Aby urządzenie było dostępne dla wielu plików testowych, musimy zdefiniować funkcję fixture w pliku o nazwie conftest.py.conftest.py jest wyjaśnione w następnym rozdziale.