我正在使用pytest在Django项目中运行测试。我使用的是pytest.ini,其中定义了DJANGO_SETTINGS_MODULE,所以我只用以下方式运行测试:
pytest
现在,如果测试运行成功,我想在控制台输出中添加一些ASCII插图。我知道我可以做到:
pytest && cat ascii_art.txt
但是我想隐藏ASCII艺术来进行配置或其他地方,以便我仅使用pytest
来运行测试。我看不到任何可以使用的pytest config选项。还有其他想法可以做到吗?
答案 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())
结果:
如果只想在成功的测试运行中进行条件打印,请使用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