Функции установки и удаления Pytest - так же, как и функции, написанные самим собой?
В следующем примере из документации Pytest:
Функция setup_function
предполагается установить некоторые данные для какой-то другой функции, скажем, test_data
, Так что, если я напишу функцию test_data
мне придется призвать setup_function
как это:
def test_data():
setup_function(....)
<Test logic here>
teardown_function(....)
Таким образом, единственная разница заключается в названии соглашения?
Я не понимаю, как именно это помогает мне создавать данные настройки. Я мог бы написать такой же код, как это:
def test_data():
my_own_setup_function(....)
<Test logic here>
my_own_teardown_function(....)
Поскольку нет возможности сказать pytest, чтобы он автоматически связывал функцию настройки с тестовой функцией, он создает данные настройки для - параметра function
функции setup_function
мне действительно не поможет, если мне не нужен указатель на функцию.... так зачем создавать соглашения об именах без причины?
Из того, что я понимаю, параметр настройки функции function
только помогает мне, если мне нужно использовать указатель на функцию - то, что мне редко нужно.
0 ответов
Если вы хотите настроить особенности теста или тестов, вы можете использовать "нормальный" инструмент pytext.
import pytest
@pytest.fixture
def setup_and_teardown_for_stuff():
print("\nsetting up")
yield
print("\ntearing down")
def test_stuff(setup_and_teardown_for_stuff):
assert 1 == 2
Следует помнить, что все до yield запускается перед тестом, а все после yield запускается после теста.
tests/unit/test_test.py::test_stuff
setting up
FAILED
tearing down
Ответ
Похоже, что ваш вопрос сводится к: какова цель / выгода setup_function
а также teardown_function
как описано в документации по pytest?
Преимущество использования этих функций заключается в том, что вам не нужно вызывать их; и то и другое setup_function
а также teardown_function
будет автоматически запускаться до и после (соответственно) каждого теста.
К вашей точке зрения о необходимости передавать указатель на функцию, это не требуется в pytest>=3.0. Из документации:
Начиная с pytest-3.0, параметр функции является необязательным.
Таким образом, вам не нужно передавать указатель на функцию setup_function
а также teardown_function
функции; Вы можете просто добавить их в тестовый файл, как описано в примере ниже, и они будут выполнены.
пример
Например, если у вас есть test_setup_teardown.py
файл, который выглядит как:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def setup_function():
print('setting up')
def test_1():
print('test 1')
assert 1 == 2
def teardown_function():
print('tearing down')
и вы запускаете этот файл с помощью pytest (что-то вроде pytest test_setup_teardown.py
), pytest выведет:
---- Captured stdout setup ----
setting up
---- Captured stdout call ----
test 1
---- Captured stdout teardown ----
tearing down
Другими словами, pytest автоматически вызывает setup_function
, затем запускает тест (который не удается), а затем запускает teardown_function
, Преимущество этих функций заключается в возможности указать, что происходит до и после запуска всех тестов.