2017-10-11 2 views
2

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 -

  1. junitxml ne dispose pas des extras
  2. 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 
    
  3. 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 crochet def pytest_runtest_makereport(item, call): Les item.config._xml des points à LogXML en junit-xml qui à son tour n'a pas de méthode add_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> 

Répondre

0

Alors , On dirait qu'il n'y a pas de moyen facile d'y parvenir. Il n'est actuellement pas pris en charge par pytest. Ceci est actuellement étiqueté comme feature request.