jmeter 获取jdbc request 返回的多行数据
场景:
jdbc request 查询结果为多行数据。获取这些数据并返回
1、建立JDBC Connection Configuration 连接
2、创建jdbc request,查询sql如下:
SELECT 'VEHICLE_SUB_MODEL_ID='|| '"' || t.VEHICLE_SUB_MODEL_ID ||'"' FROM t_md_vehicle_model t WHERE t.TIMING_ID in (${tidStr}) AND ((t.BEGIN_YEAR <= ${year} and t.END_YEAR is null) or (t.BEGIN_YEAR is null and t.END_YEAR >= ${year}) or (t.BEGIN_YEAR <= ${year} and t.END_YEAR >= ${year}))
注1:上述sql中,'VEHICLE_SUB_MODEL_ID='|| '"' || t.VEHICLE_SUB_MODEL_ID ||'"' ,返回的结果,格式如下:
jdbc request 1注2:如果直接这样:SELECT t.VEHICLE_SUB_MODEL_ID FROM t_md_vehicle_model t WHERE t.TIMING_ID in (${tidStr}) ,返回的结果,格式如下:
jdbc request 23、好了,上面已经得到查询结果,接下来需要将响应的数据中的VEHICLE_SUB_MODEL_ID 提取出来。
新增正则表达式提取器,设置如下:
其中引用名称model,后续传参要用到,因为上面的jdbc request响应数据已经被格式化,所以正则表达式直接用 字段名="(.+?)"的格式
正则表达式1如果采用注2中的sql进行查询,正则表达式的格式需要这样:字段名\n([^"]+)
正则表达式24、上一步将VEHICLE_SUB_MODEL_ID 提取后,察看结果树中 数据的个数为24个
察看结果树通过获取model的个数,分别提取每一个modelId.
新增一个BeanShell PostProcessor,先获取model的个数,然后通过for循环 ,拼接model_n,加入到list中
将list转化成字符串,并输出
BeanShell PostProcessorString model_num =vars.get("model_matchNr");
int num = Integer.parseInt(model_num);
log.info("车型ID个数:"+num);
List list = new ArrayList();
for(int i=1;i<=num;i++){
String ss ="model_"+i ;
String modelId = vars.get(ss);
//log.info("model is :"+ ss);
log.info("model is :"+ modelId);
list.add(modelId);
}
log.info("可用的款型个数为:"+list.size());
StringBuilder csvBuilder = new StringBuilder();
for(String i:list){
csvBuilder.append(i);
csvBuilder.append(",");
}
String csv = csvBuilder.toString(); //保存VMI组件结果,供后续比较使用
csv = csv.substring(0,csv.length()-1);
vars.put("VMI2Result",csv);
log.info("可用款型分别为:"+vars.get("VMI2Result")+"\n");