我被要求编写一个日志,在测试发生后显示错误,为此我使用了
conftest.py 文件中的固定装置。
我的代码:
pytest.fixture(autouse=True)
def log_during_fails(request):
outcome = yield
result = outcome.get_result()
if result.when == "call":
if result. Failed == True:
logging.info("test passed successfully")
else:
logging.info("trace:", result)
不幸的是,我收到错误:“AttributeError:'NoneType'对象没有属性'get_result'” 我尝试打印结果,然后我发现它包含值
None
,因此该函数无法在其上运行。
您正在寻找的是conftest makereport 挂钩。这个钩子允许您捕获有关您运行的每个测试的数据。
有关 conftest 及其所有用法的更多信息,请参阅 pytest 文档:https://docs.pytest.org/en/6.2.x/fixture.html
此问题之前已在此网站上得到解答,但其外观如下:
conftest.py
import pytest
import logging
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
report = yield
result = report.get_result()
if result.when == 'call':
(filename, line, name) = item.location
test = item.nodeid
status_tag = result.outcome
line = line
duration = call.duration
exception = call.excinfo
if result.outcome == 'failed':
logging.error(f"TEST: {test} {status_tag} on LINE: {line} with EXCEPTION: {exception} ---- DURATION: {duration}")
else:
logging.info(f"TEST: {test} PASSED")
每次测试后,此挂钩将运行并收集测试结果。然后 if/else 将决定测试是通过还是失败。