Светильники — это функции, которые запускаются перед каждой тестовой функцией, к которой она применяется. Светильники используются для подачи некоторых данных в тесты, таких как соединения с базой данных, URL-адреса для тестирования и некоторые виды входных данных. Поэтому вместо того, чтобы запускать один и тот же код для каждого теста, мы можем прикрепить к тестам функцию фикстуры, и она будет запускаться и возвращать данные в тест перед выполнением каждого теста.
Функция помечена как прибор с помощью —
@pytest.fixture
Тестовая функция может использовать прибор, указав имя прибора в качестве входного параметра.
Создайте файл test_div_by_3_6.py и добавьте в него приведенный ниже код
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
Здесь у нас есть функция фикстуры с именем input_value , которая предоставляет входные данные для тестов. Чтобы получить доступ к функции прибора, тесты должны упомянуть имя прибора в качестве входного параметра.
Pytest, пока выполняется тест, увидит имя прибора в качестве входного параметра. Затем он выполняет функцию фиксации, и возвращаемое значение сохраняется во входном параметре, который может использоваться тестом.
Выполните тест, используя следующую команду —
pytest -k divisible -v
Приведенная выше команда сгенерирует следующий результат —
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 ==========================
Однако этот подход имеет свои ограничения. Функция фикстуры, определенная в файле atest, имеет область действия только в тестовом файле. Мы не можем использовать этот прибор в другом тестовом файле. Чтобы сделать фикстуру доступной для нескольких тестовых файлов, мы должны определить функцию фикстуры в файле с именем conftest.py. conftest.py объясняется в следующей главе.