Учебники

Pytest — Светильники

Светильники — это функции, которые запускаются перед каждой тестовой функцией, к которой она применяется. Светильники используются для подачи некоторых данных в тесты, таких как соединения с базой данных, 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 объясняется в следующей главе.