gpt4 book ai didi

python - pytest fixture 和测试都依赖于另一个 fixture

转载 作者:行者123 更新时间:2023-12-04 11:46:27 27 4
gpt4 key购买 nike

我有一对 fixture 用于测试具有 x-y 输入的函数。一个生成 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 缓存 fixture 结果并尝试以尽可能少的次数评估 fixture 的事实。对于这个简单的案例,这意味着该行为相当可靠。

问题是,我真的可以依赖这种行为吗?是否有我遗漏的情况,测试最终可能会被调用,例如, a, 3c ?

最佳答案

不,您的测试用例不可能用 a, 3c 调用.
您所有的灯具都有 "function"范围(默认)。这意味着对于每个依赖于它们的测试函数,所有这些都将被调用一次。如果 fixture 是两个或多个其他依赖项( fixture 或测试函数)的依赖项,则无论如何它都会调用一次并且该值将被重用。
这是pytest中的一段话可以很好地回答您的问题的文档:https://docs.pytest.org/en/6.2.x/fixture.html#fixtures-can-be-requested-more-than-once-per-test-return-values-are-cached

关于python - pytest fixture 和测试都依赖于另一个 fixture ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52337611/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com