当使用内置类型作为夹具参数时,pytest会在测试报告中打印出参数的值。例如:
@fixture(params=['hello', 'world']
def data(request):
return request.param
def test_something(data):
pass
使用py.test --verbose
运行此操作将打印如下内容:
test_example.py:7: test_something[hello]
PASSED
test_example.py:7: test_something[world]
PASSED
请注意,参数的值在测试名称后面的方括号中打印。
现在,当使用用户定义的类的对象作为参数时,如下所示:
class Param(object):
def __init__(self, text):
self.text = text
@fixture(params=[Param('hello'), Param('world')]
def data(request):
return request.param
def test_something(data):
pass
pytest只会枚举值的数量(p0
,p1
等):
test_example.py:7: test_something[p0]
PASSED
test_example.py:7: test_something[p1]
PASSED
即使用户定义的类提供自定义__str__
和__repr__
实现,此行为也不会更改。有没有办法让pytest显示比p0
更有用的东西?
我在Windows 7上的Python 2.7.6上使用pytest 2.5.2。
答案 0 :(得分:6)
fixture装饰器采用ids
参数,该参数可用于覆盖自动参数名称:
@fixture(params=[Param('hello'), Param('world')], ids=['hello', 'world'])
def data(request):
return request.param
如图所示,它采用了一个名称列表,用于参数列表中的相应项目。