如何通过属性文件按用户设置执行JMeter中的指定API?
更优解决方案推荐
方案一:全局JSR223 PreProcessor统一控制请求跳过
这是最简洁高效的方式,无需为每个API单独配置控制器,仅需一个全局预处理脚本即可实现批量控制:
- 对齐API名称与属性键:确保测试计划中每个API请求的名称,与属性文件里对应的开关键完全一致(比如属性
API1对应名称为API1的HTTP请求)。 - 添加全局预处理脚本:在Thread Group节点下添加一个
JSR223 PreProcessor(所有子API请求会自动继承这个逻辑),脚本内容如下:// 获取当前请求的API名称 def currentApiName = sampler.getName() // 从属性文件读取该API的启用状态,默认false def shouldExecute = props.get(currentApiName, "false") // 若状态不为true,直接跳过当前请求 if (!shouldExecute.equalsIgnoreCase("true")) { sampler.setSkip(true) } - 验证效果:运行脚本时,属性值为
false的API会被自动跳过,无需额外配置。
方案二:循环控制器+Switch Controller批量执行启用的API
如果需要更灵活地控制API执行顺序或批量管理,可采用此方案:
- 收集启用的API列表:在Thread Group最前端添加
JSR223 Sampler,脚本用于筛选属性值为true的API:def enabledApis = [] // 遍历所有属性,筛选出以API开头且状态为true的项 props.each { key, value -> if (key.startsWith("API") && value.equalsIgnoreCase("true")) { enabledApis.add(key) } } // 将启用的API列表存入JMeter变量,用逗号分隔 vars.put("ENABLED_APIS", enabledApis.join(",")) - 遍历启用的API:添加
ForEach Controller,设置Input variable prefix为ENABLED_APIS,Output variable name设为CURRENT_API。 - 匹配执行对应API:在ForEach Controller下添加
Switch Controller,设置Switch Value为${CURRENT_API},然后将所有API请求移到Switch Controller下(确保请求名称与属性键一致)。
运行时,ForEach Controller会遍历所有启用的API,Switch Controller自动执行对应的请求。
内容的提问来源于stack exchange,提问作者SAIR
相关产品推荐
相关产品推荐

