У меня есть три тестовых примера с некоторой зависимостью двух из них от третьего. А именно, тесты test_inner_1
и test_inner_2
не зависят друг от друга, но их выполнение не имеет смысла, если test_outher
не работает. Оба они должны запускаться, если тест test_outher
проходит, и оба должны быть пропущены, если test_outher
не работает.Как организовать шаги из нескольких тестовых функций при использовании pytest?
The pytest
ручного https://pytest.org/latest/example/simple.html представляет некоторый простой пример, как реализовать инкрементное тестирование с тестовых шагами. Я пытаюсь применить этот подход к моей ситуации и реализовать что-то подобное:
Содержание conftest.py:
import pytest
def pytest_runtest_makereport(item, call):
if "incremental" in item.keywords:
if call.excinfo is not None:
parent = item.parent
parent._previousfailed = item
def pytest_runtest_setup(item):
if "incremental" in item.keywords:
previousfailed = getattr(item.parent, "_previousfailed", None)
if previousfailed is not None:
pytest.xfail("previous test failed (%s)" % previousfailed.name)
содержание test_example.py:
import pytest
@pytest.mark.incremental
class TestUserHandling:
def test_outher(self):
assert 0
class TestInner:
def test_inner_1(self):
assert 0
def test_inner_2(self):
pass
К сожалению, у меня есть выход
==================== 2 failed, 1 passed in 0.03 seconds ====================
в то время как ожидается, чтобы получить выход
=================== 1 failed, 2 xfailed in 0.03 seconds ====================
Как исправить conftest.py
, чтобы получить желаемое поведение?
Возможный дубликат [Если у меня несколько тестов в одном классе и предыдущий тест не удается, как мне его пропустить или выйти из класса вместо тестирования оставшихся тестов?] (Http://stackoverflow.com/questions/ 37422806/if-i-have-multiple-tests-in-one-class-and-a-before-test-fail-how-do-i-have) –
Это еще один вопрос. Мне нужно сгруппировать два теста, чтобы заставить их ОБА запустить/пропустить в зависимости от пропущенного теста. Эти два теста независимы друг от друга. – Andriy