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必备技能的更多相关文章

  1. Android高工必备技能

    转载:http://www.jianshu.com/p/d791bbede02c Step 1. 玩转RxJava 使用RxJava处理异步极其方便,各种操作符可以对数据做流水线式操作,再加上与Ret ...

  2. 高级Linux运维工程师必备技能(扫盲篇)

    高级Linux运维工程师必备技能(扫盲篇) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在了解文件系统之前,我们要学习一下磁盘存储数据的方式,大家都知道文件从内存若要持久化存储的 ...

  3. JMeter BeanShell示例

    翻译:https://blog.trigent.com/jmeter-blog-series-jmeter-beanshell-example 在这个例子中,我们将演示在Apache JMeter中使 ...

  4. JMeter博客系列:JMeter BeanShell示例

    1.简介 Apache JMeter是一个基于Java的开源工具,使您可以在应用程序上执行功能,负载,性能和回归测试.应用程序可以在Web服务器上运行,也可以是独立的.它支持在包含静态和动态资源的客户 ...

  5. java高并发系列 - 第15天:JUC中的Semaphore,最简单的限流工具类,必备技能

    这是java高并发系列第15篇文章 Semaphore(信号量)为多线程协作提供了更为强大的控制方法,前面的文章中我们学了synchronized和重入锁ReentrantLock,这2种锁一次都只能 ...

  6. Jmeter Beanshell 编程简介

    简介 Jmeter除了提供丰富的组件以外,还提供脚本支持,可通过编写脚本来丰富Jmeter,实现普通组件无法完成的功能.Beanshell是一种轻量级的Java脚本语言,完全符合Java规范,并且内置 ...

  7. 详解linux运维工程师入门级必备技能

    详解linux运维工程师入门级必备技能 | 浏览:659 | 更新:2013-12-24 23:23 | 标签:linux it自动化运维就是要很方便的运用各种工具进行管理维护,有效的实施服务器保护 ...

  8. 自动化部署必备技能—部署yum仓库、定制rpm包

    部署yum仓库.定制rpm包 目录 第1章 扩展 - yum缓存 1.1 yum缓存使用步骤... 1 1.1.1 导言... 1 1.1.2 修改配置文件... 1 1.1.3 使用缓存... 1 ...

  9. 【转帖】系统软件工程师必备技能-进程内存的working set size(WSS)测量

    系统软件工程师必备技能-进程内存的working set size(WSS)测量 2018年12月28日 18:43:01 Linuxer_ 阅读数:145 https://blog.csdn.net ...

随机推荐

  1. [LeetCode] 277. Find the Celebrity 寻找名人

    Suppose you are at a party with n people (labeled from 0 to n - 1) and among them, there may exist o ...

  2. JaCoCo覆盖率计数器

    覆盖率计数器 JaCoCo使用一组不同的计数器来计算覆盖率指标.所有这些计数器都是从Java类文件里获取信息,这些类文件包含Java 字节码指令和调试信息.即使没有可用源代码情况下,这种方法可以实时有 ...

  3. IDEA 部署Tomcat教程(透彻理解操作)

    目录 首先我们看一下 IDEA 里的当前项目结构配置 设置 Web 资源目录和 Tomcat读取的 web.xml 配置文件 Tomcat 的 Run/Debug 配置 处理常见问题 Web资源找不到 ...

  4. centos7 安装mysql5.7(二进制安装)

    一.卸载默认安装的mariadb [root@localhost ~]# yum remove mariadb* -y 二.添加mysql用户 [root@localhost ~]# useradd ...

  5. Casbin权限模型

    权限框架casbin1.概述Casbin是一个强大的.高效的开源访问控制框架,其权限管理机制支持多种访问控制模型. Casbin支持以下编程语言: Casbin可以做到:支持自定义请求的格式,默认的请 ...

  6. java json解析(转)

    转自:https://www.cnblogs.com/sunnywindycloudy/p/8343013.html 给服务端发送请求后,服务端会返回一连串的数据,这些数据在大部分情况下都是XML格式 ...

  7. oracle查看执行计划入门

    基于Oracle的应用系统很多的性能问题都是由应用系统的SQL性能低劣引起的,因此SQL的性能优化非常重要.要分析与优化SQL的性能,一般是通过查看该SQL的执行计划,然后通过执行计划有针对性地对SQ ...

  8. 【linux】linux磁盘空间 目录查看清理 和 文件查看清理

    =========================大目录排查============================= 一.首先查看磁盘挂载,磁盘空间使用情况 1.进入根路径 cd / 2.查看磁盘挂 ...

  9. VS2019无法安装Android SDK 28的问题

    在一台新电脑上安装VS2019,新建Xamarin.Android项目,反复提示要安装Android SDK Build Tools 28.0.3,在弹出的窗口里点击接受协议,却无法安装SDK. 直接 ...

  10. Application类-欢迎页(初始界面)

    在程序界面显示前,如果我们处理了很多耗时操作,这个时候给用户提示一个欢迎页便是十分友好的.WPF为我们提供了这个特性: 第一种方法:通过设置图片资源的生成操作 粘贴一个图片到我们的项目中 在解决方案管 ...