一、相关组件
定时器: BeanShell Timer
前置处理器:BeanShell PreProcessor
采样器: BeanShell Sampler
后置处理器:BeanShell PostProcessor
断言: BeanShell断言
监听器: BeanShell Listener
二、引用
1)、jar引用
测试计划中添加jar包
1、使用的jar包需先放入jmeter/lib/ext文件夹中
2、放置jar包后jmeter需重启
2)、非jar包引用
1、java文件
如下:
package test;
public class Myclass
{
public int add(int a, int b)
{
return a + b;
}
}
java中双斜线输入后是单斜线
2、class文件
“javac+文件”将java文件转换为class文件
1、public class定义类和class定义类时: 如果一个类声明的时候使用了public class进行了声明,则类名称必须与文件名称完全一致。 如果类的声明使用了class的话,则类名称可以与文件名称不一致,但是执行的时候,执行的是生成后的名称【HelloJava】。
2、文件声明上: 在一个*.java的文件中,只能有一个public class的声明,但是允许有多个class的声明
3、class文件与原java文件放置同一目录下
3)、直接引用
在其它组件中设置参数
引用多个时每个引用参数间用空格隔开
1、传入参数引用
2、直接${}引用
三、常用内置方法
1)、vars、props
字符三种转换形式:
vars.put("aaaa","111".toString());
vars.put("aaaaa", "" + 1);
vars.put("aaaaaa", (String)"1");
vars和props的区别:
1、vars 只能保持String 或者Objec, props 是 Hashtable 对象
2、vars 只能在当前线程内使用,props 可以跨线程组使用
2)、log
设置信息显示在日志中,便于定位错误信息
3)、prev
获取当前线程组中的返回信息
放在请求下一层,如果与请求同层则取值为空
prev表示当前线程
四、后置处理
处理返回信息{“body”:{“apps”:[{“name”:”111”},{“name”:”222”}]}}提取name值,代码如下:
import org.json.*;
String response_data = prev.getResponseDataAsString();
vars.put("response_data",response_data);
JSONObject data_obj = new JSONObject(response_data);
String apps_str = data_obj.get("body").get("apps").toString();
vars.put("apps_str",apps_str);
JSONArray apps_array = new JSONArray(apps_str);
String[] result = new String[apps_array.length()];
vars.put("result",result);
for(int i=0;i
String name = app_obj.get("name").toString();
result[i] = name;
}
vars.put("result", Arrays.toString(result));
五、断言
对值进行比较,代码如下:
if(!"${ip}".equals("119"))
{
Failure = true;
FailureMessage = "error, check";
}
else
{
FailureMessage = "ok!";
}