防止在pytest中截断长字符串

时间:2013-10-04 01:07:09

标签: integration-testing truncation pytest

我已经使用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版本。

2 个答案:

答案 0 :(得分:1)

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

你需要选择最适合自己的东西。

答案 1 :(得分:0)

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

# conftest.py
from _pytest.assertion import truncate
truncate.DEFAULT_MAX_LINES = 9999
truncate.DEFAULT_MAX_CHARS = 9999  

这使您可以将详细程度保留为0,但仍然可以看到长时间比较失败了。只需确保在每次更新pytest时进行检查,以确保内部结构没有发生变化,因为内部情况一直在变化。

修改 正如塞西尔·库里(Cecil Curry)所指出的那样,这种黑客攻击并不旨在作为一个完整的解决方案。希望 此功能已添加到Pytest中,因此我们可以在不破坏封装的情况下获得所需的功能。 :)