Mad*_*ist 5 python testing pytest
我有一对夹具用于测试带有 xy 输入的函数。一个生成 x 值,另一个生成 y 值。测试取决于两者。y 值也取决于 x 值。以下是设置摘要:
import pytest
@pytest.fixture(params=['a', 'b', 'c'])
def x_data(request):
return request.param
@pytest.fixture(params=['1', '2', '3'])
def y_data(request, x_data):
return request.param + x_data
def test_mathfunc(x_data, y_data):
print(f'\nTesting {x_data} vs {y_data}', end='')
Run Code Online (Sandbox Code Playgroud)
当我用 运行它时pytest -s,正好运行了 9 个测试,并且打印输出test_func显示x_data传递给测试的总是与用于生成的相同y_data(当然,这正是我想要的):
Testing a vs 1a.
Testing a vs 2a.
Testing a vs 3a.
Testing b vs 1b.
Testing b vs 2b.
Testing b vs 3b.
Testing c vs 1c.
Testing c vs 2c.
Testing c vs 3c.
Run Code Online (Sandbox Code Playgroud)
我知道 pytest 缓存夹具结果并尝试以尽可能少的次数评估夹具的事实。对于这个简单的案例,这意味着该行为相当可靠。
问题是,我真的可以依赖这种行为吗?是否存在我遗漏的情况,例如,测试最终可能会被调用a, 3c?
不,您的测试用例不可能用 来调用a, 3c。
您的所有灯具都有"function"范围(默认)。这意味着对于每个测试函数,所有这些都将被调用一次,具体取决于它们。如果固定装置是两个或多个其他依赖项(固定装置或测试函数)的依赖项,则无论如何它都会调用一次并且该值将被重用。
这是文档中的一段pytest很好地回答了您的问题: https: //docs.pytest.org/en/6.2.x/fixture.html#fixtures-can-be-requested-more-than-once-per-test-返回值被缓存