jmeter BeanShell断言(三)数据处理
在做接口测试时,对响应数据的校验是非常重要的部分;在使用Jmeter进行接口测试时,有多种respone校验方式,比如响应断言、BeanShell断言等等,BeanShell断言可以自定义断言,自由灵活的用脚本实现断言。
什么是BeanShell ?
小型嵌入式Java源代码解释器,具有对象脚本语言特性,能够动态地执行标准JAVA语法
运行其内部的脚本处理Java应用程序,还可以在运行过程中动态执行你java应用程序执行java代码,因为BeanShell是用java写的,运行在同一个虚拟机的应用程序,因此可以自由地引用对象脚本并返回结果。
Bean Shell常用内置变量
JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:
log:写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);
ctx:该变量引用了当前线程的上下文,使用方法可参考:org.apache.jmeter.threads.JMeterContext。
vars - (JMeterVariables):操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:
a) vars.get(String key):从jmeter中获得变量值
b) vars.put(String key,String value):数据存到jmeter变量中
更多方法可参考:org.apache.jmeter.threads.JMeterVariables
props - (JMeterProperties - class java.util.Properties):操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。
a) props.get("START.HMS"); 注:START.HMS为属性名,在文件jmeter.properties中定义
b) props.put("PROP1","1234");
prev - (SampleResult):获取前面的sample返回的信息,常用方法:
a) getResponseDataAsString():获取响应信息
b) getResponseCode() :获取响应code
更多方法可参考:org.apache.jmeter.samplers.SampleResult
sampler - (Sampler):gives access to the current sampler
下面来介绍如何使用beanshell来进行断言和数据处理
假如我们有如下的response数据:
{
"message": "不能发送小于当前时间点的定时任务",
"statusCode": 200
}
(1)我们使用JSONObject对象来获取json数据,首先需要下载org.json的jar包,然后在测试计划中导入该jar包,并在jmeter的lib目录下放入该jar包,下面验证statusCode的值是否等于200:
import org.json.*; //获取上一个请求的返回
String jsonString = prev.getResponseDataAsString();
JSONObject responseJson = new JSONObject(jsonString); //判断返回值是否和预期一致
if (responseJson.getInt("statusCode") != 200) {
//把断言失败置为真,即用例失败,并在结果树中显示FailureMessage
Failure = true;
FailureMessage = "statusCode的返回值有误";
}
(2)如果要验证 respone 中 message 的值是否与预期一致,需要怎么做呢?
import org.json.*; //获取上一个请求的返回
String jsonString = prev.getResponseDataAsString();
JSONObject responseJson = new JSONObject(jsonString); String fbpcontent = responseJson.getString("message");
if (!fbpcontent.equals("不能发送小于当前时间点的定时任务")) {
//把断言失败置为真,即用例失败,并在结果树中显示FailureMessage
Failure = true;
FailureMessage = "message与实际值不一致";
}
假如我们有如下的response响应数据:
{
"statusCode": 200,
"data": [
{
"i": "50356",
"n": "项目一",
"v": "2.0",
"iconUrl": "",
},
{
"i": "45280",
"n": "项目二",
"v": "3.0",
"iconUrl": "",
},
{
"i": "14656",
"n": "项目三",
"v": "2.6",
"iconUrl": "",
},
{
"i": "66213",
"n": "项目四",
"v": "5.0",
"iconUrl": "",
}
]
}
(3)我们需要解析数组data的值,如何去解析呢?
import org.json.*;
import java.util.Arrays; //获取上一个请求的返回
String jsonContent = prev.getResponseDataAsString(); JSONObject response = new JSONObject(jsonContent);
JSONArray groups = response.getJSONArray("data");
String strData= groups.toString();
log.info(strData)
现在有更加复杂格式的respone数据:
{
"priorityGroups": {
"proId": 1234,
"name": "项目一",
"groups": [
{
"id": "50356",
"items": [
{
"proId": 1360,
"n": "PC端",
"index": 1
},
{
"proId": 1361,
"n": "iOS端",
"index": 2
},
{
"proId": 1362,
"n": "安卓端",
"index": 4
}
]
}
]
},
"promotion": {
"proId": 1364,
"cusId": 84,
"name": "项目二",
"from": 1470821215,
"to": 1470907615,
"status": 1,
"objectId": 1069,
"createBy": 394,
"eff": 1470821215000,
"createTime": 1470821155000
}
}
(4)我们需要解析groups中的数据,需要怎么实现呢?
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; String jsonContent = prev.getResponseDataAsString(); JSONObject response = new JSONObject(jsonContent);
JSONArray groups = response.getJSONObject("priorityGroups").getJSONArray("groups");
String strGroups = groups.toString();
jmeter BeanShell断言(三)数据处理的更多相关文章
- jmeter BeanShell断言(一)
原文地址https://blog.csdn.net/lijing742180/article/details/81157947 原文地址https://blog.csdn.net/zailushang ...
- jmeter beanshell断言接口自动化实例
一.JMeter介绍 Apache JMeter是一款优秀的开源性能测试工具,在国外无论是在性能测试还是接口测试领域都有着非常高的使用率,但由于本身没有完善的中文文档以及典型开源工具特点(界面不美观) ...
- Jmeter BeanShell断言
这篇文章用来记录编写beanshell断言遇到得问题. 问题1:JSONObject not found in namespace 流程:在beanshell下写代码如下: 1 String resp ...
- (jmeter内置可调用的变量)jmeter beanShell断言
用户可以在jmeter- “beanShell断言”中自定义断言.自由灵活的用脚本实现自己的断言 beanShell断言接口介绍 在beanShell中直接可以调用的变量,无需加前缀. 1.lo ...
- jmeter BeanShell断言(四)
Bean Shell常用内置变量 JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:写入信息到jmeber.log ...
- Jmeter beanshell断言 org.json.jar包下载
链接:https://pan.baidu.com/s/1O01ODjlKyqmz2NyDT0MCww 提取码:a5va 欢迎关注微信公众号:软件测试汪,qq技术交流群:809111560
- jmeter之beanshell断言---数据处理
在做接口测试时,对响应数据的校验是非常重要的部分:在使用Jmeter进行接口测试时,有多种respone校验方式,比如响应断言.BeanShell断言等等,BeanShell断言可以自定义断言,自由灵 ...
- jmeter BeanShell实例-----两个变量之间的断言对比
jmeter BeanShell实例-----两个变量之间的断言对比 在jmeter的中,断言没法对两个变量的进行对比后判断,只能使用Bean Shell断言来进行,总是有人来问怎么写呢.这里写一个简 ...
- JMeter中BeanShell断言使用一
Jmeter Ant Task如何让beanshell断言失败的详细信息展示在report里面 首先必须给beanshell断言添加FailureMessage if(${TotalClient_SS ...
随机推荐
- 移动端H5长按事件 vue自定义指令
import Vue from 'vue' Vue.directive('longpress', function (el, binding){ var timer = null; var start ...
- 在centOS 7 上部署ansible自动化运维环境(01)
环境: 3台centos 7 mycat : 10.0.0.2 mariadb1: 10.0.0.3 mariadb2: 10.0.0.4 为了实验方便 f ...
- docker安装mysql5.6(win10家庭版)
闲话不多说,打开之前已经安装好的客户端Docker Quickstart Terminal,安装方法请看上一篇,链接地址:https://www.cnblogs.com/jimmyshan-study ...
- 【Spring Boot】Spring Boot之跨域解决方案
一.什么是跨域 跨域,指的是从一个域名去请求另外一个域名的资源.即跨域名请求!跨域时,浏览器不能执行其他域名网站的脚本,是由浏览器的同源策略造成的,是浏览器施加的安全限制. 跨域的严格一点来讲就是只要 ...
- 使用Arduino开发板实现与MPU6050陀螺仪传感器连接的方法
MPU6050陀螺仪传感器具有许多强大的功能,采用单芯片封装.它是由一个MEMS加速度计.一个MEMS陀螺仪和温度传感器组成.该模块在将模拟量转换为数字量时非常准确,因为每个通道都有一个16位的模数转 ...
- C# List<T>排序总结
这里有很多种方法对List进行排序,本文总结了三种方法,但有多种实现. 1.对基础类型排序 方法一: 调用sort方法,如果需要降序,进行反转: List<int> list = new ...
- 学.Net Core Web Api开发 ---- 系列文章
循序渐进学.Net Core Web Api开发系列[1]:开发环境 循序渐进学.Net Core Web Api开发系列[2]:利用Swagger调试WebApi 循序渐进学.Net Core We ...
- 【CLAA系列】CLAA 通讯过程
名词: MSP:中兴服务器 CS:客户服务器,也就是我们的服务器 GW:网关,这里默认是中兴的网关 Chip:芯片,这里特指包含了Lora标准通讯模块,且针对CLAA做过特殊优化的芯片. Lora:L ...
- IN8005 Exercise Session
Exercise Session for Introductioninto Computer Science(for non Informatics studies, TUM BWL)(IN8005) ...
- 洛谷 CF448D Multiplication Table
目录 题目 思路 \(Code\) 题目 CF448D Multiplication Table 思路 二分答案.这个矩阵的每一排都是递增的,所以二分\(ans\),去计算有多少个数等于\(ans\) ...