0

我正在使用 pytest 进行单元测试,我想对测试进行参数化。我知道我可以在类级别和方法级别使用@pytest.mark.parametrize。

@pytest.mark.parametrize("param1", [1,2,3,4,5])
class TestXYZ:
    @pytest.mark.parametrize("param2", [6,7,8,9])
    def test_xyz(self, param1, param2):
        assert param1 == param2

但是,在我的情况下,param2 列表取决于实际的 param1 值。我想获得这样的东西:

@pytest.mark.parametrize("param1", [1,2,3,4,5])
class TestXYZ:
    @pytest.mark.parametrize("param2", getparams(param1))
    def test_xyz(self, param1, param2):
        assert param1 == param2

但是,我不知道该怎么做。

我尝试使用嵌套函数,但这也没有成功:

@pytest.mark.parametrize("param1", [1,2,3,4,5])
class TestXYZ:
    def test_gen(self, param1):
        @pytest.mark.parametrize("param2", [6,7,8,9])
        def test_xyz(self, param1, param2):
            assert param1 == param2

        return test_gen

Pytest 然后只为 param1 收集一个测试用例。

4

1 回答 1

0

This should work for you:

import pytest

parameter1 = [1, 2, 3]

@pytest.mark.parametrize("param1", parameter1)
class TestXYZ:
    @pytest.mark.parametrize("param2", [4, 3, parameter1[0]])
    def test_xyz(self, param1, param2):
        assert param1 == param2

With output: 7 failed, 2 passed for this example.

于 2022-01-20T21:07:34.597 回答