如何使用Pytest将testCase值传递给下一个值

时间:2018-03-20 01:36:49

标签: python pytest python-unittest parameterized-unit-test

import pytest


def add(x):
    return x + 1

def sub(x):
    return x - 1


testData1 = [1, 2]
testData2 = [3]


class Test_math(object):
    @pytest.mark.parametrize('n', testData1)
    def test_add(self, n):
        result = add(n)
        testData2.append(result) <-------- Modify testData here
        assert result == 5

    @pytest.mark.parametrize('n', testData2)
    def test_sub(self, n):
        result = sub(n)
        assert result == 3


if __name__ == '__main__':
    pytest.main()

在此方案中只执行了3次测试:Test_math.test_add[1]Test_math.test_add[2]Test_math.test_sub[3]

Test_math.test_sub仅使用预定义数据[3]执行,这不是我期望的[2,3,3]。如何解决?

  

更新[1,2,3] - &gt; [2,3,3]

1 个答案:

答案 0 :(得分:1)

不完全确定它为什么不起作用,但这样做是不错的,因为测试顺序无法保证(除非您实施特殊代码来命令执行测试) 。

除了这个以及测试设计的其他问题之外,你可以通过在testData1装饰器中加入testData2pytest.mark.parametrize来实现你想要的方式。

@pytest.mark.parametrize('n', testData1 + testData2)
def test_sub(self, n):
    result = sub(n)
    assert result == 3

现在,请记住,使用您的测试定义时,这将始终失败,因为sub(n)testData1 + testData2的结果永远不会是3