我从the pytest docs看到我们可以在类或模块级别一次应用多个标记。我没有找到在测试功能级别执行此操作的文档。以前有人成功做到过吗?
理想情况下,我希望将其作为标记列表来执行,例如在上述类文档中完成的操作(引用自文档):
class TestClass:
pytestmark = [pytest.mark.webtest, pytest.mark.slowtest]
因此,pytest 文档讨论了使用 pytestmark 来指定类和模块级别的标记。然而,它并没有谈论在测试功能级别上有类似的东西。我必须在测试函数之上单独指定标记,以便用每个标记来标记它们。随着测试函数顶部标记数量的增加,这使得测试代码看起来有点笨拙。
测试示例.py:
pytestmark = [class1, class2]
class TestFeature(TestCase):
@pytest.mark.marker1
@pytest.mark.marker2
@pytest.mark.marker3
def test_function(self):
assert True
最佳答案
对于函数,您只需重复装饰器:
@pytest.mark.webtest
@pytest.mark.slowtest
def test_something(...):
...
如果您想在多个测试中重用它,您应该记住装饰器只是返回装饰物的函数,因此多个装饰器只是一个组合:
def compose_decos(decos):
def composition(func):
for deco in reversed(decos):
func = deco(func)
return func
return composition
all_marks = compose_decos(pytest.mark.webtest, pytest.mark.slowtest)
@all_marks
def test_something(...):
...
或者您可以使用通用组合,例如我的 funcy图书馆有:
from funcy import compose
all_marks = compose(pytest.mark.webtest, pytest.mark.slowtest)
请注意,通过这种方式,您可以编写任何装饰器,而不仅仅是 pytest 标记。
关于python - py.test : Can multiple markers be applied at the test function level?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38335589/