jmeter之beanshell断言---数据处理

在做接口测试时,对响应数据的校验是非常重要的部分;在使用Jmeter进行接口测试时,有多种respone校验方式,比如响应断言、BeanShell断言等等,BeanShell断言可以自定义断言,自由灵活的用脚本实现断言。

1.什么是BeanShell ?

小型嵌入式Java源代码解释器,具有对象脚本语言特性,能够动态地执行标准JAVA语法 
运行其内部的脚本处理Java应用程序,还可以在运行过程中动态执行你java应用程序执行java代码,因为BeanShell是用java写的,运行在同一个虚拟机的应用程序,因此可以自由地引用对象脚本并返回结果。

下面来介绍如何使用beanshell来进行断言和数据处理,假如我们有如下的response数据:

1 {
2     "message": "不能发送小于当前时间点的定时任务",
3     "statusCode": 200
4 }

(1).我们使用JSONObject对象来获取json数据,首先需要下载org.json的jar包,然后在测试计划中导入该jar包,并在jmeter的lib目录下放入该jar包,下面验证statusCode的值是否等于200

 1 import org.json.*;
 2
 3 //获取上一个请求的返回
 4 String jsonString = prev.getResponseDataAsString();
 5 JSONObject responseJson = new JSONObject(jsonString);
 6
 7 //判断返回值是否和预期一致
 8 if (responseJson.getInt("statusCode") != 200) {
 9     //把断言失败置为真,即用例失败,并在结果树中显示FailureMessage
10     Failure = true;
11     FailureMessage = "statusCode的返回值有误";
12 }

(2).如果要验证respone中message的值是否与预期一致,需要怎么做呢?

 1 import org.json.*;
 2
 3 //获取上一个请求的返回
 4 String jsonString = prev.getResponseDataAsString();
 5 JSONObject responseJson = new JSONObject(jsonString);
 6
 7 String fbpcontent = responseJson.getString("message");
 8 if (!fbpcontent.equals("不能发送小于当前时间点的定时任务")) {
 9     //把断言失败置为真,即用例失败,并在结果树中显示FailureMessage
10     Failure = true;
11     FailureMessage = "message与实际值不一致";
12 }

假如我们有如下的response响应数据:

 1 {
 2     "statusCode": 200,
 3     "data": [
 4         {
 5             "i": "50356",
 6             "n": "项目一",
 7             "v": "2.0",
 8             "iconUrl": "",
 9         },
10         {
11             "i": "45280",
12             "n": "项目二",
13             "v": "3.0",
14             "iconUrl": "",
15         },
16         {
17             "i": "14656",
18             "n": "项目三",
19             "v": "2.6",
20             "iconUrl": "",
21         },
22         {
23             "i": "66213",
24             "n": "项目四",
25             "v": "5.0",
26             "iconUrl": "",
27         }
28     ]
29 }

(3).我们需要解析数组data的值,如何去解析呢?

 1 import org.json.*;
 2 import java.util.Arrays;
 3
 4 //获取上一个请求的返回
 5 String jsonContent = prev.getResponseDataAsString();
 6
 7 JSONObject response = new JSONObject(jsonContent);
 8 JSONArray groups = response.getJSONArray("data");
 9 String strData= groups.toString();
10 log.info(strData)

现在有更加复杂格式的respone数据:

 1 {
 2   "priorityGroups": {
 3     "proId": 1234,
 4     "name": "项目一",
 5     "groups": [
 6       {
 7         "id": "50356",
 8         "items": [
 9           {
10             "proId": 1360,
11             "n": "PC端",
12             "index": 1
13           },
14           {
15             "proId": 1361,
16             "n": "iOS端",
17             "index": 2
18           },
19           {
20             "proId": 1362,
21             "n": "安卓端",
22             "index": 4
23           }
24         ]
25       }
26     ]
27   },
28   "promotion": {
29     "proId": 1364,
30     "cusId": 84,
31     "name": "项目二",
32     "from": 1470821215,
33     "to": 1470907615,
34     "status": 1,
35     "objectId": 1069,
36     "createBy": 394,
37     "eff": 1470821215000,
38     "createTime": 1470821155000
39   }
40 }

(4).我们需要解析groups中的数据,需要怎么实现呢?

1 import org.json.JSONArray;
2 import org.json.JSONException;
3 import org.json.JSONObject;
4
5 String jsonContent = prev.getResponseDataAsString();
6
7 JSONObject response = new JSONObject(jsonContent);
8 JSONArray groups = response.getJSONObject("priorityGroups").getJSONArray("groups");
9 String strGroups = groups.toString();

 

原文地址:https://www.cnblogs.com/lwjnicole/p/9383776.html

时间: 2024-10-08 06:10:39

jmeter之beanshell断言---数据处理的相关文章

JMeter使用BeanShell断言

BeanShell简介 BeanShell是使用Java语法的一套脚本语言,在JMeter的多种组件中都有BeanShell的身影,如: 定时器:BeanShell Timer 前置处理器:BeanShell PreProcessor 采样器:BeanShell Sampler 后置处理器:BeanShell PostProcessor 断言:BeanShell Assert 监听器:BeanShell Listener 通过BeanShell可以对请求数据.响应数据或环境变量进行更加灵活的处理

Jmeter之BeanShell断言使用

1.Bean Shell常用内置变量 JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:用来记录日志文件,写入到jmeber.log文件,使用方法:log.info(“This is log info!”); ctx(JmeterContext)通过它来访问context,使用方法可参考:org.apache.jmeter.threads.JMeterContext. vars - (JMeterVariabl

Jmeter的BeanShell断言

1.什么是BeanShell断言? BeanShell断言可以使用beanshell脚本来执行断言检查,可以用于更复杂的个性化需求,使用更灵活,功能更强大,但是要能够熟练使用beanshell脚本. 在这里除了可以使用beanshell的内置变量外,主要通过Failure和FailureMessage来设置断言结果. Failure = false;-----表示断言成功, FailureMessage = "……"; ----自定义的成功信息 Failure = true;-----

jmeter之beanshell断言实例

.首先储存一个接口的响应结果,比如在http请求的后面添加beanshell后置处理器(BeanShell PostProcessor)来储存http请求的响应结果: 1 import org.json.*; 2 3 //获取上一个请求的返回值 4 String response = prev.getResponseDataAsString(); 5 //将返回值转换为json 6 JSONObject responseJson = new JSONObject(response); 7 //获

jmeter中beanshell断言的使用

简单使用beanshell的内容,进行测试内容的判断 这里通过断言内容,修改if的条件,达到发送警报邮件的功能 beanshell 代码如下:     SampleResult 等效于 prev log.error(vars.get("ReqStatus")); int count=Integer.parseInt(vars.get("errorcount").trim()); vars.put("result", SampleResult.ge

Jmeter BeanShell断言

这篇文章用来记录编写beanshell断言遇到得问题. 问题1:JSONObject not found in namespace 流程:在beanshell下写代码如下: 1 String response_data = prev.getResponseDataAsString(); 2 JSONObject data_obj = new JSONObject(response_data); 3 4 String current_page = data_obj.get("data")

Jmeter接口测试使用beanshell断言json返回

一般情况下响应断言就能解决很多问题,但是返回复杂的json时就需要用到beanshell断言. 举个例子 免费的接口API www.sojson.com/api/beian/sojson.com host:    www.sojson.com source:   api/beian/sojson.com (api/beian后面只能跟一级域名如:baidu.com或者sojson.com) 创建好线程组HTTP请求,给该请求加beanshell断言,代码如下,其中必须加prev.setSucce

jmeter通过BeanShell 脚本,实现对http请求参数的加密

jmeter一直是一款很好的接口和性能测试工具,它是开源的,不需要为此支付任何费用,而且可以下载源码,可以在修改源代码并在此基础上拓展自己的功能或插件,它可以跟ant和jenkins结合起来搭建自己的自动化接口测试框架.它的好还在于它是纯JAVA开发的,因此,它可以更好的跟JAVA对接,通过引入自己封装的jar文件,可以方便的实现对jmeter各种个性化需求的功能的拓展,下面以一个实际例子来说明jmeter怎么引入自己开发的java工具类来实现对http请求参数的加密处理. 在此之前,我们假设有

JMeter学习-007-JMeter 断言实例之一 - 响应断言

之前的文章中已经对如何录制 web 的请求进行了详细的描述,敬请参阅:JMeter学习-004-WEB脚本入门实战 同时,我们的手机应用(例如:京东.天猫.唯品会.携程.易迅 等等 App)所发出的请求,也可进行录制,只需要将手机连接的无线网络代理到本机(以 iPhone 为例,依次点击 [设置]/[无线局域网]/[连接网络信息,即网络右侧详细信息符号]/[HTTP代理]/手动],填写 服务器IP.端口 对应填写 JMeter 机器的 IP.JMeter HTTP 代理端口 即可),并将对应的端