2017-03-13 4 views
1

Im Moment habe ich einen einfachen Test, der eine Reihe von ähnlichen Objekten instanziiert und führt ein Verfahren das Verfahren, um sicherzustellen, keine Ausnahmen auslösen:Bericht mehrere Tests aus einer einzigen Funktion mit pytest

class TestTemplates(object): 

    def test_generate_all(self): 
     '''Generate all the templates and ensure none of them throw validation errors''' 
     for entry_point in pkg_resources.iter_entry_points('cloudformation.template'): 
      object = entry_point.load() 
      object().build().to_json() 

Dies berichtet die Textausgabe von pytest als Einzeltest:

test/test_templates.py::TestTemplates::test_generate_all PASSED 

auch im junit XML:

<testcase classname="test.test_templates.TestTemplates" file="test/test_templates.py" line="31" name="test_generate_all" time="0.0983951091766"></testcase> 

Ist es möglich, dass jedes getestete Objekt als separater Test gemeldet wird, ohne manuell eine Testfunktion für jedes Objekt zu definieren?

+0

ich diese Liste als feste Größe erzeugen würde, dann, dass die Halterung in eine parametrisierte Test. –

Antwort

1

Ich würde Ihre Liste der Objekte als feste Größe definieren, übergeben Sie dann diese Liste in eine parametrisierte Test:

@pytest.fixture 
def entry_point_objects() 
    eps = pkg_resources.iter_entry_points('cloudformation.template') 
    return [ep.load() for ep in eps] 

@pytest.mark.parametrize('obj', entry_point_objects()) 
def test_generate_all(obj): 
    obj().build().to_json() 
+0

Dies gab mir genau das Ergebnis, das ich suchte, danke. – jordanm

+0

@jordanm danke für die Befestigung;) –

Verwandte Themen