我有这种风格的测试模块:
#test_mammals.py:
PETS = ['cats', 'dogs']
def test_mammals_1(pet):
assert 0, pet
def test_mammals_2(pet):
assert 0, pet
还有一个:
#test_birds.py:
PETS = ['budgie', 'parrot']
def test_birds_1(pet):
assert 0, pet
def test_birds_2(pet):
assert 0, pet
我想只定义夹具“宠物”一次:
#conftest.py:
import pytest
@pytest.fixture(scope='module', autouse=True)
def getpets(request):
return getattr(request.module, 'PETS', [])
@pytest.fixture(scope='module', params=getpets, autouse=True)
def pet(request):
return request.param
不幸的是,这不起作用,因为“宠物”需要一个“params”列表。但是,如果我将“getpets”放入列表中,则ficture将返回指向“getpets”的指针,但不返回来自相应模块的“PETS”的值。
答案 0 :(得分:0)
这有点难以回答,因为您的代码并不是很有意义 - 如果您的“PETS'实际上只是一个字符串列表,你应该只使用pytest.mark.parametrize,而你实际上并不需要任何特殊的测试或任何装置。
然而,如果你有更复杂的事情发生,最简单的事情可能是在conftest中有一个通用的夹具,并且在每个测试模块中,定义一个轻量级的夹具,它具有你的模块的特定数据,利用你的通用pet
夹具以任何方式需要。