我的测试套件中的每个测试用例都有多个与之关联的属性,我希望将其包含在XML(junit-xml
)报告中。
以下代码片段给出了清晰的图片。
@data(*get_csv_data("csv/blah.csv"))
@unpack
@pytest.mark.run(order=70)
@pytest.mark.webtest.with_args(jira="QA5555", second="second_arg_add")
def test_your_stuff(self,arg1, arg2):
# Actual Test
在自定义报告时,通过在pytest-html
extras
属性中添加参数,可以轻松地在pytest-html
插件中添加属性,如下所示。
在conftest.py
@pytest.mark.hookwrapper
def pytest_runtest_makereport(item, call):
pytest_html = item.config.pluginmanager.getplugin('html')
outcome = yield
report = outcome.get_result()
extra = getattr(report, 'extra', [])
if report.when == 'call':
extra.append(pytest_html.extras.text("<blah>")
report.extra = extra
另外,我可以轻松获取属性
item.keywords.get('webtest').kwargs
我如何为junitxml
做同样的事情?
一些调查结果 -
junitxml
没有extras
record_xml_property
我不想使用它,因为它是测试中的一项功能。使用装饰器添加多个参数看起来也不错。我不想妨碍代码可读性。
def test_function(record_xml_property):
record_xml_property("key", "value")
assert 0
以下方法
if hasattr(request.config, "_xml"):
request.config._xml.add_custom_property(name, value)
我无法在钩子request
中抓住def pytest_runtest_makereport(item, call):
对象
item.config._xml
中的LogXML
指向junit-xml
add_custom_property
,而junitxml
中没有与之关联的方法<testcase classname="test_function" file="test_function.py" line="0" name="test_function" time="0.0009">
<properties>
<property name="jira" value="1234566" />
</properties>
</testcase>
。
所以,
向<testcase classname="test_function" file="test_function.py" line="0" name="test_function" time="0.0009" jira="2345667">
</testcase>
添加更多属性的最佳方法是什么,以便大致看起来像这样 -
event_start_date
或者像这样
event_end_date