gpt4 book ai didi

python - 如何参数化 Pytest fixture

转载 作者:IT老高 更新时间:2023-10-28 22:17:40 24 4
gpt4 key购买 nike

考虑以下 Pytest:

import pytest

class TimeLine(object):
instances = [0, 1, 2]

@pytest.fixture
def timeline():
return TimeLine()

def test_timeline(timeline):
for instance in timeline.instances:
assert instance % 2 == 0

if __name__ == "__main__":
pytest.main([__file__])

测试 test_timeline 使用 Pytest fixture timeline,它本身具有属性 instances。该属性在测试中被迭代,因此只有当断言对 timeline.instances 中的每个 instance 都成立时,测试才会通过。

然而,我实际上想做的是生成 3 个测试,其中 2 个应该通过,其中 1 个会失败。我试过了

@pytest.mark.parametrize("instance", timeline.instances)
def test_timeline(timeline):
assert instance % 2 == 0

但这会导致

AttributeError: 'function' object has no attribute 'instances'

据我了解,在 Pytest 固定装置中,函数“成为”它的返回值,但这似乎在测试参数化时还没有发生。如何以所需的方式设置测试?

最佳答案

这实际上可以通过 indirect parametrization .

这个例子用 pytest 3.1.2 做你想做的事:

import pytest

class TimeLine:
def __init__(self, instances):
self.instances = instances

@pytest.fixture
def timeline(request):
return TimeLine(request.param)

@pytest.mark.parametrize(
'timeline',
([1, 2, 3], [2, 4, 6], [6, 8, 10]),
indirect=True
)
def test_timeline(timeline):
for instance in timeline.instances:
assert instance % 2 == 0

if __name__ == "__main__":
pytest.main([__file__])

另见 this similar question .

关于python - 如何参数化 Pytest fixture ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42228895/

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