繁体   English   中英

pytest 夹具和测试都依赖于另一个夹具

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM