You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取pytest中指定测试函数关联的所有标记?

如何在pytest中获取测试函数的所有关联标记

当然可以实现,核心是借助pytest内置的request fixture获取测试上下文,进而拿到所有层级的标记。

直接修改你的测试函数,实现代码如下:

import pytest

pytestmark = [pytest.mark.module_marker]


@pytest.mark.class_marker
class TestClassA:
    @pytest.mark.func_marker
    def test_do_some_stuff_based_on_markers(self, request):
        # 收集所有层级的标记名称
        all_marker_names = [marker.name for marker in request.node.iter_markers()]
        # 可选:去重(如果存在重复标记的情况)
        all_marker_names = list(set(all_marker_names))
        
        # 这里可以执行你需要的操作,比如打印标记
        print(all_marker_names)  # 输出:['module_marker', 'class_marker', 'func_marker']

关键说明:

  • request是pytest自带的fixture,必须作为参数注入测试函数,它提供当前测试的完整上下文信息。
  • request.node指向当前测试的节点对象(这里对应你的测试函数),iter_markers()方法会递归遍历并返回模块、类、函数所有层级的标记,不需要手动分别收集各层级的标记。
  • 每个marker对象除了name(标记名称),还包含args和kwargs,可以用来获取标记的附加参数(比如自定义标记的参数)。

如果需要获取标记的更详细信息(比如标记定义的位置),可以扩展逻辑:

def test_do_some_stuff_based_on_markers(self, request):
    marker_details = []
    for marker in request.node.iter_markers():
        marker_details.append({
            "name": marker.name,
            "location": marker.location,  # 标记定义的位置(模块、类、函数路径)
            "args": marker.args,
            "kwargs": marker.kwargs
        })
    print(marker_details)

内容的提问来源于stack exchange,提问作者He David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 20:25:17