РЕДАКТИРОВАТЬ: я приспособил мое решение к принятому нами usint pytest.skip
в приспособлении.
Следующий хак может решить вашу проблему. Поддельная тестовая функция test_compression
всегда завершается ошибкой, но выполняется только один раз. Но для этого необходимо, чтобы вы добавили проверку прибора alrady_failed
в свою тестовую функцию:
import pytest
@pytest.fixture(scope="function")
def skip_if_already_failed(request, failed=set()):
key = request.node.name.split("[")[0]
failed_before = request.session.testsfailed
if key in failed:
pytest.skip("previous test {} failed".format(key))
yield
failed_after = request.session.testsfailed
if failed_before != failed_after:
failed.add(key)
@pytest.mark.parametrize("data", [1, 2, 3, 4, 5, 6])
def test_compression(data, skip_if_already_failed):
assert data < 3
И это вывод:
$ py.test -v sopytest.py
================================== test session starts ==================================
platform darwin -- Python 3.6.6, pytest-3.8.0, py-1.6.0, pluggy-0.7.1 -- ...
cachedir: .pytest_cache
rootdir: ..., inifile:
collected 6 items
sopytest.py::test_compression[1] PASSED [ 16%]
sopytest.py::test_compression[2] PASSED [ 33%]
sopytest.py::test_compression[3] FAILED [ 50%]
sopytest.py::test_compression[4] SKIPPED [ 66%]
sopytest.py::test_compression[5] SKIPPED [ 83%]
sopytest.py::test_compression[6] SKIPPED [100%]
======================================= FAILURES ========================================
__________________________________ test_compression[3] __________________________________
data = 3, skip_if_already_failed = None
@pytest.mark.parametrize("data", [1, 2, 3, 4, 5, 6])
def test_compression(data, skip_if_already_failed):
> assert data < 3
E assert 3 < 3
sopytest.py:18: AssertionError
===================== 1 failed, 2 passed, 3 skipped in 0.08 seconds =====================