W.P*_*ill 22 python pytest pycharm difference
我正在使用Pycharm来运行我的pytest单元测试.我正在测试REST API,所以我经常需要验证JSON块.当测试失败时,我会看到这样的事情:
FAILED
test_document_api.py:0 (test_create_documents)
{'items': [{'i...ages': 1, ...} != {'items': [{'...ages': 1, ...}
Expected :{'items': [{'...ages': 1, ...}
Actual :{'items': [{'i...ages': 1, ...}
<Click to see difference>
Run Code Online (Sandbox Code Playgroud)
当我点击"点击查看差异"链接时,大部分差异将转换为省略点,就像这样
这没用,因为它没有告诉我什么是不同的.对于大于单个字符串或数字的任何差异,我会得到此行为.
我假设Pycharm和/或pytest试图消除大输出差异的无信息部分.然而,它在这里过于咄咄逼人并且一切都在消失.
我如何让Pycharm和/或pytest向我展示完整的区别?
我已经尝试添加-vvv到pytest的附加参数,但这没有任何效果.
从原始帖子开始,我验证了当我从命令行运行单元测试时,我看到了相同的行为.所以这是pytest而不是Pycharm的问题.
看了我到目前为止得到的答案,我猜我真正问的是"在pytest中是否可以在maxDiff=None不改变测试源代码的情况下进行设置?" 我从阅读有关pytest的印象是,-vv开关是控制此设置的,但似乎并非如此.
hoe*_*ing 17
如果仔细观察PyCharm源代码,从整个pytest输出中,PyCharm使用单行来解析数据以便在Click to see difference对话框中显示.这是AssertionError: <message>一行:
def test_spam():
> assert v1 == v2
E AssertionError: assert {'foo': 'bar'} == {'foo': 'baz'}
E Differing items:
E {'foo': 'bar'} != {'foo': 'baz'}
E Use -v to get the full diff
Run Code Online (Sandbox Code Playgroud)
如果要在不截断的情况下查看完整的diff行,则需要在输出中自定义此行.对于单个测试,可以通过向assert语句添加自定义消息来完成此操作:
def test_eggs():
assert a == b, '{0} != {1}'.format(a, b)
Run Code Online (Sandbox Code Playgroud)
如果要将此行为应用于所有测试,请定义自定义pytest_assertrepr_compare挂钩.在conftest.py文件中:
# conftest.py
def pytest_assertrepr_compare(config, op, left, right):
if op in ('==', '!='):
return ['{0} {1} {2}'.format(left, op, right)]
Run Code Online (Sandbox Code Playgroud)
现在,这些价值观的相等比较现在仍然会被剥夺; 为了显示完整的行,你仍然需要用-vv旗帜来增加冗长度.
现在,AssertionError不会剥离线条中值的相等比较,并在Click to see difference对话框中显示完整的差异,突出显示差异部分:
| 归档时间: |
|
| 查看次数: |
1586 次 |
| 最近记录: |