当我进行参数化pytest
测试时,如下例所示:
@parametrize('repetition', range(3))
@parametrize('name', ['test', '42'])
@parametrize('number', [3,7,54])
def test_example(repetition, name, number):
assert 1 = 1
测试运行器打印出如下行:
tests\test_example.py:12: test_example[1-test-7]
其中参数化值显示在测试函数名称(test_example[0]
)旁边的矩形括号中。如何在测试中访问矩形括号的内容(即字符串0
)?我看过request
夹具,但找不到合适的方法来满足我的需求。
要明确:在测试方法中,我想打印字符串1-test-7
,pytest在控制台上打印。
如何访问1-test-7
字符pytest
,print str(repetition)+"-"+name+"-"+str(number)
在测试期间打印出来?
我不想自己使用类似
的东西来创建这个字符串object1
因为每次我向测试方法添加新的参数化参数时,这都会改变。
此外,如果在参数化列表中使用了更复杂的对象(如namedtuple),则这些对象只是快捷方式的引用(例如object2
,request
,...)。
附录:如果我在我的测试方法中使用print request.keywords.node.__repr__()
fixture作为参数,我会在使用以下命令时看到'我想要访问的字符串
<Function 'test_example[2-test-3]'>
打印出类似
的内容__repr__
我试图找出如何定义此方法test_example[2-test-3]
,以便直接访问字符串2-test-3
,我可以从中轻松提取我想要的字符串{{1}}示例
答案 0 :(得分:2)
该解决方案使用内置的request
夹具,可按如下方式访问:
def test_example(repetition, name, number, request):
s = request.keywords.node.name
print s[s.find("[")+1:s.find("]")]
将打印每个参数化测试的参数字符串,因此可以识别每个参数化测试。