jmeter学习(4)提取器
同线程组https://blog.csdn.net/vikeyyyy/article/details/80437530
不同线程组
在JMeter中,正则表达式提取的参数可以跨线程组使用。 通过使用Beanshell后置处理器和属性设置函数,可以将提取的参数设置为全局变量,从而在多个线程组之间共享这些参数。
https://mp.weixin.qq.com/s/4X_WCeVWDkiXXX_YWlPnDg

1)正则表达式提取

引用名称(Reference Name):Jmeter变量的名称,存储提取的结果;即下个请求需要引用的值、字段、变量名(例子中我提取的是SOCIAL_NO)
正则表达式(Regular Expression):使用正则表达式解析响应结果,“()”表示提取字符串中的部分值,请不要使用“||”,除非你本身需要匹配这个字符。
模板:代表从正则表达式结果引用的样式,其实结果是一组,而不是一个。$0$代表这一组结果的全部,$1$代表这一组结果的第1个,以此类推;$1$$2$代表该正则表达式一组结果中的第1个和第2个,俩结果挨在一起中间没有间隔;$3$,$4$代表该正则表达式一组结果中的第3个和第4个,俩结果间有一个逗号相连。
匹配数字:0代表正则表达式结果组中随机,1代表全部。
缺省值:当引用不对时显示传递的信息,通常写一个ERROR。
表达式注意空格!!!
2)json提取
位置:在线程组中,则位置随意,保证接受参数的请求在获取参数请求后面就行;在获取请求下



提取是列表

match numbers -1是提取全部,0是随机,1是第一个
使用方式是deviceID_1,deviceID_2,这种
如果想做过滤处理,比如只取productcode为CS0003X00的deviceid则需要beanshell
import org.apache.jmeter.config.Arguments;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
//获取响应报文
String response=prev.getResponseDataAsString();
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode=mapper.readTree(response);
total=rootNode.get("payload").get("total").asText();
size = Integer.parseInt(total);
if (size >9){
log.info("=====大于10=====");
for(int i = 0;i<=9;i++){
String deviceId1=rootNode.get("payload").get("records").get(i).get("deviceId").asText();
String productCode1=rootNode.get("payload").get("records").get(i).get("productCode").asText();
log.info("==========取到的deviceId值:"+deviceId1);
log.info("==========取到的productCode值:"+productCode1);
// String want = vars.get(productCode);
// log.info("==========want的productCode值:"+productCode);
if(productCode1.contains("CS0003X00")){
vars.put("deviceID_"+i ,deviceId1);
}
}
}else{
log.info("=====小于10=====");
for(int i = 1;i<=total;i++){
String deviceId1=rootNode.get("payload").get("records").get(i).get("deviceId").asText();
String productCode1=rootNode.get("payload").get("records").get(i).get("productCode").asText();
log.info("==========取到的deviceId值:"+deviceId1);
log.info("==========取到的productCode值:"+productCode1);
// String want = vars.get(productCode);
// log.info("==========want的productCode值:"+productCode);
if(productCode1.contains("CS0003X00")){
vars.put("deviceID_"+i ,deviceId1);
}
}
}
//vars.put("code",code);
3)beanshell 提取
jmeter后置处理器之BeanShell PostProcessor - qiaoli - 博客园 (cnblogs.com)
jmeter BeanShell 后置处理器 - 三只松鼠 - 博客园 (cnblogs.com)
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
String response = prev.getResponseDataAsString();
log.info("~~~~~~~~~~~~~~~~~~~打印响应报文1"+ response);
//System.out.println("response:"+response)
JSONObject jso = JSON.parseObject(response);
log.info("~~~~~~~~~~~~~~~~~~~打印响应报文2"+jso);
JSONObject data = jso.getJSONObject("data");
//String tmp1 = jso.getJson("data")
log.info("~~~~~~~~~~~~~~~~~~~打印响应报文3"+data);
JSONObject nlpResult = data.getJSONObject("nlpResult");
log.info("~~~~~~~~~~~~~~~~~~~打印响应报文4"+ nlpResult);
String userQuery =nlpResult.getString("userQuery");
log.info("~~~~~~~~~~~~~~~~~~~打印响应报文5"+ userQuery);
vars.put("userQuerynew",userQuery)
用到fastjson 需要下载jar包,放到lib/ext
获取着将路径在test plan 加到classpath

获取json jsonObject.getJSONObject
获取数组 jsonObject.getJSONArray
获取string jsonObject.getString
使用getString获取字符串值,getInt获取整数值,getDouble获取浮点数值,getBoolean获取布尔值等
如何查看有哪些变量


更多推荐


所有评论(0)