原文链接:http://www.cnblogs.com/jtestroad/p/8459439.html

http://blog.csdn.net/lluozh2015/article/details/72834014

【Jmeter】BeanShell断言--数据处理

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

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

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

先看看这样的respone

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

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

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

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

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

现有这样格式的respone数据

  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. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

 

需要解析数组data的值,如何去解析呢?

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

现在有更加复杂格式的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. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

如果需要解析groups中的数据,需要怎么实现呢?

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

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

  1. //prev.getResponseDataAsString是Jmeter提供的方法,可以调取上次请求的响应字符串
  2. response = prev.getResponseDataAsString();
  3. //使用Gson提供的方法解析json
  4. JsonParser parser = new JsonParser();
  5. JsonObject responseObj = (JsonObject) parser.parse(response);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

转载于:https://www.cnblogs.com/jtestroad/p/8459439.html

posted on 2019-12-06 13:27  淡然~~浅笑  阅读(1330)  评论(0)    收藏  举报