Вывести ASCII art на консоль при успешном запуске Pytest - PullRequest
0 голосов
/ 05 декабря 2018

Я использую pytest для запуска тестов в проекте Django.Я использую pytest.ini, где определен DJANGO_SETTINGS_MODULE, поэтому я запускаю тесты только с:

pytest

Теперь я хочу добавить ASCII art к выводу консоли, если тестпробег успешен.Я знаю, что могу сделать:

pytest && cat ascii_art.txt

Но я хочу скрыть искусство ASCII в конфигурации или где-то еще, чтобы я продолжал выполнять тесты только с pytest.Я не вижу никакой опции конфигурации pytest, которую я могу использовать.Любые другие идеи, как это можно сделать?

1 Ответ

0 голосов
/ 06 декабря 2018

Есть множество мест, где вы можете напечатать свои собственные вещи в pytest;выберите подходящий хук из списка хуков и переопределите его, добавив собственную печать.Чтобы немного оживить примеры, я распечатаю некоторую системную информацию, используя функцию-оболочку screenfetch:

def screenfetch():
    exec = shutil.which('screenfetch')
    out = ''
    if exec:
        out = subprocess.run(exec, stdout=subprocess.PIPE, universal_newlines=True).stdout
    return out

Пользовательская печать после выполнения теста

Создатьфайл conftest.py в корневом каталоге вашего проекта со следующим содержанием:

from utils import screenfetch

def pytest_unconfigure(config):
    print(screenfetch())

Результат:

enter image description here

Если вы хотитеусловная печать только при успешных тестовых запусках, используйте pytest_sessionfinish для хранения кода выхода:

def pytest_sessionfinish(session, exitstatus):
    session.config.exitstatus = exitstatus

def pytest_unconfigure(config):
    if config.exitstatus == 0:
        print(screenfetch())

Другие примеры:

Расширенное резюме

# conftest.py
from utils import screenfetch

def pytest_terminal_summary(terminalreporter, exitstatus, config):
    terminalreporter.ensure_newline()
    terminalreporter.write(screenfetch())

Настраиваемая печать до pytest Начало вывода

# conftest.py

from utils import screenfetch

def pytest_configure(config):
    print(screenfetch())

Настраиваемая печать после pytest Информация заголовка

# conftest.py

import screenfetch

def pytest_report_header(config, startdir):
    return screenfetch()

Настраиваемая печать после собранных тестов, до запуска теста

# conftest.py

import os
from utils import screenfetch

def pytest_collection_modifyitems(session, items):
    terminalreporter = session.config.pluginmanager.get_plugin('terminalreporter')
    terminalreporter.ensure_newline()
    terminalreporter.write(screenfetch())

Пользовательская печать после каждого теста

def pytest_report_teststatus(report, config):
    if report.when == 'teardown':  # you may e.g. also check the outcome here to filter passed or failed tests only
        terminalreporter = config.pluginmanager.get_plugin('terminalreporter')
        terminalreporter.ensure_newline()
        terminalreporter.write(screenfetch())

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

...