Избегайте печати точек - PullRequest
       13

Избегайте печати точек

0 голосов
/ 19 ноября 2018

Я запускаю pytest с опцией -q.

К сожалению, это печатает много точек.Пример:

...................................................................................s...............s...................................ssssss..................................................................................................................................s..............s.........................s..............................................................................................................F....s.s............s.....................s...........................................................................................................................
=================================== FAILURES ===================================
_____________________ TestFoo.test_bar _____________________
Traceback (most recent call last):
  (cut)

Есть ли способ избежать этого длинного списка точек и символов "s"?

Обновление

Существуетправильный ответ.Но как-то это слишком долго для меня.Я использую этот обходной путь сейчас: я добавил это в скрипт, который вызывает pytest: pytest -q | perl -pe 's/^[.sxFE]{20,}$//g'

1 Ответ

0 голосов
/ 20 ноября 2018

Параметры многословия не могут отключить печать результатов теста. Однако pytest можно настроить разными способами, включая печать результатов. Чтобы изменить это, вы должны переопределить хук pytest_report_teststatus.

отключить короткие буквы

Создать файл conftest.py со следующим содержимым:

import pytest

def pytest_report_teststatus(report):
    category, short, verbose = '', '', ''
    if hasattr(report, 'wasxfail'):
        if report.skipped:
            category = 'xfailed'
            verbose = 'xfail'
        elif report.passed:
            category = 'xpassed'
            verbose = ('XPASS', {'yellow': True})
        return (category, short, verbose)
    elif report.when in ('setup', 'teardown'):
        if report.failed:
            category = 'error'
            verbose = 'ERROR'
        elif report.skipped:
            category = 'skipped'
            verbose = 'SKIPPED'
        return (category, short, verbose)
    category = report.outcome
    verbose = category.upper()
    return (category, short, verbose)

Теперь при выполнении тестов не будут печататься короткие буквы результата (.sxFE). Код немного многословен, но обрабатывает все стандартные результаты, определенные в платформе.

отключить подробные результаты

При работе в подробном режиме pytest печатает результат вместе с именем контрольного примера:

$ pytest -sv
=================================== test session starts ===================================
...
test_spam.py::test_spam PASSED
test_spam.py::test_eggs FAILED
test_spam.py::test_bacon SKIPPED
test_spam.py::test_foo xfail
...

Если вы удалите установку строк verbose из вышеуказанного крючка impl (оставив для него пустую строку), pytest также прекратит печать результатов в подробном режиме:

import pytest

def pytest_report_teststatus(report):
    category, short, verbose = '', '', ''
    if hasattr(report, 'wasxfail'):
        if report.skipped:
            category = 'xfailed'
        elif report.passed:
            category = 'xpassed'
        return (category, short, verbose)
    elif report.when in ('setup', 'teardown'):
        if report.failed:
            category = 'error'
        elif report.skipped:
            category = 'skipped'
        return (category, short, verbose)
    category = report.outcome
    return (category, short, verbose)
$ pytest -sv
=================================== test session starts ===================================
...
test_spam.py::test_spam
test_spam.py::test_eggs
test_spam.py::test_bacon
test_spam.py::test_foo
...

введение пользовательского режима отчетности с помощью переключателя командной строки

Приведенный ниже пример отключит печать коротких и подробных результатов, когда из командной строки будет передан флаг --silent:

import pytest

def pytest_addoption(parser):
    parser.addoption('--silent', action='store_true', default=False)


def pytest_report_teststatus(report):
    category, short, verbose = '', '', ''
    if not pytest.config.getoption('--silent'):
        return None

    if hasattr(report, 'wasxfail'):
        if report.skipped:
            category = 'xfailed'
        elif report.passed:
            category = 'xpassed'
        return (category, short, verbose)
    elif report.when in ('setup', 'teardown'):
        if report.failed:
            category = 'error'
        elif report.skipped:
            category = 'skipped'
        return (category, short, verbose)
    category = report.outcome
    return (category, short, verbose)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...