Как показать подробные различия в py.test без подробного теста?

py.test --verbose требуется, чтобы показать полную разницу с ошибками утверждения, но это также отображает полное имя каждого теста во время выполнения (что является шумным).

Я бы хотел, чтобы полные разницы отображались, когда утверждение терпит неудачу, но я хочу, чтобы только один . появлялся при запуске тестов. Есть ли способ сделать это?

Ответ 1

К сожалению, для этого не существует флагов конфигурации или командной строки, поскольку этот жестко закодированный глубоко внутри pytest: когда вы определяете --verbose, вы получите весь пакет. Тем не менее, мне удалось придумать этот хакерский хак. Поместите следующую функцию в свой conftest.py:

def pytest_configure(config):
    terminal = config.pluginmanager.getplugin('terminal')
    BaseReporter = terminal.TerminalReporter
    class QuietReporter(BaseReporter):
        def __init__(self, *args, **kwargs):
            BaseReporter.__init__(self, *args, **kwargs)
            self.verbosity = 0
            self.showlongtestinfo = self.showfspath = False

    terminal.TerminalReporter = QuietReporter 

Это, по сути, исправление обезьян, полагающееся на внутренности pytest, не гарантированное совместимость с будущими версиями и уродливое как грех. Вы также можете сделать это исправление на основе другой пользовательской конфигурации аргумента командной строки.

Ответ 2

Основано на @bereal ответе

(это хорошо, но следует следить за некоторыми изменениями Pytest)

def pytest_configure(config):
    terminal = config.pluginmanager.getplugin('terminal')

    class QuietReporter(terminal.TerminalReporter):
        @property
        def verbosity(self):
            return 0

        @property
        def showlongtestinfo(self):
            return False

        @property
        def showfspath(self):
            return False

    terminal.TerminalReporter = QuietReporter