我正在使用 pytest 进行我正在做的这个测试。
我想多次进行相同的测试,同时更改种子输入。这使测试变量随机化,我认为这是个好主意。这样,如果测试失败,我可以使用相同的种子输入在不同的环境中轻松地重新创建相同的测试以查看失败的原因:
def test_foo():
for i in range(0, 10):
foo = random_foo('something', seed = i)
assert subject_value(foo) == expected_value(foo)
但是,如果测试失败,Pytest 不会告诉我发生 AssertionError 时 i
的值,这使得调试几乎不可能。有什么办法可以成功做到这一点?还是这种糟糕的测试代码结构,在这种情况下,还有更好的方法吗?
最佳答案
该测试代码结构称为子测试。在您的情况下,循环的每次迭代都应该是一个新的子测试。
您可能正在寻找 subtests plugin .
import subtests
def test_foo():
for i in range(10):
with subtests.test(msg="seed", i=i): # Add what you need to see here.
foo = random_foo('something', seed=i)
assert subject_value(foo) == expected_value(foo)
注意标准库unittest.TestCase
类already has支持使用 with self.subTest()
进行子测试(自 Python 3.4 起)。 Pytest 也可以运行这些标准测试用例。
此外,如果您对随机测试输入特别感兴趣,您可能会对 Hypothesis 感兴趣.
关于python - 循环测试函数时如何让Pytest识别迭代次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58148428/