我试图从pytest -tb=no
短输出中获得更有用的输出。我将集成测试存储在JSON文件中,因此输出看起来非常相似
tests/test_dit_cli.py .......F............................. [ 29%]
...F...F.FF........F............................F...FFFFFFF [ 75%]
FFF.F..................F.....FF [100%]
===================== short test summary info =====================
FAILED tests/test_dit_cli.py::test_dits[dit_json7] - assert "Lin...
FAILED tests/test_dit_cli.py::test_dits[dit_json40] - assert "Li...
FAILED tests/test_dit_cli.py::test_dits[dit_json44] - assert "Li...
FAILED tests/test_dit_cli.py::test_dits[dit_json46] - assert "Li...
FAILED tests/test_dit_cli.py::test_dits[dit_json47] - assert "Li...
FAILED tests/test_dit_cli.py::test_dits[dit_json56] - assert "Li...
FAILED tests/test_dit_cli.py::test_dits[dit_json85] - assert "Li...
FAILED tests/test_dit_cli.py::test_dits[dit_json89] - AssertionE...
FAILED tests/test_dit_cli.py::test_dits[dit_json90] - AssertionE...
FAILED tests/test_dit_cli.py::test_dits[dit_json91] - AssertionE...
FAILED tests/test_dit_cli.py::test_dits[dit_json92] - AssertionE...
FAILED tests/test_dit_cli.py::test_dits[dit_json93] - AssertionE...
FAILED tests/test_dit_cli.py::test_dits[dit_json94] - AssertionE...
FAILED tests/test_dit_cli.py::test_dits[dit_json95] - AssertionE...
FAILED tests/test_dit_cli.py::test_dits[dit_json96] - assert 'Li...
FAILED tests/test_dit_cli.py::test_dits[dit_json97] - assert 'Li...
FAILED tests/test_dit_cli.py::test_dits[dit_json98] - assert "Li...
FAILED tests/test_dit_cli.py::test_dits[dit_json100] - Assertion...
FAILED tests/test_dit_cli.py::test_dits[dit_json119] - assert "L...
FAILED tests/test_dit_cli.py::test_dits[dit_json125] - Assertion...
FAILED tests/test_dit_cli.py::test_dits[dit_json126] - Assertion...
================= 21 failed, 106 passed in 2.94s ==================
看到同样的tests/test_dit_cli.py::test_dits[dit_json126]
20次并不能帮助我了解项目中的错误,所以我通常一次只修复一个测试中的错误。每个测试条目都有关于正在运行的测试类型和预期结果的额外信息,但我不知道如何将这些信息输入到pytest中。我希望这样:
===================== short test summary info =====================
FAILED [func, vanilla Python] - assert "Li...
FAILED [Thing, value assignment] - assert "Li...
FAILED [TypeMismatch, String var assigned to List] - assert "Lin...
实际上,通过在parametrize
调用中为ids
提供一个值,我接近了这一点
def pytest_generate_tests(metafunc: Metafunc):
for fixture in metafunc.fixturenames:
if fixture == "dit_json":
test_dicts = list(load_from_json())
titles = [test_dict["title"] for test_dict in test_dicts]
metafunc.parametrize(argnames=fixture, argvalues=test_dicts, ids=titles)
FAILED tests/test_dit_cli.py::test_dits[TypeMismatch, List var assigned to String]
FAILED tests/test_dit_cli.py::test_dits[import, anon import referenced in list assignment]
所以,我非常接近,我只想删除文件路径,这样行就更短了。有没有办法更改它认为测试所在位置的文件路径?还是一个可以让我任意修改摘要输出的钩子?我试图修改pytest_collection_modifyitems
和更改item.fspath
,但它没有改变输出中的任何内容。我已经看到了修改很多关于输出的其他内容的方法,但是没有任何关于文件路径的方法
如果只想缩短简短摘要信息中的节点ID,可以覆盖
report
对象的nodeid
属性。一个简单的例子:放置在
conftest.py
中,将把每个节点ID截断为其最后十个字符:如果您想要一个完全定制的短测试摘要行,那么您需要实现一个定制的
TerminalReporter
,并在测试运行中尽早替换普通的。示例存根:这将生成一个摘要部分,如
请注意} impl
MyReporter.short_test_summary()
的上述impl不完整,仅用于演示目的!有关引用,请查看^{相关问题 更多 >
编程相关推荐