具有可变数值的灯具取决于输入

时间:2017-06-13 10:22:13

标签: python pytest

我想设置py.test,使得夹具B可以在给定夹具A的值的情况下返回可变数量的参数。让我用当前实现的示例来说明。对于三个对象中的每一个,我想测试可变数量的属性。

@pytest.fixture(params=[Object1(), Object2(), Object3()])
def my_object(request):
    return request.param


def test_keys(my_object):
    for key in my_object.valid_keys:
        assert getattr(my_object, key) > 0, "mock test failed"

上述实现是有效的,但从测试输出中看不出哪个valid_keys被测试了。如果其中一个测试失败,则不会执行后续测试。理想情况下,我想要一个如下设置。

@pytest.fixture(params=[Object1(), Object2(), Object3()])
def my_object(request):
    return request.param


@pytest.fixture
def valid_key(my_object):
    # Return each valid key separately for each input object


def test_keys(my_objects, valid_key):
    assert getattr(my_object, valid_key) > 0, "mock test failed"

这种结构可以让我更轻松地分析我的测试,观察覆盖范围,确保所有测试都独立运行等。

1 个答案:

答案 0 :(得分:0)

如果您知道每个对象确实存在相同数量的有效密钥,那么您编写的代码将是完美的。 (与每个对象的1个有效密钥完全相同,更多只需将params添加到第二个夹具中。)

如果这还不够,你必须进入大联盟并编写一个名为pytest_generate_tests的pytest钩子,它允许你“定义你自己的参数化方案”(根据pytest文档)

文档:https://docs.pytest.org/en/latest/example/parametrize.html