在成功运行pytest时将ASCII美术输出到控制台

时间:2018-12-05 17:29:50

标签: python django pytest ascii-art

我正在使用pytest在Django项目中运行测试。我使用的是pytest.ini,其中定义了DJANGO_SETTINGS_MODULE,所以我只用以下方式运行测试:

pytest

现在,如果测试运行成功,我想在控制台输出中添加一些ASCII插图。我知道我可以做到:

pytest && cat ascii_art.txt

但是我想隐藏ASCII艺术来进行配置或其他地方,以便我仅使用pytest来运行测试。我看不到任何可以使用的pytest config选项。还有其他想法可以做到吗?

1 个答案:

答案 0 :(得分:2)

在许多地方,您可以在pytest中打印自己的东西;从hooks list中选择一个合适的钩子并覆盖它,添加自己的打印件。为了使示例更加有趣,我将使用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())

另一个例子:

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):
    print(os.linesep + screenfetch())
    return items