同线程组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获取布尔值等

如何查看有哪些变量

更多推荐