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 -
junitxml
nichtextras
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
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 Hakendef pytest_runtest_makereport(item, call):
Dieitem.config._xml
PunkteLogXML
injunit-xml
die wiederumadd_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>