【发布时间】:2020-05-05 22:51:19
【问题描述】:
我正在研究添加到由pytest-json 或pytest-json-report 生成的JSON 报告的方法:我没有挂断这两个插件。到目前为止,我已经使用pytest-json 完成了大部分评估。因此,例如,JSON 对象有这个用于测试用例
{
"name": "fixture_test.py::test_failure1",
"duration": 0.0012421607971191406,
"run_index": 2,
"setup": {
"name": "setup",
"duration": 0.00011181831359863281,
"outcome": "passed"
},
"call": {
"name": "call",
"duration": 0.0008759498596191406,
"outcome": "failed",
"longrepr": "def test_failure1():\n> assert 3 == 4, \"3 always equals 3\"\nE AssertionError: 3 always equals 3\nE assert 3 == 4\n\nfixture_test.py:19: AssertionError"
},
"teardown": {
"name": "teardown",
"duration": 0.00014257431030273438,
"outcome": "passed"
},
"outcome": "failed"
}
这是来自我正在尝试的实验。在实践中,一些测试用例是通过Popen 产生一个子进程来完成的,并且断言是某个字符串出现在标准输出中。如果测试用例失败,我需要向包含该子进程的标准输出的 call 字典添加一个键/值。到目前为止,我一直徒劳地尝试找到正确的固定装置或设备来完成此任务。似乎pytest_exception_interact 可能是要走的路,但到目前为止我还没有深入研究 JSON 结构。我需要做的就是在发生错误时添加/修改 JSON 结构。看来pytest_runtest_call太重了。
或者,有没有办法改变上面longrepr 的值?我一直无法找到执行这些操作的正确方法,现在该提问了。
【问题讨论】:
-
您可以将 JSON 对象转换为 Python 字典,并且可以修改它们(字典)然后再转回 JSON。看起来相对简单——到底是什么问题?
-
@martineau 我已经考虑过了。在这一点上,我对这种方法的批评是我不想在测试之后将标准输出存储在 somewhere 中。我想要一种在测试运行而不是后处理时直接添加到 JSON 对象的方法。除非,有一种干净的方法可以按照您在测试中的建议进行操作。
-
除非这两个插件中的一个以某种方式支持它,否则您必须进行后期处理。
-
@martineau 实际上,我确实找到了答案。谢天谢地,我没有挂断
pytest-json。插件似乎没有在积极开发中(pytest-json-report的开发者是这样说的)。我放弃调查并接受他的话。无论如何,pytest-json-report将在stdout、stderr等中捕获的内容放入 JSON 报告中。这就是我需要的。我想我会回答我自己的问题。 -
安德鲁:很高兴听到这个消息。您可以发布自己问题的答案(并接受它)——这样做可以帮助其他有类似问题的人。
标签: python pytest test-reporting