jmeter 使用beanshell 编写脚本
目录
一、介绍
1.1 介绍
1.2 下载&启动
二、jmeter中创建beanshell脚本
三、jmeter与beanshell 数据交互
3.1 例子1 beanshell 将变量传给jmeter
3.2 例子二 jmeter 接收beanshell 生成的变量
四、jmeter中Beanshell 调用 java 代码
4.1 调用java文件
4.2 beanshell调用外部 jar 包
五、beanshell 打印日志
六、线程组1生成的动态变量给线程组2用
6.1 背景:
6.2 独立运行线程组:
6.3 解决思路及方案
思路:
方案一:使用beanshell
方案二:使用函数助手
七、prev 获取前面的sample返回的信息,再做处理
7.1 设置上一个sample 的响应结果的编码
八、beanshell应用
8.1 验签处理&加密
一、介绍
1.1 介绍
BeanShell是一个小型的、免费的、可嵌入使用Java编写的具有对象脚本语言特性的Java源码解释器。
动态执行所有Java语句、Java代码片段以及弱类型Java和附加的脚本的便利
透明地访问所有Java对象和API
四种运行模式:命令行、控制台、Applet、远程会话服务
可以在受安全限制的环境下工作,不需要类加载器或者绝大多数功能的字节码生成器
程序只有大约150K的Jar文件
纯Java
免费
编写baanshell脚本,使用的语言,几乎跟java一模一样。
1.2 下载&启动
下载:
BeanShell下载地址是:www.beanshell.org
下载下来是一个jar包,bsh-2.0b4.jar
启动:
启动有四种方式,我只用一种方式,其他的可以去百度一下。
在终端中,执行命令
java -jar bsh-2.0b4.jar
二、jmeter中创建beanshell脚本
线程组--》添加--》取样器/sampler --》 BeanShell 取样器
脚本文件:我们可以直接引入写好的脚本
脚本:我们自己在jmeter中手写脚本的地方。
三、jmeter与beanshell 数据交互
jmeter与beanshell 数据交互,是通过函数实现的。
vars(JMeterVariables) : 操作jmeter 变量,常用方法:
vars.get(String key) : 从jmeter中获得变量值
vars.put(String key,String value): 将数据存到jmeter变量中。
-------小技巧---------------------
我们可以先在idea中,编写beanshell脚本,写完之后,再复制到jmeter中。(因为jmeter 编写脚本时,不方便,没有错误提示等功能)
3.1 例子1 beanshell 将变量传给jmeter
beanshell 脚本:
a= 1;
b=4;
q = a+b;
vars.put("q",q+"")
运行,然后去结果树中,查看日志。
注意:
在脚本中,put q时,为啥要+“” ?
因为put函数,key 与value 都要求是String格式的,但是在我们的这个脚本中,得到的q的值是
int类型的,所以要先转成String再put。(int+Sttring=String)
vars.put(String key,String value):
3.2 例子二 jmeter 接收beanshell 生成的变量
背景:
一个接口请求,传参,要求传当前的时间,且格式为 yyyy-MM-dd HH:mm:ss
处理方案:
beanshell 脚本,将当前时间,格式化为 yyyy-MM-dd HH:mm:ss 格式,然后将值传给jmeter
整个jmeter 脚本结构
beanshell脚本编写:
import java.text.*;
import java.util.*;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = new Date();
String dateStr = df.format(d);
vars.put("current_date",dateStr);
HTTP 请求,接收参数,current_date
${current_date}
运行jmeter脚本,查看结果树。
变量引用成功。
四、jmeter中Beanshell 调用 java 代码
4.1 调用java文件
语法:
source(" java 文件路径") 其中文件路径可以使用绝对路径,也可以使用相对路径。
source("E:\eclipse\workspace\MD5\src\jmeter\MD5.java"); 或者: source("MD5.java"); --文件位于 jmeter bin 目录下
String strMd5 = MD5.GetMD5Code("123456");
举例:
1、我自定义了一个类CsDIY.java
package bingfa;
import java.text.*;
import java.util.*;public class CsDIY {public String getCurrentDate(){DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date d = new Date();String dateStr = df.format(d);return dateStr;}}
然后将CsDIY.java 放置在了我电脑桌面上。
2、Beanshell脚本,引用CsDIY.java这个类,并调用其中方法
source("/Users/zhaohui/Desktop/CsDIY.java");
CsDIY cs = new CsDIY();
String dateSSS = cs.getCurrentDate();
vars.put("dateSSS",dateSSS)
3、接口请求,使用变量
4.2 beanshell调用外部 jar 包
1、提前把 jar 包放入 jmeter lib\ext 目录下并重启;
2、在jmeter 线程组下,添加http sampler->BeanShell Sampler
3、在beasnshell 中的头文件,导入该jar包
import 类名;
示例:
import com.MD5;
String strMd5 = MD5.GetMD5Code("123456");
五、beanshell 打印日志
log: 写入信息到jmeter.log文件中,使用方法:
log.info("这里是日志");
报错:
ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval In file: inline evaluation of: `
WARN o.a.j.p.j.s.BeanShellSampler: Exception executing script. org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval In file:
报错处理:
我没搞定哇。。
六、线程组1生成的动态变量给线程组2用
6.1 背景:
测试计划下,两个线程组,线程组1和线程组2。 需要将线程组1 beanshell 脚本产生的变量,给线程组2 用。
6.2 独立运行线程组:
当运行测试计划时,线程组1与线程组2是同时运行的。我们需要先运行线程组1,再运行线程组2,为了保证线程组运行顺序,我们需要在测试计划中,勾选独立运行线程组。
6.3 解决思路及方案
思路:
1、线程组1生成变量时,将变量设置为全局变量。
props.put("xx",xxx);
2、线程组2,取变量时,取这个全局变量
props.get("xx")
方案一:使用beanshell
在线程组2中,写一个beanshell 脚本,使用props.get("xx") 去取变量
方案二:使用函数助手
工具--函数助手--BeanShell
在表达式中,填写 props.get("xx")
然后点击生成
再在线程组2中,直接使用${__BeanShell(props.get("dateSSS"),)}
七、prev 获取前面的sample返回的信息,再做处理
getResponseDataAsString():获取响应信息
getResponseCode(): 获取响应信息
setDataEncoding(String dataEncoding): 设置响应结果的编码
7.1 设置上一个sample 的响应结果的编码
举例:
背景:
jmeter脚本结构:
对 www.baidu.com ,发出请求,查看返回结果:
发现结果树中,中文都是乱码的。
解决办法:
修改返回结果的编码。
1、在该线程组中,加一个BeanShell 取样器(添加--》取样器--〉 BeanShell 取样器)
2、 BeanShell 取样器 中编写脚本
prev.setDataEncoding("utf-8");
3、将 BeanShell 取样器 放置在被测http请求的后面。(注意放置位置)
再次进行请求,结果树中的响应结果,就不会再乱码了。
八、beanshell应用
BeanShell PreProcessor
提前处理请求参数,如:图片处理,加密解密等
BeanShell PostProcessor
在请求后对返回结果进行处理
BeanShell 断言
验证返回结果的正确性
BeanShell Sampler
8.1 验签处理&加密
jmeter脚本处理加密验签_做测试的喵酱的博客-CSDN博客
jmeter 使用beanshell 编写脚本相关推荐
- jmeter 使用BeanShell编写java代码提取请求参数
之前在用jmeter写接口测试的时候,我想尽量把参数都设置成可变修改的,现在的大多数请求都会带上时间戳,于是,我用了两种方式提取可变的时间戳参数 1.直接在jmeter的GUI中,编写获取时间戳的方法 ...
- Jmeter使用BeanShell取样器调用Python脚本
1.在线程组中按以下方式添加[BeanShell取样器]: 2.把以下这段代码放到[BeanShell取样器]的脚本区域: 注意点: (1)命令里的Python脚本路径改成自己脚本的路径,-t后面是填 ...
- Jmeter 在 beanshell 脚本中写日志
JMETER 在执行时,会写日志数据,我们在编写脚本的时候也可以自己写日志. 日志记录再jmeter 的bin 目录的 jmeter.log 文件中. jmeter 比较人性化,它在这里提供了脚本可以 ...
- 【性能测试】四、jmeter——编写脚本
jmeter编写脚本 一.准备事项 项目环境 接口文档 http请求包括哪些部分 请求行 + 请求方法,请求地址URI 请求头 Content-Type cookie User-Agent 空一行 请 ...
- Jmeter学习-BeanShell 内置变量vars、props、prev
参考:Jmeter BeanShell 内置变量vars.props.prev的使用详解_java_脚本之家 1.介绍 在使用Jmeter过程中,或多或少都会接触些BeanShell,它会使工具的使用 ...
- 利用JMeter的beanshell进行接口的加密处理
最近项目中在做http协议的接口测试,其中接口请求报文数据有个字段值需要用到加密后的签名,即出于网络传输过程中,对数据安全的考虑,要对请求的数据进行特定的处理(加密),再进行请求. 刚开始由于项目赶进 ...
- arcgis python脚本实现从界面选择输入输出_arcgis python脚本实现从界面选择输入输出_ArcGIS Python编程案例(2)-使用ArcPy编写脚本......
本章将涉及以下案例: 使用ArcGIS Python窗体 访问ArcPy 从脚本中执行工具 使用ArcGIS桌面软件帮助系统 使用变量存储数据 访问ArcPy中的模块 引言 地理处理任务往往是耗时且重 ...
- 问题解决:jmeter+java+beanshell : org.apache.jorphan.util.JMeterException: Error invoking bsh method: eva
问题解决:jmeter+java+beanshell : org.apache.jorphan.util.JMeterException: Error invoking bsh method: eva ...
- Linux编写脚本查看mod,Linux shell脚本编写基础
在进行linux测试时编写脚本是必不可少的,Shell脚本的名称可以随便定义,也不要什么后缀名,例如可以写abc,smartzip这类名称,运行时只要键入 ./smartzip就能运行脚本了.. 每行 ...
最新文章
- ICLR 2020 | ELECTRA:新型文本预训练模型
- 上传一批动画教程(链接已失效)
- python——shape 与reshape
- 第6章 C控制语句:循环
- c++数据结构队列栈尸体_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)...
- Linux kill 杀死指定进程
- WebSocket 时时双向数据,前后端(聊天室)
- java近义词,同义词查询_java 同义词查询怎么做?
- java计算机毕业设计HTML5旅游网站源码+mysql数据库+系统+lw文档+部署
- NRF24L01模块----6通道通讯测试
- picasa csdn_如何将发送到Facebook的功能添加到Picasa
- android语法视频教程,英语语法视频讲解
- 行走在古道间,看时光深处,
- Mysql 杀死进程 | 解决Lock wait timeout exceeded
- Unsupervised Domain Adaption of Object Detectors : A Survey
- 写给面临危机的计算机类学生们的肺腑之言 转
- 微信接口返回码对照表
- JS — 声明与引入
- notepad++ 插件推荐
- Android自定义控件三部曲文章索引
热门文章
- SSM拦截器和过滤器结合使用-实现登录拦截操作
- Python 三.创建第一个scrapy爬虫项目(分布式爬虫打造搜索引擎)
- C#控制利用模板文件通过BarTender控制斑马打印机打印
- js:图片url转base64编码
- 杰理科技AD15N系列玩具类音频开发
- 计算机职业价值观测评报告,关于职业价值观测评报告
- 除了GD!这11个国产品牌也能替代STM32!-道合顺大数据Infinigo
- matlab中的图像分割
- zlibirary最新地址检测(zlibirary官网)
- 计算机硬件故障诊断的原则,计算机常见故障检测的一般原则是什么