PyTest中单个测试的替代标记

时间:2018-11-15 14:28:55

标签: python unit-testing pytest

每个存储的测试都有一个带有全局标记的测试文件:

from pytest import mark

pytestmark = mark.unit

这可以按预期工作,并且该文件中的所有测试都标记为unit。但是,我想为单个测试覆盖该标记,以使其不再具有unit标记。

当我在要修改的测试函数上使用修饰符时,它会覆盖unit和新的integration标记,而不是覆盖原始标记:

@mark.integration
def test_integration():
    pass

我已经检查了标记装饰器的来源,似乎它调用了store_mark,并且没有其他可让我覆盖现有测试标记的属性。

有没有惯用的解决方案来覆盖现有的测试标记,还是应该将测试存储在单独的文件中?

1 个答案:

答案 0 :(得分:2)

我认为没有内置功能。您有几种选择:

实施一个为您提供unmark装饰器的插件。 Someone has already tried this,但我尚未测试。

或将您所有的unit测试放入一个类中,并用标记修饰该类。

import pytest

@pytest.mark.unit
class TestUnits:
    def test1(self):
        pass

@pytest.mark.integration
def integration_test():
    pass