常用的后置处理器:
- 正则表达式提取器
- Debug PostProcessor
- BeanShell PostProcessor
1、正则表达式提取器
- 作用:将上一个请求中的一部分发送到下一个请求中,看运行是否成功,也就是jmeter的关联。
- 界面如下:
- 引用名称:下一个请求要引用的参数名称,如填写title,则可用${title}引用它。
- 正则表达式:要提取的正则表达式,()中的是要提取的部分。
注意:如果匹配的内容类似于<a class ='ksks' onclick="start('55645645SDFSDFSDF','5421313SFDGFHGJG')">AAA</a>
,外层括号会影响匹配的正则表达式导致匹配不到。 - 模板:用美元符号引用起来。$1 $代表匹配第一个值,$2 $代表匹配第二个值
- 匹配数字:0代表随机取值,1代表全部取值,通常情况下填0。
- 缺省值:如果参数没有取得到值,那默认给一个值让它取,一般写null。
示例:提取百度页面的title<百度一下,你就知道>
将提取的title应用到另一个请求,由于我本地没有项目,http请求2就是举例,并无实际意义。
2、Debug PostProcessor
- 作用:这个我理解的和Debug Sampler差不多,都是调试用的。
- 界面如下:
- 用法:正则里提取的还是百度的title
3、BeanShell PostProcessor
- 用法和BeanShell Sampler类似。都是写脚本执行。
- 界面如下:
- 使用BeanShell PostProcessor组件获取Response中的内容
代码如下:
- 场景一:获取请求响应中的数据,并保存
import com.alibaba.fastjson.*; // 引入包。这个包需要先放在jmeter的lib文件夹下的ext中。
// 获取数据
String response = prev.getResponseDataAsString(); // 获取Response
JSONObject responseObj = JSON.parseObject(response); // 整个Response作为JSON对象
JSONObject resObj = responseObj.getJSONObject(“res”); // 获取某一部分对象。即,json串中{}的内容
JSONArray listArray = resObj.getJSONArray(“list”); // 获取列表。即,json串中[]的内容
// 保存数据
【列表】
int len = listArray.size();
for(int i=0; i<len; i++){
temp[i] = listArray.get(i).getString(“name”);
}
vars.put(“names”, Arrays.toString(temp)); // 保存到JMeter变量中,vars.put只能保存字符串,因此这里使用了toString()进行转换
【String类型】
String id = resObj.get(“id”); // 获取对象中某一字符串的内容。
vars.put(“id”, id); // 保存到JMeter变量中,后面的组件可以使用
【Integer类型】
Integer no = resObj.get(“id”); // 获取对象中某一整型的内容。
vars.put(“no”, no.toString()); // 保存到JMeter变量中,vars.put只能保存字符串,因此这里使用了toString()进行转换 - 场景二:获取数据库中查询到的数据,并保存
select total_cash from t_cash where user_name=“tom”;
在Result variable name中的值为:result
String cash_new = vars.getObject(“result”).get(0).get(“total_cash”).toString();
vars.put(“cash_new”, cash_new);
示例:
test数据库中有两个表,tab_city表存放cityname和cityid;wea表存放food、cityname和cityid。
在jmeter中创建脚本,我想通过BeanShell PostProcessor把jdbc1返回的cityname用于jdbc2中来查food。需要了解JDBC请求的点击这里哦!
JDBC1:
JDBC2:
执行结果: