我有两个简单的测试设置,我试图将它们分组到一个夹具中
并希望测试函数将“参数”传递给夹具。
这是一个人为的例子,来解释我的问题。
假设我有以下 pytest 夹具:
@pytest.fixture(scope="module", params=['param1','param2'])
def myFixture(request):
if request.param == 'param1':
p = 5
elif request.param == 'param2':
p = 10
return p
# would like to set request.param = ['param1'] for myFixture
def test_madeup(myFixture):
assert myFixture == 5
# would like to set request.param = ['param2'] for myFixture
def test_madeup2(myFixture):
assert myFixture == 10
我可以将上面的参数作为输入传递给test_madeup
功能?
所以,像下面这样:
@pytest.fixture(scope="module", params=fixtureParams)
def myFixture(request):
if request.param == 'param1':
return 5
elif request.param == 'param2':
return 10
def test_madeup(myFixture, ['param1']):
assert myFixture == 5
当然,上面的方法是行不通的。实际情况要复杂一些
但我只是想知道我是否可以通过params=['param1','param2']
到固定装置test_madeup
功能。
如果我正确理解你的问题,你基本上想通过提供一些测试信息来选择一个参数化夹具的实例来执行测试。尽管我们可以考虑一种机制,但这是不可能的。我不确定以下解决方案是否符合您的整个问题,但这是解决上述具体情况的一种方法:
import pytest
@pytest.fixture(scope="module")
def myFixture1():
return 5
@pytest.fixture(scope="module")
def myFixture2():
return 2
@pytest.fixture(scope="module", params=["param1", "param2"])
def myFixture(request):
if request.param == 'param1':
return request.getfuncargvalue("myFixture1")
elif request.param == 'param2':
return request.getfuncargvalue("myFixture2")
def test_1(myFixture1):
assert myFixture1 == 5
def test_2(myFixture2):
assert myFixture2 == 2
def test_all(myFixture):
assert myFixture in (2,5)
这运行了四个测试,因为test_all
对两个装置执行两次。
如果您的装置的设置并不繁重,您可能还拥有一个生成列表的装置和一个“迭代”参数化装置。然后,测试可以获取整个列表并将其索引到其中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)