如何访问参数化pytest测试中使用的括号中的字符串?

时间:2014-07-24 06:45:50

标签: python pytest

当我进行参数化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字符pytestprint str(repetition)+"-"+name+"-"+str(number) 在测试期间打印出来?

我不想自己使用类似

的东西来创建这个字符串
object1

因为每次我向测试方法添加新的参数化参数时,这都会改变。

此外,如果在参数化列表中使用了更复杂的对象(如namedtuple),则这些对象只是快捷方式的引用(例如object2request,...)。

附录:如果我在我的测试方法中使用print request.keywords.node.__repr__() fixture作为参数,我会在使用以下命令时看到'我想要访问的字符串

<Function 'test_example[2-test-3]'>

打印出类似

的内容
__repr__

我试图找出如何定义此方法test_example[2-test-3],以便直接访问字符串2-test-3,我可以从中轻松提取我想要的字符串{{1}}示例

1 个答案:

答案 0 :(得分:2)

该解决方案使用内置的request夹具,可按如下方式访问:

def test_example(repetition, name, number, request):
    s = request.keywords.node.name
    print s[s.find("[")+1:s.find("]")]

将打印每个参数化测试的参数字符串,因此可以识别每个参数化测试。