技术问询:能否使用Loadrunner关联特定ID并捕获Draft状态的目标ID
LoadRunner关联状态为Draft的特定ID实现方法
当然可以通过LoadRunner实现这个需求,针对你提供的JSON格式响应数据,以下是两种可行的实现方案:
方案一:正则表达式关联(通用兼容所有LoadRunner版本)
这种方法通过正则匹配结合脚本逻辑筛选,适用于所有版本的LoadRunner:
步骤1:提取所有Id和对应状态
在返回该JSON响应的请求之前,添加两个关联函数,分别提取所有Id和对应的GroupSimStatus:
// 提取所有Id web_reg_save_param_ex( "ParamName=AllIds", "LB={\"Id\":", "RB,:\"LatestAsAtYear\"", "Search=Body", "ORD=ALL", LAST); // 提取所有GroupSimStatus值 web_reg_save_param_ex( "ParamName=AllStatuses", "LB=GroupSimStatus\":\"", "RB=\"", "Search=Body", "ORD=ALL", LAST);
步骤2:脚本逻辑筛选Draft状态的Id
在请求执行完成后,通过循环遍历提取到的参数数组,找到状态为Draft对应的Id:
int i; // 遍历所有状态,匹配Draft并保存对应Id for(i=1; i<=atoi(lr_eval_string("{AllStatuses_count}")); i++){ if(strcmp(lr_paramarr_idx("AllStatuses", i), "Draft") == 0){ lr_save_string(lr_paramarr_idx("AllIds", i), "TargetDraftId"); lr_output_message("成功捕获Draft状态的Id:%s", lr_eval_string("{TargetDraftId}")); break; // 如果有多个Draft,可移除break获取全部 } }
方案二:JSON解析函数(LoadRunner 12.5及以上版本适用)
如果你的LoadRunner版本在12.5及以上,支持原生JSON处理函数,这种方法更简洁精准:
在返回JSON响应的请求之前,添加lr_json_get_values函数,通过JSONPath直接筛选目标Id:
lr_json_get_values( "JSONPath=$.[?(@.GroupSimStatus=='Draft')].Id", "SourceBuffer=Response", // 若响应已保存到参数中,可替换为SourceParam=响应参数名 "ParamName=DraftId", LAST);
其中$.[?(@.GroupSimStatus=='Draft')].Id是JSONPath表达式,作用是遍历响应数组中的每个对象,筛选出GroupSimStatus为Draft的对象,并提取其Id值。
注意事项
- 所有关联函数必须放在获取目标响应的请求之前,LoadRunner采用预捕获机制,提前设置规则才能捕获到响应数据。
- 若存在多个Draft状态的对象,正则方法中可移除循环的
break语句,JSON方法会自动返回多个结果,可通过{DraftId_count}获取数量,遍历使用lr_paramarr_idx("DraftId", i)调用。 - 可通过LoadRunner的“关联规则录制”功能辅助验证正则表达式的匹配准确性。
内容的提问来源于stack exchange,提问作者afirdaus04
相关产品推荐
相关产品推荐

