使用pytest从单个函数报告多个测试

时间:2017-03-13 19:09:01

标签: python 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()

这在pytest的文本输出中报告为单个测试:

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

同样在junit XML中:

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

是否可以将每个测试对象报告为单独的测试,而无需为每个对象手动定义测试函数?

1 个答案:

答案 0 :(得分:1)

我将对象列表定义为灯具,然后将该列表传递给参数化测试:

@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()