import pytest
class TestSomething(object):
@pytest.mark.somethinga
def test_something(self):
Run Code Online (Sandbox Code Playgroud)
在函数test_something中,我要检查给函数赋予的标记,如果是某某,则该函数的行为与某某不同(例如,某某b)。
我认为我应该使用inspect.py(自省),但是我还没有找到如何做的方法。非常感谢你们!
这里不需要使用inspect;装饰器将一个属性添加到函数对象,但不包装该对象。从源代码:
holder = getattr(func, self.name, None)
if holder is None:
holder = MarkInfo(
self.name, self.args, self.kwargs
)
setattr(func, self.name, holder)
else:
holder.add(self.args, self.kwargs)
Run Code Online (Sandbox Code Playgroud)
您可以通过遍历函数属性来检测设置了哪些名称:
from _pytest.mark import MarkInfo
def function_marks(func):
return [name for name, ob in vars(func).items() if isinstance(ob, MarkInfo)]
Run Code Online (Sandbox Code Playgroud)
或者您可以仅测试属性名称并假定它是标记实例:
if hasattr(TestSomething.test_something, 'somethinga'):
# the somethinga mark is set
Run Code Online (Sandbox Code Playgroud)
演示:
>>> import pytest
>>> from _pytest.mark import MarkInfo
>>> @pytest.mark.foo
... @pytest.mark.bar
... def demo(): pass
...
>>> [name for name, ob in vars(demo).items() if isinstance(ob, MarkInfo)]
['foo', 'bar']
>>> demo.foo
<MarkInfo 'foo' args=() kwargs={}>
>>> demo.bar
<MarkInfo 'bar' args=() kwargs={}>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1316 次 |
| 最近记录: |