Как передать значение 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()