防止在pytest中截断长字符串

gna*_*ent 8 integration-testing truncation pytest

我已经使用pytest为我们的代码的系统测试编写了一个测试工具.这些测试用于我们的持续集成系统,所以我使用junit xml输出选项.pytest截断长字符串会给我带来麻烦.我知道我可以使用-vv选项阻止它,但随后会为每个难以阅读的测试结果提供详细输出.基本上我想要一种不同的方法来防止至少在junit xml文件中截断长字符串.如果它也在控制台输出中工作,那将更好但不是必需的.

我们的代码生成具有大量值的报告,并将输出与已知正确的一组输出进行比较.我报告错误的所有字段不仅仅是第一个错误.所以我生成一个字符串列表,每个字符串有一个错误.然后我用新行连接字符串来创建一个包含所有错误的长字符串和长字符串.如果断言失败,我需要查看字符串的全部内容,可能是几百行.

errors = []
error.extend(get_report_errors())
s = '\n'.join(errors)
assert (s == '')
Run Code Online (Sandbox Code Playgroud)

有什么建议

我使用的是python 2.6和2.7以及pytest 2.3.5.我可以升级所需的pytest版本.

use*_*458 12

与更高版本的 pytest(例如 5)一起使用的一个简单技巧是修改控制截断差异量的值。

# conftest.py
from _pytest.assertion import truncate
truncate.DEFAULT_MAX_LINES = 9999
truncate.DEFAULT_MAX_CHARS = 9999  
Run Code Online (Sandbox Code Playgroud)

这允许您将详细程度保留为 0,但仍然可以看到长时间比较失败的内容。只要确保每次更新 pytest 时都进行检查,以确保内部结构没有改变,因为里面的内容很混乱。

编辑 正如塞西尔·库里(Cecil Curry)指出的那样,这个黑客并不是一个完整的解决方案。希望这个功能被添加到 Pytest 中,这样我们就可以在不破坏封装的情况下得到我们想要的东西。:)


Ede*_*eca -4

您可以使用tb标志“这是 pytest 的回溯输出”。有几种选择: --tb=style traceback print mode (auto/long/short/line/native/no)

您需要选择最适合您的。