如何在pytest测试失败时采取行动?

10

我正在使用pytest。

我想在测试失败时收集/保存一些数据以进行事后分析。我可以编写teardown_method,但我无法在该上下文中获取测试状态。

是否可以对任何测试(或assertion)失败采取行动?

2个回答

16
conftest.py文件中实现pytest_exception_interact,根据文档

当可能需要交互式处理的异常被引发时调用。

def pytest_exception_interact(node, call, report):
    if report.failed:
        # call.excinfo contains an ExceptionInfo instance

从您的问题中并不清楚您想从错误中收集什么信息,但是对于您的情况,可能拥有一个ExceptionInfo实例就足够了。


1
有趣!你知道我怎么能从 pytest_exception_interact 内部获取到我的测试对象的引用吗? - BobDoolittle
2
在调试器上探索 node... 如果你的测试函数是在一个类中定义的,我相信 node.parent.obj 将会给你访问测试类实例的权限。 - Bruno Oliveira
实际上,那是node.parent._obj,但是没错,这样很好用,谢谢! - BobDoolittle

3

4
欢迎提供解决方案的链接,但请确保你的回答即使没有链接也是有用的:在链接周围添加一些背景信息,这样其他用户就会了解它的意义和存在意义,然后引用你链接页面中最相关的部分,以防目标页面无法访问。 仅仅是一个链接的答案可能会被删除。 - Filnor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接