我使用 pytest 编写了一个测试工具,用于对我们的代码进行系统测试。这些测试在我们的持续集成系统中使用,因此我使用 junit xml 输出选项。 pytest 截断长字符串给我带来了问题。我知道我可以使用 -vv 选项来阻止它,但是这会为每个测试的结果提供详细的输出,很难阅读。本质上,我想要一种不同的方法来防止至少在 junit xml 文件中截断长字符串。如果它也能在控制台输出中工作,那就更好了,但不是必需的。
我们的代码生成包含大量值的报告,我将输出与一组已知正确的输出进行比较。我正在报告所有有错误的字段,而不仅仅是第一个错误。因此,我生成一个字符串列表,每个字符串有一个错误。然后,我用换行符连接字符串以创建一个长字符串和包含所有错误的长字符串。如果断言失败,我需要查看字符串的全部内容,可能有几百行。
errors = []
error.extend(get_report_errors())
s = '\n'.join(errors)
assert (s == '')
有什么建议
我正在使用 python 2.6 和 2.7 以及 pytest 2.3.5。我可以升级所需的pytest版本。
与更高版本的 pytest(例如 5)一起使用的一个简单技巧是修改控制截断差异量的值。
# conftest.py
from _pytest.assertion import truncate
truncate.DEFAULT_MAX_LINES = 9999
truncate.DEFAULT_MAX_CHARS = 9999
这允许您将详细程度保留为 0,但仍然可以看到长时间比较失败的内容。只要确保每次更新 pytest 时都进行检查,以确保内部结构没有改变,因为里面的内容很混乱。
Edit正如塞西尔·库里(Cecil Curry)指出的那样,这个黑客并不是一个完整的解决方案。希望
这个功能被添加到 Pytest 中,这样我们就可以在不破坏封装的情况下得到我们想要的东西。 :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)