我有两个简单的测试设置,我试图将它们组合在一个夹具中,并希望测试功能将'params'传递给夹具.
这是一个人为的例子,用来解释我的问题.说我有以下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
Run Code Online (Sandbox Code Playgroud)
我可以这样做,以便上面的参数作为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
Run Code Online (Sandbox Code Playgroud)
当然,上述内容不起作用.真实情况有点复杂,但我只是想知道我是否可以params=['param1','param2']
从test_madeup函数传递到fixture .
hpk*_*k42 14
如果我正确理解你的问题,你基本上想要选择参数化夹具的一个实例来执行测试,通过提供测试的一些信息.尽管我们可能想到一种机制,但这是不可能的.我不确定以下解决方案是否映射到您的整个问题,但这是解决上述具体情况的一种方法:
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)
Run Code Online (Sandbox Code Playgroud)
这会运行四个测试,因为test_all两个灯具都会执行两次.
如果你的灯具设置不重,你可能还有一个灯具可以产生一个列表和一个"迭代"参数化的灯具.然后,测试可以获取整个列表并将其编入索引.
| 归档时间: |
|
| 查看次数: |
8321 次 |
| 最近记录: |