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

getResponseMessage获取响应信息

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

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

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

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<length;i++)

{

    try{

        String tempVar = "getMnExamInfo_" + String.valueOf(i);

        String tempVar2 = vars.get(tempVar);



        if(null != tempVar2)

        {

            getExamRecord +=  "${projectId}" + "," + tempVar2 + ",A;" ;

        }

        else

        {

            log.error("tempVar2是空的,i="+String.valueOf(i));

        }


    }catch(Exception e ){

    vars.put("error",e.getMessage());

    }

}

vars.put("examMnRecord",getExamRecord);

//解决乱码问题

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

 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值