[英]pytest fixture and test both dependent on another fixture
我有一对夹具用于测试带有 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='')
当我使用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.
我知道 pytest 缓存夹具结果并尝试以尽可能少的次数评估夹具的事实。 对于这个简单的案例,这意味着该行为相当可靠。
问题是,我真的可以依赖这种行为吗? 是否存在我遗漏的情况,测试最终可能会被调用,例如a, 3c
?
不,您的测试用例不可能用a, 3c
调用。
你所有的装置都有"function"
范围(默认)。 这意味着对于每个依赖于它们的测试函数,所有这些都将被调用一次。 如果夹具是两个或多个其他依赖项(夹具或测试函数)的依赖项,则无论如何它都会调用一次并且该值将被重用。
这是pytest
文档中的一段可以很好地回答您的问题: https : pytest
-return-values-are-cached
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.