conftest.py
import pytest
from datetime import datetime
def pytest_exception_interact(node, call, report):
if report.failed:
with open("error.log", "a", encoding="utf-8") as f:
test_case = f"测试文件:{node.nodeid} | 测试函数:{node.name}"
failure_reason = f"失败原因:{report.longrepr}"
execution_time = f"执行时间:{datetime.now().isoformat()}"
f.write(test_case + "\n")
f.write(failure_reason + "\n")
f.write(execution_time + "\n")
f.write("\n")
f.write("=" * 80 + "\n")
f.write("\n")
这段代码使用了pytest
的钩子函数pytest_exception_interact
来处理测试过程中的异常,并将异常信息记录到日志文件中。
代码的解析如下:
- 导入了
pytest
和datetime
模块。 - 定义了
pytest_exception_interact
函数,接受三个参数:node
、call
和report
。 - 在函数内部,使用
if
条件判断报告是否失败。 - 如果报告失败,打开名为
error.log
的日志文件,并以追加模式写入内容。 - 创建了
test_case
变量,用于存储测试文件和测试函数的信息。 - 创建了
failure_reason
变量,用于存储失败的原因。 - 创建了
execution_time
变量,用于存储执行时间。 - 将测试文件、测试函数、失败原因和执行时间写入日志文件。
- 添加分隔符和换行符。
通过使用pytest_exception_interact
钩子函数,可以在测试过程中捕获异常,并将异常信息记录到日志文件中。这样可以更方便地查看和分析测试过程中的失败原因和执行时间。
test22.py
import pytest
# from test11 import log_exceptions
# @log_exceptions
def test_divide():
assert 1 == 2
# @log_exceptions
def test_divide2():
assert 1 == '14'
def test_divide3():
assert 1 == 1
if __name__ == '__main__':
pytest.main(["-s", "test22.py"])
(35条消息) pytest 通过装饰器获取测试case的断言失败结果_U盘失踪了的博客-CSDN博客