在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 :(得分:2)
如果您想为一个或多个测试设置详细信息,则可以使用“普通” 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
要记住的事情是,收益率之前的所有操作都在测试之前进行,而收益率之后的所有操作都在测试之后进行。
tests/unit/test_test.py::test_stuff
setting up
FAILED
tearing down
答案 1 :(得分:1)
答案
您的问题似乎可以归结为:pytest documentation中所述的setup_function
和teardown_function
的目的/好处是什么?
使用这些函数的好处是您不必调用它们; setup_function
和teardown_function
都将分别(分别)在每个测试之前和之后自动运行。
就必须传递函数指针而言,在pytest> = 3.0中不需要。来自documentation:
从pytest-3.0开始,function参数是可选的。
因此,您无需将函数指针传递给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
。这些功能的好处是能够指定在运行所有测试之前和之后发生的事情。