pytest框架使用pytest_runtest_makereport hook获取测试用例执行结果,并在失败时记录log日志

发布时间:2024年01月03日

在pytest框架中,可以通过自定义的hook函数来实现断言失败信息自动写入log日志。

1. 在pytest配置文件(pytest.ini或者conftest.py)中,添加以下配置:

[pytest]
log_cli = true
log_cli_level = ERROR

log_cli = true是指在命令行界面启用日志记录。当设置为true时,系统将记录命令行输入和输出,并将其保存在日志文件中。这对于调试和故障排除非常有用。

上述配置设置了在命令行中输出ERROR级别以上的日志信息。

2. 使用 pytest_runtest_makereport hook 来获取测试用例执行结果,并在失败时记录日志。

下面是一个示例代码,在测试失败时记录日志:

import logging

def pytest_runtest_makereport(item, call):
    if call.when == 'call' and call.excinfo is not None:
        logging.error(f"Test case failed: {item.nodeid}")

        # 获取失败的详细信息
        failure = call.excinfo._getreprcrash()
        logging.error(failure)

###########################

def test_something():
    assert 1 == 2, "1 is not equal to 2"

在上述示例中,pytest_runtest_makereport hook 函数会在每个测试用例执行结束时触发。通过检查 call.when 的值,可以确定测试用例是在什么时候失败的。如果是 call 阶段且包含异常信息,就可以将失败信息记录到日志中。

请注意,这只是一个示例代码,你可以根据实际需求进行修改和定制化。另外,你可以通过配置日志记录器来控制日志的输出格式、级别等。

3. 在测试用例中使用断言时,例如:

def test_something():
    assert 1 == 2, "1 is not equal to 2"

当该断言失败时,会自动将失败信息写入log日志中。

需要注意的是,上述配置和hook函数是全局生效的,会对整个pytest运行期间的所有测试用例生效。如果只想针对某个特定的测试用例或测试模块实现断言失败信息写入log日志,可以根据具体需求进行适当的修改。

文章来源:https://blog.csdn.net/songpeiying/article/details/135368775
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。