Jmeter之BeanShell
在Jmeter中各种分类组件中都有相应的BeanShell组件,这里简单的说明一下Beanshell的使用。
一、概念
BeanShell是一种符合Java语法的脚本语言,也有自己的一些特定语法
二、内置变量
Jmeter在它的Beanshell中内置了变量,用户可以通过这些变量与Jmeter进行交互,其中主要的变量及使用方法如下:
1、log:
在调试脚本的时候,可以将结果输出到日志,判断结果是否正确。使用log时会将日志信息保存到jmeter.log文件中,也可以打开log viewer实时查看日志信息。
常用方法为:log.info("");
注意在使用log.info输出信息的时候,如果变量的值是字符型,一定要在调用变量的时候,加双引号。
2、vars:
操作jmeter变量,常用的方法有:
(1、vars.get("变量名"):从jmeter变量中获取值;
(2、vars.put("变量名",变量):将beanshell中的变量值,复制给Jmeter变量,在Jmeter的后续使用中可以通过变量名调用。
3、prev:
获取前一个取样器的返回值,常用的方法有:
(1、getResponseDataAsString():获取前一个取样器的响应信息;
(2、getResponseCode():获取前一个取样器的响应Code;
4、其他的变量ctx和props(操作属性)
BeanShell断言:
用户可以在jmeter- “beanShell断言”中自定义断言。自由灵活的用脚本实现自己的断言
beanShell断言接口介绍
在beanShell中直接可以调用的变量,无需加前缀。
1.log 打印日志 log.info(“在控制台打印日志”);
2.SampleResult 获取SampleResult对象,可以通过这个对象获取想要的信息
3.Response 获取Response对象,可以通过这个对象获取对应的信息
4.Failure 查看接口调用是否成功,如果返回false是成功的,true是失败的
5.FailureMessage 失败信息,没有设置的时候失败信息是空的。可以set这个信息
6.ResponseData 获取 response body,类型是byte[]
7.ResponseCode 返回接口code,成功是200
8.ResponseMessage 获取msg,成功是OK
9.ResponseHeaders 获取接口服务端返回的头部信息
10.RequestHeaders 获取客户端请求的头部信息
11.SampleLabel 获取接口请求的名称
12.SamplerData 获取请求的url和body
13.ctx 代表上下文信息,可以直接使用
14.vars 可以直接调用,将获取的数据变成jmeter变量(put),也可以获取用户自定义的变量(get)
eg:
1.在http sample下添加一个beanShell断言
2.编写script
import org.apache.jmeter.assertions;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.assertions.AssertionResult;
import org.json.*; String response_data = prev.getResponseDataAsString();//获取接口返回的response数据
JSONObject data_obj = new JSONObject(response_data);//转换成json
//判断code是否等于0 如果等于0 再取里面的字段
String code = data_obj.get(“code”);
if(code.equals(“0”))
{
String user_name = data_obj.get(“data”).get(“user”).get(“userName”).toString();
//这里的my_name 是用户自定义的变量或者之前的接口返回获取的
if(user_name.equals(${my_name})){
Failure = false; //设置成false 表示接口跑成功,在结果树中sample是绿色的
//做后续动作
…….
}
else{
//做其他动作
}
}
else
{
Failure = true;//直接判断失败,表示接口跑失败,在结果树中sample是红色的
prev.setStopThread(true);//如果断言失败,后面的接口不需要再跑,直接暂停
}
三、一些简单的使用
1、BeanShell响应断言

因为用到了Json.jar(json-20180813.jar),所以需要先将json.jar导入。

2、BeanShell Sampler

例:
import org.json.*;
String response_data=prev.getResponseDataAsString();
log.info("交易返回:"+response_data);
JSONObject data_obj = new JSONObject(response_data);
String code = data_obj.get("respCode").toString();
log.info("code:"+code);
if(code.equals("R200")){
log.info("交易成功");
FileWriter fstream = new FileWriter("D:\\apache-jmeter-3.3\\bin\\result\\idtxn_R200.csv",true);
BufferedWriter out = new BufferedWriter(fstream);
out.write(vars.get("idTxn")+"\n");
out.close();
fstream.close();
Failure = false;//设置成false 表示接口跑成功,在结果树中sample是绿色的
}else if(code.equals("R998")){
log.info("交易失败");
FileWriter fstream = new FileWriter("D:\\apache-jmeter-3.3\\bin\\result\\idtxn_R998.csv",true);
BufferedWriter out = new BufferedWriter(fstream);
out.write(vars.get("idTxn")+"\n");
out.close();
fstream.close();
Failure = true;
}
对上面例子进行优化:
1.对写文件操作,添加公共方法,并使用相对路径,增加代码可移植性
import org.json.*;
source("\\java\\RecordIdTxn.java");//java文件放在bin目录下,可以使用相对路径,增加代码可移植性
vars.put("resultPath",System.getProperty("user.dir")+"\\result");//在bin目录下新建一个result目录,用于存放执行结果记录
log.info("获取相对路劲:"+"${resultPath}");
String response_data=prev.getResponseDataAsString();
log.info("交易返回:"+response_data);
JSONObject data_obj = new JSONObject(response_data);
String code = data_obj.get("respCode").toString();
log.info("code:"+code);
if(code.equals("R200")){
log.info("交易成功");
//FileWriter fstream = new FileWriter("D:\\apache-jmeter-3.3\\bin\\result\\idtxn_R200.csv",true);
//BufferedWriter out = new BufferedWriter(fstream);
//out.write(vars.get("idTxn")+"\n");
//out.close();
//fstream.close();
RecordIdTxn("D:\\apache-jmeter-3.3\\bin\\result\\idtxn_R200.csv");//如果没有idtxn_R200.csv文件,会自动生成该文件
Failure = false;//设置成false 表示接口跑成功,在结果树中sample是绿色的
}else if(code.equals("R998")){
log.info("mcs system error...");
RecordIdTxn("D:\\apache-jmeter-3.3\\bin\\result\\idtxn_R998.csv");
Failure = true;
}else{
log.info("其他异常");
RecordIdTxn("D:\\apache-jmeter-3.3\\bin\\result\\idtxn_other.csv");
Failure=true;
}
Jmeter之BeanShell的更多相关文章
- JMeter中BeanShell实现写入文件
1.首先F:\test.txt文件为空
- jmeter之beanshell提取json数据
Jmeter BeanShell PostProcessor提取json数据 假设现有需求: 提取sample返回json数据中所有name字段对应的值,返回的json格式如下: {“body”:{“ ...
- jmeter通过BeanShell 脚本,实现对http请求参数的加密
jmeter一直是一款很好的接口和性能测试工具,它是开源的,不需要为此支付任何费用,而且可以下载源码,可以在修改源代码并在此基础上拓展自己的功能或插件,它可以跟ant和jenkins结合起来搭建自己的 ...
- JMeter中BeanShell的实际应用
使用Jmeter的BeanShell断言,把响应数据中的JSON跟数据库中的记录对比 很多时候我们需要把Response Data取到的 Json 字符串跟数据库里的对比,来验证接口的正确性,使用Be ...
- jmeter之beanshell取出需要参数,传递给下个请求
jmeter之beanshell取出需要参数,传递给下个请求 事件背景: 上周同事用jmeter录制脚本,录制成功回放后,并没有达到自己想要的结果. ps:他想从数据库取出某个字段值,然后对数据库做操 ...
- jmeter用BeanShell调用jar包对HTTP请求中的参数进行MD5加密
前提: eclipse.JDK.Jmeter 说明: 本文分为两部分进行配置说明 第一部分:编写JavaMD5加密脚本 第二部分:使用Jmeter的BeanShell进行验证 ************ ...
- 利用JMeter的beanshell进行接口的加密处理
最近项目中在做http协议的接口测试,其中接口请求报文数据有个字段值需要用到加密后的签名,即出于网络传输过程中,对数据安全的考虑,要对请求的数据进行特定的处理(加密),再进行请求. 刚开始由于项目赶进 ...
- Jmeter用BeanShell Sampler调用java写的jar包进行MD5加密
[前言] 在工作中,有时候我们请求的参数可能需要加密,比如登录接口中的密码做了加密操作,今天我就给大家介绍一种方法:Jmeter用BeanShell Sampler调用java写的jar包进行MD5加 ...
- JMeter(5) JMeter之BeanShell使用
BeanShell介绍 BeanShell是用Java写成的,一个小型的.免费的.可以下载的.嵌入式的Java源代码解释器,具有对象脚本语言特性.本篇只记录一下基本的使用.有以下五个组件: Beans ...
- jmeter通过BeanShell,实现对接口参数HmacSHA256加密(转)
jmeter通过BeanShell,实现对接口参数HmacSHA256加密2019-04-29 05:10 ps. 最近抓包网站的登陆请求,发现就2个参数,用户名和密码,通过工具去请求这个接口,一直返 ...
随机推荐
- Linux-3.14.12内存管理笔记【构建内存管理框架(4)】
虽说前文分析内存管理框架构建的实现,提到了find_zone_movable_pfns_for_nodes(),但这里不准备复述什么,仅针对required_movablecore和required_ ...
- Linux-3.14.12内存管理笔记【建立内核页表(1)】
前面已经分析过了Intel的内存映射和linux的基本使用情况,已知head_32.S仅是建立临时页表,内核还是要建立内核页表,做到全面映射的.下面就基于RAM大于896MB,而小于4GB ,切CON ...
- Linux安装包生成工具:checkinstall、makeself
关键词:checkinstall.dpkg.deb/rpm.makeself等等. checkinstall记录make install安装的文件,生成相应的(Slackware/RPM/Debian ...
- Element-ui 中的Dialog 对话框
给表头添加一个底部分割线 固定表格的内容高度 添加底部按钮 <template> <div> <el-button type="text" @clic ...
- 剑指Offer-28.数组中出现次数超过一半的数字(C++/Java)
题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如 ...
- java之获取变量的类型
java要获取变量的类型必须自己定义一个函数: public class Test{ public static void main(String[] args) { short a = 1; a + ...
- SpringMVC日期类型接收空值异常问题
最近遇到SpringMVC写个controller类,传一个空串的字符类型过来,正常情况是会自动转成date类型的,因为数据表对应类类型就是date的 解决方法是在controller类的后面加个注解 ...
- vue-列表动画
实现列表动画 li { border: 1px dashed #999; margin: 5px; line-height: 35px; padding-left: 5px; font-size: 1 ...
- Linux常用命令(2)
3.帮助命令 A,帮助命令:man B,其他帮助命令 3.1,格式:man [命令名] 查看命令拥有哪个级别的帮助: ...
- JavaWeb之servlet(1)
servlet servlet:就是一个Java程序,运行在web服务器中,用于接收和响应客户端的http请求.更多是配合动态资源使用.当然静态资源也要使用servlet,只不过Tomcat里面已经定 ...