jmeter前后置beanshell常用内置函数
- BeanShell PreProcessor 前置处理器特有函数:(在发送请求之前运行)
①. 获取本次请求的入参body中的内容
导包
import org.apache.jmeter.config.Arguments; //jmeter4.0及以上自带,需导包一次
Arguments argss = sampler.getArguments();
String argss_str = argss.getArgument(0).getValue();
②. 获取本次请求的api路径
String path = sampler.getPath();
- BeanShell PostProcessor 后置处理器特有函数:(在返回响应之后运行)
①. 获取本次请求的响应内容
String responseCode = prev.getResponseCode();
String responseData = prev.getResponseDataAsString();
String responseMessage = prev.getResponseMessage();
②.指定本次响应的内容
prev.setResponseCode("200");
prev.setResponseData("你好","UTF-8");
prev.setResponseMessage("随便写");
- json字符串类型转为json对象类型
①. 阿里的 fastjson-1.2.70 jar包
导包
import com.alibaba.fastjson.*; //下载 fastjson-1.2.70 jar包,放到lib目录后重启jmeter可用
JSONObject JsonObj= JSON.parseObject(JsonStr)
②. org.json_1.0.0.v 版本jar包
导包
import org.json.*;
JSONObject JsonObj= new JSONObject(JsonStr);
- 获取json对象中的对象,数组,字段
eg:
JsonObj:{
keyinfo:{
"documentno": "PYJK20200106123456789"
},
dealinfo:[{
"businesscode": "N99"
},
{
"businesscode": "N98"
}]
}
以阿里巴巴包为例
JSONObject keyinfo = JsonObj.getJSONObject("keyinfo"); //获取json对象中的对象
String documentno = JsonObj.getJSONObject("keyinfo").getString("documentno"); //获取json对象中的字段值
JSONArray dealinfo = JsonObj.getJSONArray("dealinfo"); //获取json对象中的数组
JSONObject keyinfo = JsonObj.getJSONArray("dealinfo").getJSONObject(0); //获取json数组中的对象,索引表示第几个对象
String businesscode = JsonObj.getJSONArray("dealinfo").getJSONObject(0).getString("businesscode"); //获取数组中对象的字段值
- 设置变量,只能是字符串类型的值(变量存储在jmeter内存中)
①. 设置局部变量(作用于单个线程组)
vars.put("a", "123"); //设置变量a 为123
vars.put("documentno", documentno); //将变量documentno 设置为局部变量
vars.put("keyinfo", keyinfo.toString()); //将对象keyinfo转为字符串设置为局部变量
②获取局部变量 (在同一个线程组中可获取到)
String a = vars.get("a"); //a="123"
String documentno = vars.get("documentno"); //documentno="PYJK20200106123456789"
JSONObject keyinfo = JSON.parseObject(vars.get("keyinfo")); //将获取的keyinfo字符串转为对象
③. 设置全局变量(作用于测试计划下的所有线程组)
props.put(); //用法与局部变量函数vars.put() 一致
③. 获取全局变量(测试计划下的所有线程组均可获取到)
String a = props.get("a"); //用法与局部变量函数vars.get() 一致
- 组建变量大对象VO
①. 新建对象
JSONObject keyinfo = new JSONObject();
②. 向对象中增加key-value
keyinfo.put("documentno", "PYJK20200106123456789");
③. 新建数组
JSONArray dealinfo = new JSONArray();
④. 向数组中增加对象,字段 ( 有先后顺序,索引 0,1,2。。)
dealinfo.add(dealinfo);
dealinfo.add(dealinfo);
dealinfo.add("aa"); //增加字段
⑤. 向对象中增加对象,数组
JSONObject VO = new JSONObject();
VO.put("keyinfo", keyinfo);
VO.put("dealinfo", dealinfo);
-
以ASSIC码排序的JSONObject(),向JSONObject()对象中put的key-value,自动以ASSIC码排序,不以代码先后顺序排序。若想以固定顺序排列,可在新建对象时,使用new JSONObject(new LinkedHashMap()),具体原因这里不做阐述,如有想了解的朋友可以搜索map和LinkedHashMap之间的区别。
-
比较两个对象是否相等
以阿里巴巴jar包为例
import com.alibaba.fastjson.*;
public isObjValEqual(a_obj, b_obj){
Object a_key = a_obj.keySet(); //获取a对象中的所有键key,组成数组集合
Object b_key = b_obj.keySet(); //获取b对象中的所有键key,组成数组集合
Object key_list = maxArray(a_key, b_key); //获取长度大的数组集合
for(Object key : key_list){ //遍历每一个键key
String a_value = a_obj.get(key); //获取key对应的值
String b_value = b_obj.get(key);
if(!a_value.equals(b_value)){
log.info("两个对象中的"+key+"对应的值不一致");
return false;
}
}
return true;
}
- hash256,md5算法函数
import org.apache.commons.codec.digest.DigestUtils; //下载org.apache.commons.codec_1.3.0.v 版本包
String md5 = DigestUtils.md5Hex(str).toLowerCase(); //Upper大写,Lower小写
String hash256= DigestUtils.sha256Hex(str).toLowerCase();
10.Jmeter主要组件及执行顺序
在同一作用域名范围内,测试计划中的元件按照以下顺序执行:
①配置元件(configelements)
②前置处理程序(Per-processors)
③定时器(timers)
④取样器(Sampler)
⑤后置处理程序(Post-processors)(除非Sampler得到的返回结果是空)
⑥断言(Assertions)(除非Sampler得到的返回结果是空)
⑦监听器(Listeners)(除非Sampler得到的返回结果是空)