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

Другие вопросы по тегам