Jmeter之BeanShell使用(全网最详细的介绍)-第九天

一.什么是BeanShell

  • Java写成的⼩型、免费的Java源代码解释器
  • 可以执⾏标准Java语句和表达式,完全符合java语法的java脚本语⾔(需要会javase语⾔)
  • 包括⼀些脚本命令,有⾃⼰的⼀些语法和⽅法,是⼀种松散类型的脚本语⾔(这点和JS类似)
  • ⽤于⼀些复杂的个性化需求,使⽤更灵活,功能更强⼤
  • 官⽹地址:http://www.beanshell.org

二.常用的BeanShell


Jmeter中包含如下BeanShell:
定时器:BeanShell Timer
前置处理器:BeanShell PreProcessor(提前对参数处理⽐如加密编码)
采样器:BeanShell 取样器
后置处理器:BeanShell 后置处理程序(对返回结果做处理)
断言:BeanShell断言(验证请求接⼝是否满⾜要求)
监听器:BeanShell监听器

 三.BeanShell内置对象,可以直接使⽤



3.1log

  • 作用:用于日志记录
  • 示例:

创建线程组-创建BeanShell取样器-编写脚本

打开日志(用于调试脚本)

 运行结果

 3.2vars

vars是用来操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(类似于java中的Map),它是测试用例与BeanShell交互的桥梁,常用方法:

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

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

例:vars.get("title");从jmeter中获得变量值

vars.put("title","javase课程");数据存到jmeter变量中

3.3props

props是操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。  

3.4prev

prev:获取前面的sample返回的信息

prev的常用方法:

a) getResponseDataAsString():获取响应信息

b) getResponseCode() :获取响应code

四.实际运用场景

4.1项目环境准备

请先装好jdk和jmeter

windows环境可参考ant+jmeter+jenkins从0实现持续集成(包含jdk的安装教程)(Windows)-CSDN博客

linux环境可参考

Linux下安装jdk,jmeter,ant,tomcat,jenkins(超详细超全)_linux 安装ant-CSDN博客

4.2运行代码

我们这边提供了后端程序,直接本地启动运⾏即可

本人在windows下运行进行演示

如有需要上图的文件,可自行在资源中下载或者私信我!!!

 后端接⼝说明,端⼝8080

接⼝介绍接⼝路径参数和备注method
商品列表/api/v1/product/list不⽤参数get
登录接⼝/api/v1/user/login{"mail":"794666918@qq.com","pwd":"123456"}post
⽤户信息/api/v1/user/info需要登录,http的header⾥⾯加⼊token字段get
秒杀接⼝/api/v1/product/second_kill不⽤参数,⽤于测试接⼝耗时情况get
商品详情/api/v1/product/detail⽤于可变参数压测,参数:id和title

get

秒杀接口的代码讲解

注意:

  • 登录账号密码,程序⾥⾯只提供⼀个,所以需要按照上⾯进⾏操作
  • 常规就是get、post压测,1个接⼝到100个接⼝都类似
  • java -jar xdclass-edu.jar启动不能关闭,是运⾏程序

命令⾏进⼊程序所在路径启动(win、mac、linux命令自⾏参考下)

java -jar xdclass-edu.jar

运行代码

 

 想停止代码运行的话,可ctrl+c

验证代码是否运行成功,访问商品列表接口

4.3Http取样器和BeanShell组合应⽤实战

BeanShell取样器⾥⾯定义变量var

定义Http取样器(用商品详情接口)

读取var变量

引用变量的格式:

${id}、${title}

运行结果

 脚本如有需要,可在资源中自行下载

4.4BeanShell断⾔实战

需求

根据业务结果,⾃定义响应断⾔

步骤

新增BeanShell断⾔

核⼼变量

String data = prev.getResponseDataAsString();//获取响应信息

prev.getResponseCode(); //获取响应code

Failure = false;//表示断⾔成功

Failure = true;//表示断⾔失败

使⽤JSON⼯具jar包放⼊jmeter⽬录下的\lib\ext中(记得重启jmeter)

更多api参考https://stleary.github.io/JSON-java/org/json/JSONObject.html

import org.json.*;//导入json工具包
String data = prev.getResponseDataAsString();//获取响应信息
String responseCode = prev.getResponseCode();//获取http响应码
log.info("data="+data);//data是字符串类型,你要转成json类型
log.info("responseCode="+responseCode);//responseCode也是字符串类型
JSONObject jsonobj = new JSONObject(data);//转json对象

log.info(jsonobj.toString());

打开日志(选项-日志查看),查看BeanShell断言打印出来的内容 

 http请求

BeanShell 预处理程序

 BeanShell断言

运行结果

 

注意:如果想模拟断言失败的情况,把BeanShell断言的条件改为 code==1

再运行,就会报错

运行结果

4.5BeanShell使⽤外部Java⽂件实战

需求

  • 常规beanshell⾥⾯写代码,适合简单的逻辑
  • ⼯作⾥⾯还会⽤到更多⽅法逻辑,需要在idea编辑器⾥⾯写(语法有提示),然后进⾏调⽤
  • ⽅式
  1. jar包:放到的lib⽬录或ext⽬录下,前⾯演示过json⼯具类操作
  2. java⽂件

步骤

  • 使⽤source加载源码,路径可以是绝对路径和相对路径
  • 加载源⽂件后可以直接使⽤类名.⽅法名(参数) 

实战

CommonUtil.java文件内容

新建BeanShell取样器

source("E:\\愤怒吧小鸟\\小滴课堂\\6章-第6小节\\CommonUtil.java");
String randomCode=CommonUtil.getRandomCode(4);//调用外部CommonUtil.java的类和方法
log.info("randomCode="+randomCode);
String uuid = CommonUtil.generateUUID();
log.info("uuid====="+uuid);

点击运行,查看日志(选项-查看日志)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

布凡哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值