有没有办法处理pytest中传递的断言

时间:2014-10-15 14:58:24

标签: pytest

我正在尝试调整pytest工具,以便它可以在我的测试环境中使用,这需要生成和存储精确的测试报告。测试报告采用xml格式。 到目前为止,我已经成功创建了一个新的插件,它生成了我想要的xml,但有一个例外: 我需要在我的xml报告中注册传递的断言,如果可能的话,使用相关的代码。我找不到办法这样做。 接近pytest_assertrepr_compare im pytest插件的唯一可能性是,但只在断言失败时调用它,而不是在传递断言时调用。

有任何想法吗?

感谢您的帮助!

艾蒂安

2 个答案:

答案 0 :(得分:1)

我认为如果不改变断言重写本身,这基本上是不可能的。 py.test没有看到在断言​​级别的细节上发生的事情,它只是执行测试函数,它返回一个值(忽略)或引发异常。在引发异常的情况下,它会检查异常信息,以便提供一个很好的失败消息。

断言重写逻辑只是用if not <assert_expr>: create_detailed_assertion_info替换断言语句。我猜在理论上可以扩展断言重写,以便它可以调用<assert_expr>的传递和失败的挂钩,但这将是一个新功能。

答案 1 :(得分:0)

不确定我是否完全理解您的要求,但另一种方法是生成带有预期处理结果的text / xml文件:第一次运行测试时,手动检查文件以确保其正确无误将它存储在测试中。然后,进一步的测试运行会生成一个类似的文件并将其与前者进行比较,如果它们不匹配则会失败(可选择生成差异以便于诊断)。

pytest-regtest插件通过捕获测试函数的输出并将其与之前的运行进行比较来使用类似的方法。