Добавьте вывод в раздел «СБОЙ» теста, не захватывая стандартный вывод

1

У меня есть собственный декоратор на моих тестах, который просто дает дополнительную информацию для теста. Я бы хотел, чтобы при тестировании я смог распечатать часть этой информации и показать ее в разделе сбоев, поэтому наши инструменты сборки могут хорошо отображать ее.

Прямо сейчас у меня есть код, который выглядит так:

@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    outcome = yield
    if outcome.get_result().outcome != "passed":
        print("Some extra info: {}".format(item.function.detail1))

Проблема в том, что это при неудачном тестировании я получаю вывод, который выглядит так:

test_foo.py .Some extra info: more info
F

================================== FAILURES ===================================
__________________________________ test_foo2 __________________________________

    @info("more info")
    def test_foo():
>       raise ValueError("OH NO")
E       ValueError: OH NO

test_foo.py:11: ValueError

Мне нужна Some extra info: more info для показа в этом нижнем разделе. Можно ли это как-то зацепиться?

Теги:
pytest

1 ответ

0

Здесь быстрое рабочее решение, хотя я уверен, что есть, вероятно, больше (тестовый) тонкий способ сделать это.

test.py

def test_fail():
    assert False

def test_pass():
    assert True

def test_fail_2():
    assert False

conftest.py

import pytest

FAIL_EXTRA_INFO = []

@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    outcome = yield
    if outcome.get_result().outcome != "passed":
        FAIL_EXTRA_INFO.append("Some extra info: {}".format(item))

def pytest_terminal_summary(terminalreporter, exitstatus):
    for extra_info in FAIL_EXTRA_INFO:
        print(extra_info)

Результат выполнения:

$ pytest -v
======================== test session starts =======================
platform linux -- Python 3.7.0, pytest-3.6.2, py-1.5.4, pluggy-0.6.0 
-- /home/user/.virtualenvs/test3.7/bin/python3.7
cachedir: .pytest_cache
rootdir: /home/user/projects/so, inifile:
collected 3 items                                                                                                   

so/test_api.py::test_fail FAILED                              [ 33%]
so/test_api.py::test_pass PASSED                              [ 66%]
so/test_api.py::test_fail_2 FAILED                            [100%]

============================== FAILURES ============================
______________________________ test_fail ___________________________

    def test_fail():
>       assert False
E       assert False

slotr_tracker/test_api.py:2: AssertionError
_____________________________ test_fail_2 _________________________

    def test_fail_2():
>       assert False
E       assert False

slotr_tracker/test_api.py:10: AssertionError
Some extra info: <Function 'test_fail'>
Some extra info: <Function 'test_fail_2'>
================ 2 failed, 1 passed in 0.03 seconds ===============

Здесь ссылка pytest hooks, если вы хотите углубиться в предмет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню