玩转jmeter:beanshell必备技能
beanshell是什么
BeanShell是一个小型嵌入式Java源代码解释器,具有对象脚本语言特性,能够动态地执行标准JAVA语法,并利用在JavaScript和Perl中常见的的松散类型、命令、闭包等通用脚本来对其进行拓展。BeanShell不仅仅可以通过运行其内部的脚本来处理Java应用程序,还可以在运行过程中动态执行你java应用程序执行java代码。因为BeanShell是用java写的,运行在同一个虚拟机的应用程序,因此可以自由地引用对象脚本并返回结果。(摘抄自网络)
下载及运行
下载地址:https://beanshell.github.io/download.html

java -jar直接运行

测试

其它方式启动:先把jar包加入到环境变量

界面UI方式 :java bsh.Console



命令行方式 :java bsh.Interpreter
运行脚本文件:java bsh.Interpreter filename [args]
第二个例子

运行结果
如果jar包没加到环境变量,可以这样运行:java -classpath %CLASSPATH%;bsh-2.0b4.jar bsh.Interpreter test.txt

常用命令
print() 输出内容到命令行中
source()读一个bsh脚本到当前解释器(interpreter)中,或者在新的解释器中运行这个脚本
而我们的jmeter中,已经自带了jar包,下面介绍jmeter中如何使用beanshell

添加变量

引用变量

发送请求,可以看到密码加密了

自定义函数
上面也可以封装为函数
下面方法返回类型为void
import org.apache.commons.codec.digest.DigestUtils;
public static void fun(){
String password_md5 = DigestUtils.md5Hex("123456");
vars.put("password_md5", password_md5);
}
fun();
下面方法返回类型为String
import org.apache.commons.codec.digest.DigestUtils;
public static String fun(){
String password_md5 = DigestUtils.md5Hex("123456");
print(password_md5); // 在命令行窗口打印结果
return password_md5;
}
String password_md5 = fun();
vars.put("password_md5", password_md5);
也可以写成这样(方法不写返回类型)
import org.apache.commons.codec.digest.DigestUtils;
fun(){
String password_md5 = DigestUtils.md5Hex("123456");
print(password_md5); // 在命令行窗口打印结果
return password_md5;
}
String password_md5 = fun();
vars.put("password_md5", password_md5);

甚至写成这样(定义的变量也没类型)
import org.apache.commons.codec.digest.DigestUtils;
fun(){
String password_md5_res = DigestUtils.md5Hex("123456");
print(password_md5_res); // 在命令行窗口打印结果
return password_md5_res;
}
password_md5 = fun();
vars.put("password_md5", password_md5);
但是还是推荐按照java的方式写,严格定义。
引用java文件、class文件、jar文件
详见微信公众号:全栈测试笔记

常用内置变量
JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互。
log vars prev Failure FailureMessage
具体用法请百度,本篇的示例中也有使用到。
beanshell组件
Jmeter中包括多种BeanShell,用法差不多,只是作用的地方不同。
定时器: BeanShell Timer
前置处理器:BeanShell PreProcessor,提前处理请求参数,如:加密解密等
采样器: BeanShell Sampler
后置处理器:BeanShell PostProcessor,在请求后对返回结果进行处理
断言: BeanShell断言,验证返回结果的正确性
监听器: BeanShell Listener
下面举例几个常用的。
beanshell采样器

引用变量

发送请求,可以看到密码加密了

beanshell前置处理器

beanshell断言
pom依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.49</version>
</dependency>
</dependencies>
代码及打的jar包

把jar包复制到jmeter的lib下ext中,重启jmeter
添加用户定义变量

请求

beanshell前置处理器,加密密码

beanshell断言

完整脚本
import com.uncleyong.JsonToJSONObject;
import com.alibaba.fastjson.JSONObject; // 不能少,下面定义了JSONObject类型 print("===========开始执行==========");
String exp_result = vars.get("exp_result");
print("exp_result= " + exp_result);
print("exp_result的类型:" + exp_result.getClass().toString()); // exp_result的类型:class java.lang.String
//Integer.valueOf返回的是Integer对象,Integer.parseInt返回的是int
Integer exp_result2 = Integer.valueOf(exp_result);
print("exp_result2的类型:" + exp_result2.getClass().toString()); // exp_result2的类型:class java.lang.Integer String jsonString = prev.getResponseDataAsString();
print("获取到的返回结果:" + jsonString);
print("返回结果的类型:" + jsonString.getClass().toString()); // 返回结果的类型:class java.lang.String JSONObject responseJson = new JsonToJSONObject().JSONObjectUtil(jsonString);
print("转换后的返回结果:" + responseJson);
print("转换后的返回结果类型:" + responseJson.getClass()); // 转换后的返回结果类型:class com.alibaba.fastjson.JSONObject String code = responseJson.getString("code");
print("code = " + code);
print("code的类型:" + code.getClass()); // code的类型:class java.lang.String
Integer code2 = responseJson.getInteger("code");
print("code2 = " + code2);
print("code2的类型:" + code2.getClass()); // code2的类型:class java.lang.Integer //if (code.equals(exp_result)==false) {
if (code2 != exp_result3) {
print("--------进入if语句--------");
Failure = true;
FailureMessage = "code与实际值不一致,期望值" + exp_result + ", 实际值" + code;
}
print("===========结束执行==========");
运行结果



手把手实践
《jmeter对接口测试入参进行MD5加密的5种方式》,详见微信公众号:全栈测试笔记
https://www.cnblogs.com/uncleyong/protected/p/9429752.html
《性能测试:jmeter中通过beanshell把关联转变成参数化》
https://www.cnblogs.com/uncleyong/p/10986466.html
玩转jmeter:beanshell必备技能的更多相关文章
- Android高工必备技能
转载:http://www.jianshu.com/p/d791bbede02c Step 1. 玩转RxJava 使用RxJava处理异步极其方便,各种操作符可以对数据做流水线式操作,再加上与Ret ...
- 高级Linux运维工程师必备技能(扫盲篇)
高级Linux运维工程师必备技能(扫盲篇) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在了解文件系统之前,我们要学习一下磁盘存储数据的方式,大家都知道文件从内存若要持久化存储的 ...
- JMeter BeanShell示例
翻译:https://blog.trigent.com/jmeter-blog-series-jmeter-beanshell-example 在这个例子中,我们将演示在Apache JMeter中使 ...
- JMeter博客系列:JMeter BeanShell示例
1.简介 Apache JMeter是一个基于Java的开源工具,使您可以在应用程序上执行功能,负载,性能和回归测试.应用程序可以在Web服务器上运行,也可以是独立的.它支持在包含静态和动态资源的客户 ...
- java高并发系列 - 第15天:JUC中的Semaphore,最简单的限流工具类,必备技能
这是java高并发系列第15篇文章 Semaphore(信号量)为多线程协作提供了更为强大的控制方法,前面的文章中我们学了synchronized和重入锁ReentrantLock,这2种锁一次都只能 ...
- Jmeter Beanshell 编程简介
简介 Jmeter除了提供丰富的组件以外,还提供脚本支持,可通过编写脚本来丰富Jmeter,实现普通组件无法完成的功能.Beanshell是一种轻量级的Java脚本语言,完全符合Java规范,并且内置 ...
- 详解linux运维工程师入门级必备技能
详解linux运维工程师入门级必备技能 | 浏览:659 | 更新:2013-12-24 23:23 | 标签:linux it自动化运维就是要很方便的运用各种工具进行管理维护,有效的实施服务器保护 ...
- 自动化部署必备技能—部署yum仓库、定制rpm包
部署yum仓库.定制rpm包 目录 第1章 扩展 - yum缓存 1.1 yum缓存使用步骤... 1 1.1.1 导言... 1 1.1.2 修改配置文件... 1 1.1.3 使用缓存... 1 ...
- 【转帖】系统软件工程师必备技能-进程内存的working set size(WSS)测量
系统软件工程师必备技能-进程内存的working set size(WSS)测量 2018年12月28日 18:43:01 Linuxer_ 阅读数:145 https://blog.csdn.net ...
随机推荐
- win10安装docker并结合Idea2018.1部署springboot项目
一.准备工作 1..工具:win10,idea2018,maven3.5,jdk8 二.win10安装docker 1.win10安装docker:http://www.runoob.com/dock ...
- 团队作业第五次—项目冲刺-Day7
Day7 part1-SCRUM: 项目相关 作业相关 具体描述 所属班级 2019秋福大软件工程实践Z班 作业要求 团队作业第五次-项目冲刺 作业正文 hunter--冲刺集合 团队名称 hunte ...
- java web开发需要注意的地方
java需要注意的 1.字符串值相等比较 c#用双等号(==)来进行 字符串值相等比较.如下: string a="3"; string b="3"; if(a ...
- Java8 新特性 Stream 无状态中间操作
无状态中间操作 Java8 新特性 Stream 练习实例 中间无状态操作,可以在单个对单个的数据进行处理.比如:filter(过滤)一个元素的时候,也可以判断,比如map(映射)... 过滤 fil ...
- HTML+css基础 三大列表
三大列表: 1.无序列表 ul 标签属性type 决定项目符号的类型 disc(实心圆)square (方形) circle 空心圆 里面的子标签是li 2.有序列表 ol t ...
- Web应急:网站首页被篡改
网站首页被非法篡改,是的,就是你一打开网站就知道自己的网站出现了安全问题,网站程序存在严重的安全漏洞,攻击者通过上传脚本木马,从而对网站内容进行篡改.而这种篡改事件在某些场景下,会被无限放大. 现象描 ...
- excel中统计COUNTIFS的值为0
excel中统计COUNTIFS的值为0 个人认为是由于导出的文件里面的字符个数问题 使用 =COUNTIFS(H1:H175,"微信支付") 这个的结果居然是0,找了很多办法 于 ...
- Postman安装使用
下载链接:https://www.getpostman.com/downloads/ 选择下载的版本 postman基础功能介绍 collection在postman里面相当于一个文件夹,可以把同一个 ...
- C# 文件操作总结
一.需求分析 1.将信息记录到本地记事本中. 2.将记录的信息读取出来. 3.计算出某个文件夹下所有后缀名为txt的数量和dll的数量. 4.从网络上下载文件. 二.二话不说上代码 using Sys ...
- EF Core 简单使用介绍
EF Core 是一个ORM(对象关系映射),它使 .NET 开发人员可以使用 .NET对象操作数据库,避免了像ADO.NET访问数据库的代码,开发者只需要编写对象即可. EF Core 支持多种数据 ...