[英]Pytest: provide id to un-parameterized test
我想要一个与我运行的任何 pytest 相关联的id
,无论是否参数化。 有没有办法为未参数化的测试提供一个 id,使得 nodeid 看起来像my_test[my_id]
即与参数化测试一致的东西?
除了parametrize
之外,没有针对此的内置机制——也就是说,您可以通过修改函数的模块范围名称来构建一个模拟它的东西:
def test_thing(): pass
# need to use `globals()` since `[` isn't a valid identifier
globals()['test_thing[my_id]'] = test_thing
# delete the old test so it isn't run
del test_thing
$ pytest -v t3.py
...
collected 1 item
t3.py::test_thing[my_id] PASSED [100%]
============================== 1 passed in 0.00s ===============================
或者也许一个神奇的装饰器更适合你的风格:
import sys
def name_test(testid):
def decorator(func):
setattr(sys.modules[func.__module__], testid, func)
return None # need to avoid double-discovery
return decorator
@name_test('test_thing[my_id]')
def test_thing():
pass
$ pytest -v t2.py
...
collected 1 item
t2.py::test_thing[my_id] PASSED [100%]
============================== 1 passed in 0.00s ===============================
但是,使用参数化来执行此操作有一个相当简单且不那么笨拙的方法:
import pytest
@pytest.mark.parametrize('_', (pytest.param(0, id='my_id'),))
def test_thing(_): pass
这将创建一个带有自定义 id 的参数化案例,选择_
是因为未使用该值
免责声明:我是 pytest 核心开发人员
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.