gpt4 book ai didi

python - 如何获取测试函数的 pytest 标记名称?

转载 作者:行者123 更新时间:2023-11-28 21:14:46 26 4
gpt4 key购买 nike

import pytest
class TestSomething(object):

@pytest.mark.somethinga
def test_something(self):

在函数 test_something 中,我想检查我给函数的标记,如果它是 somethinga 函数的行为不同于,例如 somethingb。

我想我应该使用 inspect.py(内省(introspection)),但我还没有找到如何去做。非常感谢你们!

最佳答案

这里不需要使用inspect;装饰器向函数对象添加一个属性,它不包装对象。来自source code :

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)

您可以通过遍历函数属性来检测设置了哪些名称:

from _pytest.mark import MarkInfo

def function_marks(func):
return [name for name, ob in vars(func).items() if isinstance(ob, MarkInfo)]

或者您可以只测试属性名称并假设它是一个标记实例:

if hasattr(TestSomething.test_something, 'somethinga'):
# the somethinga mark is set

演示:

>>> 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={}>

关于python - 如何获取测试函数的 pytest 标记名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31242087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com