为什么要使用BeanShell

之前在做客服域相关接口生产环境压测的时候,遇到一个问题,那就是签名如何生成,网关的同学是有提供相关签名计算的jar包,如何使用提供的jar包在JMeter中生成签名?BeanShell这个小工具可以帮到你。

BeanShell简介

Beanshell 是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性。BeanShell执行 标准Java语句和表达式,另外包括一些脚本命令和语法。它将脚本化对象看作简单闭包方法(simple method closure)来支持,就如同在Perl和JavaScript中的一样。 它具有以下的一些特点:使用Java反射API以提供Java语句和表达式 的实时解释执行;可以透明地访问任何Java对象和API;可以在命令行模式、控制台模式、小程序模式和远程线程服务器模式等四种模式下面运行;

JMeter本身提供了对BeanShell的支持,目前在JMeter支持在以下几种组件中使用BeanShell

  • 定时器 BeanShell Timer
  • 前置处理器:BeanShell PreProcessor
  • 采样器: BeanShell Sampler
  • 后置处理器:BeanShell PostProcessor
  • 断言: BeanShell断言
  • 监听器: BeanShell Listener

使用BeanShell生成签名

在这里我们使用BeanShell Sampler来生成我们需要的签名,具体步骤如下:

  • 第一步,创建一个java项目,引入maven-assembly-plugin
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>2.5.5</version><configuration><archive><manifest><mainClass>com.example.jmeter.Test</mainClass></manifest></archive><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration></plugin>

项目中request包主要存放要压测接口的请求类,直接拷贝项目中的xxxRequest到这里即可

SignUtils是签名工具类。

  • 第二步生成jar包,执行以下maven命令,会生成一个包含依赖的jar文件。
mvn assembly:signle
  • 第三步将生成的jar包导入到JMeter

打开JMeter点击测试计划,最底部 Add directory or jar to classpath,选择第一步打包好的jar文件即可。

  • 第四步,使用BeanShell Sampler访问jar文件中的相关代码
import com.example.jmeter.util.SignUtils;
import com.example.jmeter.request.QuickReplyRequest;String tip = vars.get("tip");
QuickReplyRequest request = new QuickReplyRequest();
request.setTip(tip);
String sign = SignUtils.getSign(request);
vars.put("sign", sign);

  • 第五步,在HTTP Request Sampler中使用签名

/api/v1/h5/im-admin/quickReply/search/v2?sign=${sign}

至此你已经能够使用BeanShell解决生产环境签名生成问题了。当然还有更方便的方法,那就是网关提供签名接口,直接使用接口去生成签名就好了,如果网关同学没有提供相关接口,你还可以自己写个接口doge。

BeanShell常用内置变量

在前面的简单示例中我们使用了vars这个关键字来获取和设置JMeter中的变量,那么在BeanShell我们可以使用哪些内置变量来与JMeter进行交互呢?下面的表格列出了一些经常使用的变量。

变量

作用

示例

log

写入信息到jmeber.log文件

log.info("hello")

ctx

代表了当前线程的上下文

ctx.getCurrentSampler() 获取当前Sampler

ctx.getPreviousResult() 获取前一个Smapler的响应结果

更多使用参考:https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html

vars

JMeterVariables,操作JMeter变量,这个变量引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁。

vars.get(String key)从JMeter中获取变量

vars.pu(String key, String value)设置变量到JMeter局部变量容器中

props

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

props.get(String key)获取属性值

props.put(String key, String value) 设置属性值

prev

获取前面的Sample返回的信息

prev.getResponseDataAsString()获取前一个Sample的响应信息。

pre.getResponseCode()获取响应code

更多使用参考

https://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html

至此我们对如何在JMeter中使用BeanShell有了初步的了解,也知道了在JMeter中有很多比较方便内置变量可以帮助我们实现复杂的逻辑和流程。

JMeter实用教程【二】-BeanShell的使用相关推荐

  1. 软件测试工具jmeter实用教程

    本文以开源文档云nextcloud软件为例进行讲解 假设需要测试的网址为http://121.37.171.139/nextcloud 登录后 1.修改语言为简体中文 2.添加一个线程组 3.添加ht ...

  2. python pyquery不规则数据的抓取_爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网...

    爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网 前言 上篇文章 PyQuery (一) 回顾.今天来介绍具体 PyQuery 的使用方法. 穷游网目标与分析 开始之前,按照之前的套路一步 ...

  3. pyquery获取不到网页完整源代码_爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网...

    爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网 前言 上篇文章 PyQuery (一) 回顾.今天来介绍具体 PyQuery 的使用方法. 穷游网目标与分析 开始之前,按照之前的套路一步 ...

  4. git 添加用户名和邮箱_Git实用教程(二) | Git简介及安装详解

    Git实用教程专栏回顾 Git实用教程(一) | 为什么需要版本控制?(以嵌入式项目开发为例) 1.Git简介 Git(官网 https://git-scm.com/)是一个免费开源的分布式版本控制系 ...

  5. Java 2实用教程(第三版)实验指导与习题解答and实验模版代码及答案 (二)

    实验2 字体对话框 1.答案: [代码1]:setModal(true); [代码2]:setVisible(false); [代码3]:setVisible(false); [代码4]:new Fo ...

  6. 【深度学习】基于PyTorch的模型训练实用教程之数据处理

    [深度学习]基于PyTorch的模型训练实用教程之数据处理 文章目录 1 transforms 的二十二个方法 2 数据加载和预处理教程 3 torchvision 4 如何用Pytorch进行文本预 ...

  7. 【SSM】Kisso实用教程之验证码简单使用(一)

    先来张效果图展示一下 Maven坐标: <dependency><groupId>com.baomidou</groupId><artifactId>k ...

  8. 搜索引擎设计实用教程(4)-以百度为例

    /*版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/ 搜索引擎设计实用教程(4)-以百度为例 之四:相关提示功能                              中科院 ...

  9. 搜索引擎设计实用教程(2)-以百度为例

    /*版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/ 搜索引擎设计实用教程(2)-以百度为例 之二:Spelling Checker拼写检查错误提示(以及拼音提示功能) 中科院软 ...

最新文章

  1. tp5获取mysql版本_TP5 + MySQL 应用地址选择
  2. 学会转变你的思维方式,一切都会变得不一样
  3. 容器可以作为全局变量吗_四季青是风水树吗?哪些可以作为风水树?
  4. linux 内核移植和根文件系统的制作【转载】
  5. 1644 免费馅饼 题解(c++)(S.B.S.)
  6. python可以做科学计算吗_用 Python 做科学计算之最小二乘
  7. 程序员被怼!HR:对不起,我们不招“精通Excel”的程序员
  8. 将客户端将IE9强制为IE7
  9. weui 开发文档
  10. onvif工具测试网络摄像头视频
  11. 神经网络的双曲线正切激活函数
  12. ffmpeg 音频转amr
  13. 【Python】如何用Python快速实现语音提醒功能
  14. Zynga任命Noel Watson为董事会成员
  15. 5G注册流程分级详解
  16. 视频教程-微信小程序从入门基础(第一季)-PHP
  17. html阴影效果骰子,flex布局案例(骰子)
  18. Jeecg 任意文件下载漏洞
  19. Springboot WEBOJ项目—— Nginx部署
  20. Q2营收净利润双降 后疫情时代百事可乐的“快乐水”生意有多难?

热门文章

  1. flutter_bloc使用解析---骚年,你还在手搭bloc吗
  2. linux centos fedora 扩展硬盘分区操作命令 fdisk df lvm pvcreate vgcreate lvcreate
  3. 小妹安慰失恋大哥的爆笑过程(ZT)
  4. Linux SCHED_FIFO, SCHED_RR和SCHED_OTHER
  5. 龙头股情绪周期教程php,《龙头股情绪周期教程》全集 第6讲:题材情绪周期发酵阶段(二板低吸与三板空间板)...
  6. adams打不开提示msc license_安装adams后,打开时弹出的错误,如何修改才能用?
  7. 驱动LSM6DS3TR-C实现高效运动检测与数据采集(5)----姿态解算
  8. 如何批量查询搜狗收录?提升搜狗收录8个方法介绍
  9. (转)YOLO-V3可视化训练过程中的参数,绘制loss、IOU、avg Recall等的曲线图
  10. IDEA学习篇——IDEA刷新项目/清除项目缓存