我正在编写一个python插件,用于pytest测试结果的自定义HTML报告。我想在测试中存储一些任意测试信息(即一些python对象......),然后在编写报告时我想在报告中重用这些信息。到目前为止,我只是带来了一些黑客解决方案。
我将request
对象传递给我的测试,并用我的数据填充request.node._report_sections
部分。
然后将此对象传递给TestReport.sections
属性,该属性可通过钩子pytest_runtest_logreport
获取,最后我可以生成HTML,然后从sections
属性中删除所有对象。
在pseudopythoncode中:
def test_answer(request):
a = MyObject("Wooo")
request.node._report_sections.append(("call","myobj",a))
assert False
和
def pytest_runtest_logreport(report):
if report.when=="call":
#generate html from report.sections content
#clean report.sections list from MyObject objects
#(Which by the way contains 2-tuples, i.e. ("myobj",a))
有更好的pytest方法吗?
答案 0 :(得分:0)
这种方式似乎没问题。 改进我可以建议:
考虑使用fixture来创建MyObject对象。然后,您可以将request.node._report_sections.append(("call","myobj",a))
置于夹具内,并使其在测试中不可见。像这样:
@pytest.fixture
def a(request):
a_ = MyObject("Wooo")
request.node._report_sections.append(("call","myobj",a_))
return a_
def test_answer(a):
...
另一个想法,适用于您在所有测试中使用此对象的情况,是实现其中一个挂钩pytest_pycollect_makeitem
或pytest_pyfunc_call
和&# 34;植物"首先是那里的对象。