BeanShell是一个小型嵌入式Java源代码解释器,完全兼容java语法。同时beanshell也支持javascript和python的一些语法。
写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);
操作jmeter变量,常用方法:
a) vars.get(String key):从jmeter中获得变量值
b) vars.put(String key,String value):数据存到jmeter变量中
引用了当前线程的上下文,使用方法参考org.apache.jmeter.threads.JMeterContext
操作jmter属性,该变量引用了jmeter的配置信息,可获取jmeter属性,使用方法与vars类似,但是只能put进去string类型的值,不能是对象。一般用于线程组间传递变量。
线程组之间传参
props.put("name","value");添加变量,非临时的,只要添加进去,就保存下来,一直有。
props.remove("name");删除变量
有时线程组间获取不到值:两个线程组同时运行,还没传值就开始取
两种方案:①测试计划中勾选独立运行②线程组,添加setUp Thread Group
prev-SampleResult
获取当前sample返回信息,常用如下:
①getThreadName获取线程名
log.error("getThreadName: " + prev.getThreadName());
②getRequestHeaders获取请求头
log.error("getRequestHeaders: " + prev.getRequestHeaders());
③getUrlAsString获取url并转为string
log.error("getUrlAsString: " + prev.getUrlAsString());
④getSamplerData获取sample数据
log.error("getSampleData: " + prev.getSamplerData());
⑤getSampleLabel获取sample名称
log.error("getSampleLabel: " + prev.getSampleLabel());
⑥getResponseCode获取响应码
log.error("getResponseCode: " + prev.getResponseCode());
⑦getResponseHeaders获取响应头
log.error("getResponseHeaders: " + prev.getResponseHeaders());
⑧getResponseMessage获取响应信息
log.error("getResponseMessage: " + prev.getResponseMessage());
⑨getResponseDataAsString获取响应数据并转为字符串
log.error("getResponseDataAsString: " + prev.getResponseDataAsString());
输出内容到命令行中。
自动显示你打入的每一行。
3)source(),run()
读一个bsh脚本到当前解释器(interpreter)中,或者在新的解释器中运行这个脚本
4)load(),save()
从文件中加载一个序列化对象(serializable object),或者把它保存到文件中
5)cd(),cat(),dir(),pwd(),etc
类似于Unix中的命令
import java.util.*;
import java.text.*;
Date d = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = df.format(d);
log.info("CureentDte:"+str);
vars.put("CureentDte",str);
getDateStr(String format){
DateFormat df = new SimpleDateFormat(format);
return df.format(new Date());
}
dateStr = getDateStr("yyyy-MM-dd");
print(dateStr);
var.put("current_date",dateStr);
①test-beanshell.java文件内容
public class TestBeanShell{
public String hi(String name){
return "Hi,"+name;
}
}
②jmeter beanshell中使用
source("D:\\test-beanshell.java");//只能导入.java文件,转义windows路径需要2个\
TestBeanShell shell = new TestBeanShell();
String getMsg = shell.hi("marly");
log.info(getMsg);
①在eclipse写好代码,然后把该类打成jar包(在类上点击右键->Export->jar file)
②把jar包放到jmeter目录\apache-jmeter-2.13\lib\ext下
③打开jmeter,添加一个http sampler,在sampler下添加一个BeanShell Sampler
④在BeanShell中的头文件中导入该jar包,例import testmail.src.hyq.utils.*
提前处理请求参数,如:图片处理,加密解密、日期处理等。如下是时间处理
import java.text.SimpleDateFormat;
import java.util.Calendar;
Calendar cal = Calendar.getInstance();//使用默认时区时间获取一个日历
SimpleDateFormat df = new SimpleDateFormat("YYYY-MM-dd");
String time1= df.format(cal.getTime());
cal.add(Calendar.DAY_OF_MONTH, +2);
String time2= df.format(cal.getTime());
vars.put("Time1",time1);
vars.put("Time2",time2);
在请求后对返回结果进行处理,如下是在获取到考试试题后的处理,拼接答题记录
import java.lang.reflect.Array;
String getExamRecord = "";
int length = ${getMnExamInfo_matchNr} + 1 ;
for(int i=1;i
//解决乱码问题
prev.setDataEncoding("utf-8");
3)BeanShell断言
验证返回结果的正确性,如下验证noticeId的长度
if("${noticeId}".length() != 36)
{
Failure = true;
FailureMessage = "error";
}
4)BeanShell Sampler
发送beanshell请求,如下是随意写的内容,直接放在beanshell sample下
x=2;
y=x+2;
print("just for test !");//print打印的结果可以在jmeter控制台查看
log.info(y+"");//log只能传字符串变量,log输出内容在日志可直接看
vars.put("name","test20190517");
你可能感兴趣的:(jmeter,jmeter,beanshell)