Хотелось бы видеть список отмененных тестов и их идентификаторов узлов в выводе pytest - PullRequest
1 голос
/ 04 апреля 2020

Есть ли возможность перечислить невыбранные тесты в выводе cli вместе с меткой, которая вызвала их отмену?

Я знаю, что в наборах со многими тестами это не будет хорошо по умолчанию, но будет полезная опция в чем-то вроде API-тестирования, где тесты, вероятно, будут более ограниченными.

Цифра c сводка

collected 21 items / 16 deselected / 5 selected 

полезна, но ее недостаточно при попытке упорядочить оценки и посмотрим, что произошло в билде ci.

1 Ответ

1 голос
/ 04 апреля 2020

pytest имеет значение c pytest_deselected для доступа к отмененным тестам. Пример: добавьте этот код к conftest.py в своем тесте root dir:

def pytest_deselected(items):
    if not items:
        return
    config = items[0].session.config
    reporter = config.pluginmanager.getplugin("terminalreporter")
    reporter.ensure_newline()
    for item in items:
        reporter.line(f"deselected: {item.nodeid}", yellow=True, bold=True)

Запуск тестов сейчас даст вам вывод, подобный следующему:

$ pytest -vv
...
plugins: cov-2.8.1, asyncio-0.10.0
collecting ...
deselected: test_spam.py::test_spam
deselected: test_spam.py::test_bacon
deselected: test_spam.py::test_ham
collected 4 items / 3 deselected / 1 selected
...

Если вы Чтобы получить отчет в другом формате, просто сохраните невыбранные элементы в конфигурации и используйте их для нужного вывода в другом месте, например, pytest_terminal_summary:

# conftest.py

import os

def pytest_deselected(items):
    if not items:
        return
    config = items[0].session.config
    config.deselected = items


def pytest_terminal_summary(terminalreporter, exitstatus, config):
    reports = terminalreporter.getreports('')
    content = os.linesep.join(text for report in reports for secname, text in report.sections)
    deselected = getattr(config, "deselected", [])
    if deselected:
        terminalreporter.ensure_newline()
        terminalreporter.section('Deselected tests', sep='-', yellow=True, bold=True)
        content = os.linesep.join(item.nodeid for item in deselected)
        terminalreporter.line(content)

дает вывод:

$ pytest -vv
...
plugins: cov-2.8.1, asyncio-0.10.0
collected 4 items / 3 deselected / 1 selected                                                     

...

---------------------------------------- Deselected tests -----------------------------------------
test_spam.py::test_spam
test_spam.py::test_bacon
test_spam.py::test_ham
================================= 1 passed, 3 deselected in 0.01s =================================
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...