分享

【Jmeter】BeanShell断言

 小猪窝969 2018-04-19

API接口测试中,对于接口请求respone的校验是非常重要的一个环节



在使用Jmeter进行接口测试时,有多种respone校验方式,比如响应断言、BeanShell断言等等,BeanShell断言可以自定义断言,自由灵活的用脚本实现断言



什么是BeanShell

小型嵌入式Java源代码解释器,具有对象脚本语言特性,能够动态地执行标准JAVA语法

运行其内部的脚本处理Java应用程序,还可以在运行过程中动态执行你java应用程序执行java代码,因为BeanShell是用java写的,运行在同一个虚拟机的应用程序,因此可以自由地引用对象脚本并返回结果



先看看这样的respone





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


现在需要验证statusCode的值是否为200





import org.json.*;import java.util.Arrays;//获取上一个请求的返回String jsonString = prev.getResponseDataAsString();
JSONObject responseJson = new JSONObject(jsonString);//判断返回值是否和预期一致if (responseJson.getInt("statusCode") != 200) {//把断言失败置为真,即用例失败,并在结果树中显示FailureMessageFailure = true;
    FailureMessage = "statusCode的返回值有误";
}


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





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


现有这样格式的respone数据





{
    "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": "",
        }
    ]}


需要解析数组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  
  }  
}  


如果需要解析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(); 


BeanShell的获取数据解析,还可以使用Gson提供的方法





//prev.getResponseDataAsString是Jmeter提供的方法,可以调取上次请求的响应字符串  response = prev.getResponseDataAsString(); 

//使用Gson提供的方法解析jsonJsonParser parser = new JsonParser();    
JsonObject responseObj = (JsonObject) parser.parse(response);
               

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多