• JSONPath - 用于JSON的XPath

  • 用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具。

考虑到接下来计划开发一个自动化测试平台,在接口测试中会设置多个检查点,这时想到使用JSONPath来做检查点的校验。

import com.alibaba.fastjson.JSONPath;
import java.util.HashMap;
import java.util.Map; public class JSONPathDemo { public static void main(String[] args) { String json = "{\"store\":{\"book\":[{\"title\":\"高效Java\",\"price\":10.2},{\"title\":\"设计模式\",\"price\":12.21},{\"title\":\"重构\",\"isbn\":\"553\",\"price\":8},{\"title\":\"虚拟机\",\"isbn\":\"395\",\"price\":22}],\"bicycle\":{\"color\":\"red\",\"price\":19}}}";
//String expression1 = (String) JSONPath.read(json,"$.store.book[0].title");
//int expression2 = (int) JSONPath.read(json,"$.store.book[0].price"); // 设置的检查点,多个检查点用;分隔
String params = "$.store.book[0].price=10.2;$.store.book[1].title=设计模式";
String[] data = params.split(";");
// 定义测试结果的标记
Boolean flag = false; //遍历数组,获取每一个检查点在json中对应的数据,存在map中
Map<String, Object> map = new HashMap<>();
for (int i = 0; i < data.length; i++) {
map.put(data[i].split("=")[0], data[i].split("=")[1]);
System.out.println("检查点"+ (i+1) +"返回的数据:" + JSONPath.read(json, data[i].split("=")[0]));
System.out.println("检查点"+ (i+1) +"断言的数据:" + map.get(data[i].split("=")[0])); //判断检查点数据与返回的json数据是否一致
if (JSONPath.read(json, data[i].split("=")[0]) instanceof String) {
if (JSONPath.read(json, data[i].split("=")[0]).equals(map.get(data[i].split("=")[0]))) {
//System.out.println("Pass A");
flag = true;
} else {
//System.out.println("Fail A");
flag = false;
break;
}
} else { // Object转String
if ((JSONPath.read(json, data[i].split("=")[0]).toString()).equals((map.get(data[i].split("=")[0])))) {
//System.out.println("Pass B");
flag = true;
} else {
//System.out.println("Fail B");
flag = false;
break;
}
}
}
if (flag) {
System.out.println("【测试执行结果:通过】");
} else {
System.out.println("【测试执行结果:失败】");
}
}
}

最新文章

  1. 纪念BLives 1.0版本发布
  2. MVC学习系列6--使用Ajax加载分部视图和Json格式的数据
  3. 回调函数透彻理解Java
  4. Atitit.java expression fsm 表达式词法分析引擎 v2 qaa.docx
  5. js获取某个ID的class名称
  6. cocos2dx游戏开发——捕鱼达人mini版学习笔记(一)——FishAchor的搭建
  7. powershell 参数 [String]Service
  8. user-agent查询
  9. python之list
  10. linux qcom LCD framwork
  11. shell脚本示例:计算毫秒级、微秒级时间差
  12. A1129. Recommendation System
  13. centos中PATH环境变量查看和修改
  14. TabControl TabPage添加关闭按钮
  15. Flex 界面初始化 自定义 预加载 类!
  16. Java中带标签的break,continue
  17. 3、在Shell程序中使用的参数
  18. C++类继承--构造函数时先构造基类
  19. Apache 工作模式详解
  20. Java设计模式—责任链模式

热门文章

  1. nginx配置反向代理,解决前端开发的跨域问题
  2. Spring基础09——Bean的自动装配
  3. 安信可ESP-12F(8266)模块烧录问题解决:示 :ESP8266 Chip stub error esp_stub_an
  4. Linux架构之Nginx 常见问题
  5. UVa10426
  6. Manacher || Luogu P3805【模板】manacher算法
  7. :last-child----represents the last element among a group of sibling elements.
  8. CF1242B. 0-1 MST
  9. linux运维、架构之路-MySQL备份与恢复(四)
  10. Codeforces 980D