如何获取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
相关产品推荐
相关产品推荐

