使用从数据库加载的fixture来参数化pytest

时间:2018-04-17 18:16:47

标签: python django testing pytest parameterized-tests

我尝试使用pytest来获取要运行的套件的id,从db加载套件,然后以参数化方式生成测试用例。下面的代码显示了我想要做的事情的要点,但显示了refe color 35 36 37 38 39 40 wareh 的错误。

如何使用从db查找返回的ID来fixture 'case' not found参数化?

case

1 个答案:

答案 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
相关问题