Как передать значение testCase следующему с помощью Pytest

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]-> [2,3,3]

2 ответа

Не совсем уверен, почему это не сработало, но делать это так - плохая идея, поскольку порядок тестов не гарантирован (если вы не реализуете специальный код для упорядочивания выполнения тестов).

Помимо этого и других вопросов разработки тестов, вы можете присоединиться к testData1 а также testData2 в pytest.mark.parametrize декоратор.

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

Теперь имейте в виду, что с вашим определением теста это всегда будет неудачным, потому что результат sub(n) с testData1 + testData2 никогда не будет 3,

      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) 
        assert result == 5, "FAILED"
        return testData2

    def add():
        for i in testData1:
            res = add(i)
            testData2.append(res)  
            print(testData2)         
        return testData2

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

if __name__ == '__main__':
    pytest.main()
Другие вопросы по тегам