JMETER与BeanShell
变量
Beanshell应用自定义变量有两种方法:
#第一种方法,使用${key}格式,但是需要注意这是用应用的变量是没有定义数据类型的 #log.info(String Key)只能打印字符串,所以按下述写法会报错 name = ${name}; log.info(name); #需要改成 name1 = "${name}"; log.info(name1);
#第二种使用vars.get(String key),这里需要注意应用的变量需要加上引号 name3 = vars.get("name");
把变量A赋值给变量B
#这时候+号拼接完就是字符串了 int a = 123; b = "abc" + a; log.info(b); #注意put赋值给的变量需要加上引号vars.put(String key,String value) vars.put("c",b); log.info(vars.get("c"));
区别:
${key}
引用的都是最开始设置的自定义变量。vars.get
会获取最新变量
name = "${name}"; vars.put("name",name + 123); log.info("vars.get获取变量:" + vars.get("name")); // vars.get获取变量:xiaojianjian123 log.info("${}获取变量:" + "${name}") // ${}获取变量:xiaojianjian
实例:
我们现在有一个自定义变量设置在线程组里,cnt初始值为0,循环10次,每次循环我们需要让cnt+1
cnt = "${cnt}"; nextCnt = Integer.parseInt(cnt) +1; log.info("第一种整型转字符串:" + nextCnt.toString()); //log.info("第二种整型转字符串:" + String.valueOf(nextCnt)); vars.put("cnt",nextCnt.toString())
这里我们需要将字符串先转数字,再将数字转回字符串
这里要特别注意:
写BeanShell的时候不要使用Debug sampler,因为Debug sampler会再次调用一次BeanShell造成错误多次计算,正式运行的时候记得禁用Debug sampler
跨线程取值
A线程拥有一个用户自定义变量,这是B线程使用vars.get
同样可以取到值,但是如果实在A线程的BeanShell
中设置的变量用vars
就取不到了
//BeanShellTestElement: null002 取上一个线程的BeanShell变量 name = vars.get("name"); log.info(name+"002");
//BeanShellTestElement: xiaojianjian001002 取上一个线程的用户自定义变量 name = vars.get("name"); log.info(name+"002");
那如果要取上一个线程的BeanShell变量就需要用props
//A线程 name = "xiaojianjian"; props.put("name1",name); //B线程 BeanShellTestElement: xiaojianjian002 name = props.get("name1"); log.info(name+"002");
通过使用假接口来将脚本简化
安装JMETER插件Dummy Sampler
有了这个模拟器后,就可以根据它代替很多真实接口
那我们有了接口同样可以通过BeanShell去获取它的请求和响应
在接口下添加一个BeanShell后置处理器(以上面Dummy的取样器为例子)
// print request data log.info(prev.getSamplerData()); // https://www.123321.com // print response data log.info(prev.getResponseDataAsString()); // {"data":1} // print response code log.info(prev.getResponseCode()); //200
条件判断
与其他语言类似
1)比较相等用equals、==、!=
2)比较大小用>、<、>=、<=
3) 包含关系contains
// 判断状态码是否为200 resCode = prev.getResponseCode(); log.info("响应码:"+resCode); if (resCode.equals("200")){ log.info("请求成功"); } else{ log.info("请求失败"); }
// age1是之前的接口提取出来的变量 age = vars.get("age1"); log.info(age); if (Integer.parseInt(age) > 14){ log.info("已经不是小孩子:"+age); } else{ log.info("年龄小于14" + age); }
age = vars.get("age1"); if (!age.contains("1")){ log.info("不包括1"); } else{ log.info("包括1"); }
对list的相关操作
// 对于list的操作 import java.util.List; import java.util.ArrayList;
创建一个list
// 创建一个list List list1 = new ArrayList();
// 添加元素:add list1.add("first"); // 在指定位置插入元素 list1.add(0,"l am the first"); log.info("添加后"+list1); // 添加后[l am the first, first]
除了使用add我们还可以使用addAll的方法
// 创建一个list2 List list2 = new ArrayList(); // 把list1所有的元素添加到list2中,成功同时返回True,失败返回False,addAll(index,list); Boolean isAdd = list2.addAll(0,list1); log.info("是否加入成功:"+ isAdd + " 加入后的list2"+list2); //是否加入成功:true 加入后的list2[l am the first, first]
根据索引找值,根据值返回第一个匹配到索引
// 获取list中的值 value1 = list2.get(0); log.info(value1); // l am the first // 获取list中值对应的第一个索引 List list3 = new ArrayList(); list3.add(1); list3.add(2); list3.add(1); log.info(list3.indexOf(1).toString()); // 0
返回list的长度
//返回list长度 log.info(list3.size().toString()); // 3
循环list取值
//for循环取值 for(int i=0 ; i < list3.size();i++){ log.info(list3.get(i).toString()); }
友情链接:
作者: yetangjian
出处: https://www.cnblogs.com/yetangjian/p/16815968.html
关于作者: yetangjian
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(yetangjian@outlook.com)咨询.