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] nginx记录多种响应时间
官网介绍$request_time – Full request time, starting when NGINX reads the first byte from the client and ...
- CodeForces 862B(思维+二分图染色)
题意 https://vjudge.net/problem/CodeForces-862B 给出n个点,n-1条边,求再最多再添加多少边使得二分图的性质成立 思路 因为题目是求的最多添加多少边,所以可 ...
- http返回头中content-length与Transfer-Encoding: chunked的问题释疑
先说说问题出现的背景: 公司服务器与手机客户端交互,客户端请求一个动态生成的XML文件,在用firebug查看http响应头的时候,有时候发现有content-length属性,有时候没 ...
- 题解:swj社会摇入魔第五课
题目链接; solution: 根据画图模拟可以知道除第一次纯下降 其余每次都是一半一半的增加 S=h+h+h/2+h/4+h/8+...; 即S=h+2h=3h #include<bits/s ...
- faster-rcnn错误信息 : tensorflow.python.framework.errors_impl.InvalidArgumentError: Assign requires shapes of both tensors to match. lhs shape= [21] rhs shape= [2]
faster-rcnn错误信息 : tensorflow.python.framework.errors_impl.InvalidArgumentError: Assign requires shap ...
- (day57)九、多对多创建的三种方式、Forms组件
目录 一.多对多三种创建方式 (一)全自动 (二)纯手撸(基本不用) (三)半自动(推荐使用) 二.forms组件 (一)校验数据 (1)常用内置字段及参数 (2)内置的校验器 (3)HOOK方法 ( ...
- Mac下MongoDB配置与操作
1.环境配置 Xcode安装 2.下载安装包 官网地址是:MongoDB Download Center | MongoDB 3.解压文件, 将文件放置/usr/local 4.配置环境变量 open ...
- HTTP常见的几种认证机制
几种常用的认证机制 ===================转自https://www.cnblogs.com/xiekeli/红心李的文章====================== 我是一个测试人员 ...
- netty ByteBuf与String相互转换
String转为ByteBuf 1)使用String.getBytes(Charset),将String转为byte[]类型 2)使用Unpooled.wrappedBuffer(byte[]),将b ...
- Zookeeper学习记录及Java客户端连接示例
1. Zookeeper 1.1 简介 ZooKeeper is a centralized service for maintaining configuration information, na ...