2017-10-11 3 views
2

Jeder Testfall in meiner Testsuite hat mehrere Attribute zugeordnet, die ich in XML-Bericht (junit-xml) aufnehmen möchten. Das folgende Code-Snippet gibt ein klares Bild darüber.Anpassen von junitxml Pytest-Bericht zum Hinzufügen mehrerer Attribute aus benutzerdefinierten Marker

@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 

Während Berichte Customizing ist es einfach Attribute in pytest-html Plugin hinzufügen, durch Hinzufügen von Parametern in extras Attribut pytest-html, wie unten gezeigt.

In 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 

Auch kann ich leicht die Attribute

item.keywords.get('webtest').kwargs 

Wie kann ich für junitxml das gleiche tun?

Einige Befunde -

  1. junitxml nicht extras
  2. record_xml_property Ich will nicht, es benutzen muss, wie es ein Merkmal in Test. Auch das Hinzufügen mehrerer Argumente mit Decorator sieht wie ein netter Ansatz aus. Ich möchte die Lesbarkeit des Codes nicht behindern.

    def test_function(record_xml_property): 
        record_xml_property("key", "value") 
        assert 0 
    
  3. Der folgende Ansatz

    if hasattr(request.config, "_xml"): 
    request.config._xml.add_custom_property(name, value) 
    

    war ich nicht in der Lage halten, request Objekt erhalten hier in den Haken def pytest_runtest_makereport(item, call): Die item.config._xml Punkte LogXML in junit-xml die wiederum add_custom_property assoziiert keine Methode hat mit es.

So Was wäre der beste Weg, um mehr Attribute junitxml, hinzufügen, so dass es in etwa so aussehen würde -

<testcase classname="test_function" file="test_function.py" line="0" name="test_function" time="0.0009"> 
    <properties> 
    <property name="jira" value="1234566" /> 
    </properties> 
</testcase> 

oder ähnliche

<testcase classname="test_function" file="test_function.py" line="0" name="test_function" time="0.0009" jira="2345667"> 
</testcase> 

Antwort

0

So Sieht so aus, als gäbe es keinen einfachen Weg, dies zu erreichen. Es wird derzeit von pytest nicht unterstützt. Dies wird derzeit als feature request bezeichnet.

Verwandte Themen