Chaque cas de test de ma suite de tests comporte plusieurs attributs que je souhaite inclure dans le rapport XML (junit-xml
). L'extrait de code suivant donne une image claire à ce sujet.Personnaliser junitxml Rapport Pytest pour ajouter plusieurs attributs à partir du marqueur personnalisé
@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
Alors que la personnalisation des rapports, il est facile d'ajouter des attributs dans le plugin pytest-html
, en ajoutant des paramètres dans extras
attribut de pytest-html
, comme indiqué ci-dessous.
Dans 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
Aussi, je peux facilement obtenir les attributs
item.keywords.get('webtest').kwargs
Comment puis-je faire la même chose pour junitxml
?
Quelques résultats -
junitxml
ne dispose pas desextras
record_xml_property
Je ne veux pas l'utiliser comme il est une caractéristique dans l'essai. En outre, l'ajout de plusieurs arguments avec le décorateur semble être une bonne approche. Je ne veux pas entraver la lisibilité du code.def test_function(record_xml_property): record_xml_property("key", "value") assert 0
L'approche suivante
if hasattr(request.config, "_xml"): request.config._xml.add_custom_property(name, value)
Je n'ai pas pu mettre la main sur
request
objet ici dans le crochetdef pytest_runtest_makereport(item, call):
Lesitem.config._xml
des points àLogXML
enjunit-xml
qui à son tour n'a pas de méthodeadd_custom_property
associée à il.
Alors, Quelle serait la meilleure façon d'ajouter des attributs à junitxml
, de sorte qu'il serait à peu près ressembler à ceci -
<testcase classname="test_function" file="test_function.py" line="0" name="test_function" time="0.0009">
<properties>
<property name="jira" value="1234566" />
</properties>
</testcase>
ou comme celui-ci
<testcase classname="test_function" file="test_function.py" line="0" name="test_function" time="0.0009" jira="2345667">
</testcase>