加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

jmeter beanshell断言(数据处理)

发布时间:2020-12-14 04:40:43 所属栏目:大数据 来源:网络整理
导读:在做接口测试时,对响应数据的校验是非常重要的部分;在使用Jmeter进行接口测试时,有多种respone校验方式,比如响应断言、BeanShell断言等等, BeanShell断言可以自定义断言,自由灵活的用脚本实现断言 。 什么是BeanShell ? 小型嵌入式Java源代码解释器,

在做接口测试时,对响应数据的校验是非常重要的部分;在使用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",{
            "i": "14656","n": "项目三","v": "2.6",{
            "i": "66213","n": "项目四","v": "5.0",}
    ]
}

?

(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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读