自定义junitxml Pytest报告以从自定义标记添加多个属性

时间:2017-10-11 00:26:12

标签: python xml junit pytest

我的测试套件中的每个测试用例都有多个与之关联的属性,我希望将其包含在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做同样的事情?

一些调查结果 -

  1. junitxml没有extras
  2. record_xml_property我不想使用它,因为它是测试中的一项功能。使用装饰器添加多个参数看起来也不错。我不想妨碍代码可读性。

    def test_function(record_xml_property):
        record_xml_property("key", "value")
        assert 0
    
  3. 以下方法

    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>

  4. 所以, 向<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

1 个答案:

答案 0 :(得分:0)

所以,看起来没有简单的方法来实现这一目标。 pytest目前不支持此功能。目前标记为feature request