15-Jmeter-beanshell详解

1、beanshell是什么

BeanShell是一个小型嵌入式Java源代码解释器,完全兼容java语法。同时beanshell也支持javascript和python的一些语法。

2、beanshell常用内置变量

1)log

写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);

2)vars

操作jmeter变量,常用方法:

a) vars.get(String key):从jmeter中获得变量值

b) vars.put(String key,String value):数据存到jmeter变量中

3)ctx

引用了当前线程的上下文,使用方法参考org.apache.jmeter.threads.JMeterContext

4)props

操作jmter属性,该变量引用了jmeter的配置信息,可获取jmeter属性,使用方法与vars类似,但是只能put进去string类型的值,不能是对象。一般用于线程组间传递变量。

线程组之间传参

props.put("name","value");添加变量,非临时的,只要添加进去,就保存下来,一直有。

props.remove("name");删除变量

有时线程组间获取不到值:两个线程组同时运行,还没传值就开始取

两种方案:①测试计划中勾选独立运行②线程组,添加setUp Thread Group

prev-SampleResult

5)prev

获取当前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());

15-Jmeter-beanshell详解_第1张图片

getResponseMessage获取响应信息

log.error("getResponseMessage: " + prev.getResponseMessage());

getResponseDataAsString获取响应数据并转为字符串

log.error("getResponseDataAsString: " + prev.getResponseDataAsString());

15-Jmeter-beanshell详解_第2张图片

3、beanshell常用命令

1)print()

输出内容到命令行中。

2)show()

自动显示你打入的每一行。
3)source(),run()

读一个bsh脚本到当前解释器(interpreter)中,或者在新的解释器中运行这个脚本
4)load(),save()

从文件中加载一个序列化对象(serializable object),或者把它保存到文件中
5)cd(),cat(),dir(),pwd(),etc

类似于Unix中的命令

4、beanshell常见用法

1)添加变量

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);

2)自定义函数

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);

3)引入外部java文件

①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);

4)导入外部jar包

①在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.*

5、beanshell应用

1)BeanShell PreProcessor

提前处理请求参数,如:图片处理,加密解密、日期处理等。如下是时间处理

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);

2)BeanShell PostProcessor

在请求后对返回结果进行处理,如下是在获取到考试试题后的处理,拼接答题记录

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)