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

标签 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 在控制台上打印该字符串。

如何访问测试期间 pytest 打印出来的字符串 1-test-7

我不想使用类似的东西自己创建这个字符串

print str(repetition)+"-"+name+"-"+str(number)

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

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

附录:如果我在测试方法中使用 request 固定装置作为参数,那么当我使用以下命令时,我会“看到”我想要访问的字符串

print request.keywords.node.__repr__()

打印出类似的内容

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

我试图找出这个方法 __repr__ 是如何定义的,以便直接访问字符串 test_example[2-test-3] ,我可以轻松地从中访问提取我想要的字符串,在本例中为 2-test-3

最佳答案

该解决方案利用内置的request固定装置,可以按如下方式访问:

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

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

关于python - 如何访问参数化 pytest 测试中使用的括号中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24926801/

相关文章:

python - 用于测试的模拟密码哈希

python - Pytest 安排测试组之间的间隔

python - 斜纹/机械化访问 html 内容

Python/Selenium - Chrome Web 驱动程序,单击操作

python - 我收到 "[errno 22] Invalid argument: ' test.txt\r'

python - 如何将复杂的类成员传递给 pytest 参数化装饰器

python - 如何用pytest只打印摘要?

python - PySerial FileNotFoundError

从外部文件设置模块范围设置的 Pythonic 方式

python - 带有 pytest 标记的 python 脚本的 Sphinx 文档