python - py.test : Can multiple markers be applied at the test function level?

标签 python pytest markers

我从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/

相关文章:

python - 如何从列表中删除项目中存在部分匹配项的项目

python - 使用 pytest 记录成功的测试用例断言

python-3.x - Python unittest.mock google storage - 如何实现 exceptions.NotFound 作为副作用

python - 如何在代表相同标签的每个标记上方设置标题

python - 如何将字符串拆分为单词列表?

python - 根据 DataFrame 列将数据分组为集群

java - 将 JUnit 样式的 XML 测试输出渲染为 HTML

javascript - Google Maps API v3 javascript 标记并不总是加载

javascript - Mapbox: map 外部的标记导航链接

python - 如何返回 top-n 概率及其相关类别?