我尝试使用pytest来获取要运行的套件的id,从db加载套件,然后以参数化方式生成测试用例。下面的代码显示了我想要做的事情的要点,但显示了refe color 35 36 37 38 39 40 wareh
的错误。
如何使用从db查找返回的ID来fixture 'case' not found
参数化?
case
答案 0 :(得分:1)
fixture 'case' not found
表示参数化没有发生:行
metafunc.parametrize(
"case",
[item.id for item in test_cases]
)
未执行。这并不奇怪,因为您不能使用suite
中的固定test_case
,因此if 'suite' in metafunc.fixturenames
将返回False
。如果您实际使用test_case
中的灯具,例如:
@pytest.fixture
def suite():
pass
@pytest.mark.usefixtures('suite')
def test_case(case):
print(case)
assert False
测试将正确参数化。顺便说一下,我的例子中的suite
夹具作为标记工作,应该更好地重写为一个:
def pytest_generate_tests(metafunc):
try:
suite_id = getattr(metafunc.function, 'suite')
except AttributeError: # no suite marker
pass
else:
this_suite = SuiteModel.objects.get(id=suite_id)
test_cases = this_suite.testCases.all()
metafunc.parametrize(
"case",
[item.id for item in test_cases]
)
现在只需标记相关测试:
@pytest.mark.suite(1)
def test_case(case):
assert case == 1