【问题标题】:pytest - How to know what markers are selectedpytest - 如何知道选择了哪些标记
【发布时间】:2020-01-28 05:34:44
【问题描述】:

pytest 有什么方法可以知道从命令行选择了哪些标记?

我有一些标记为“慢”的测试需要大量处理。我只想在标记缓慢被激活的情况下进行治疗。

heavy_var = None

def setup_module(module):
    global heavy_var

    # Need help here!?
    if markers["slow"]:
        heavy_var = treatment()


def test_simple():
    pass


@pytest.mark.slow():
def test_slow():
    assert heavy_var.x == "..."

我如何知道是否选择了慢速标记?当我使用 -m not slow 调用 pytest 时,markers["slow"] 将为 False,否则为 True。

【问题讨论】:

  • 不是真的 - 不是来自 setup_module,它是为了与 nose 和 xUnit 兼容,并且非常有限;不过,您可以用等效的夹具替换它。而不是标记列表/字典 - 只有您从命令行输入的字符串,例如您可以访问not slow 字符串。
  • 那么,我想做的唯一方法就是使用 sys.argv?
  • sys.argv 也只会给你-m 字符串arg,所以你必须自己进行解析。
  • 如果无法使用 pytest(不解析 argv)进行处理,是否只有在激活某些标记的情况下才能进行处理?
  • 哦,当然,这是可能的 - 我太专注于问题标题。让我给你一个例子。

标签: python python-3.x pytest


【解决方案1】:

如果您仅在选择了标记为slow 的测试时才需要运行某些代码,您可以通过在替换setup_module 的模块范围夹具中过滤测试项目来实现。示例:

@pytest.fixture(scope='module', autouse=True)
def init_heavy_var(request):
    for item in request.session.items:
        if item.get_closest_marker('slow') is not None:
            # found a test marked with the 'slow' marker, invoke heavy lifting
            heavy_var = treatment()
            break

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多