51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3194|回复: 2
打印 上一主题 下一主题

[转贴] 使用 rest-assured 的 jsonpath 来进行 json 解析

[复制链接]
  • TA的每日心情
    无聊
    2024-7-12 13:16
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2017-6-27 14:19:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    前言使用 rest-assured 也有一段时间了,虽然这个框架有很多优势,但最钟爱的还是json解析这块,对于我这种不爱太动脑子的人来说,拿来主义最适合了基本也满足了测试工作的日常所需 ,当然对于无法满足又想一次性解决的问题,也只能自己苦逼的去改八改八了
    虽然也有在用JsonPath但与rest-assured 的JsonPath来说,rest的更加方便快捷,不过更恶心的JAONArray也在用......
    示例接口:http://testerhome.com/api/v3/top ... p;type=last_actived
    标准的JsonPathhttps://github.com/jayway/JsonPath
    JsonPath提供了很全的操作JSON的方法
    • 获取topcis列表
      List<String> topics = JsonPath.read(jsonStr,"$.topics")
    • 获取topcis第一条记录
      Object topics1 = JsonPath.read(jsonStr,"$.topics[0]");
    • 获取topcis第一条记录中title的值
      String topics1title = JsonPath.read(jsonStr,"$.topics[0].title");
    • 获取topcis中所有title的名称
      List<String> titles = JsonPath.read(jsonStr,"$.topics
    • .title");
    • 还有一个非常有意思的使用方法,通过属性进行获取
      比如:获取id=6421的对象、获取name == 恒温的
      Object topicid = JsonPath.read(jsonStr,"$.topics[?(@.id == 6421)]");   Object topicname = JsonPath.read(jsonStr,"$.topics
    • .user[?(@.name == '恒温')]");
    rest-assured的jsonpathhttps://github.com/rest-assured/rest-assured/blob/master/json-path/src/main/java/io/restassured/path/json/JsonPath.java
    • 获取topcis列表
      List<String> topics = jsonPath.getList("topics");
    • 获取topcis第一条记录
      String topics1 =jsonPath.getString("topics[0]");
    • 获取topcis第一条记录中title的值
      String topics1title = jsonPath.getString("topics[0].title");
    • 获取topcis中所有title的名称
      List<String> titles = jsonPath.getList("topics.title");
    • 和jsonpath一样也可以通过属性进行获取
      比如:获取id=6421的对象、获取name == 恒温的
      String topicid = jsonPath.getString("topics.findAll{topics -> topics.id == 6421}");String topicname = jsonPath.getString("topics.user.findAll{user -> user.name == '恒温'}");
    可以看出
    • rest-assured的语法上比jsonpath更加简明易懂,输写简单
    • rest-assured的取值方式也更加多样化,和JAONArray差不多:getString()、getInt()、getList()、getBoolean()等等
    • 取深层结构一直点下去就可以了,也不用考虑节点是不是列表、对象之类的了
    对于测试同学来说,这些是不是非常的方便,也很容易上手呢
    但是在实际测试过程中单纯的取值判断是不可能满足测试需要,往往还需要对结构进行整体验证,对于这类检查,只能自己苦逼的码代码了,本人非专业开发人士,相关卫道者请轻拍
    有需要的同学可以拿去改八改八耍~~ 当然如有问题也请及时CALL我,我也同步修改一下。。。。。。
    验证结构相关代码
    1. <blockquote>/**
    复制代码

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    该用户从未签到

    2#
    发表于 2017-6-27 15:09:41 | 只看该作者
    JSON 有结构描述规范 JSON Schema
    比如 Ruby 有 json-schema 这个库实现了 JSON Schema 规范,可以用来验证 JSON 结构,搜了下 Java 也有好几个实现
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-7-12 13:16
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    3#
     楼主| 发表于 2017-6-27 15:11:16 | 只看该作者
    巴黎的灯光下 发表于 2017-6-27 15:09
    JSON 有结构描述规范 JSON Schema
    比如 Ruby 有 json-schema 这个库实现了 JSON Schema 规范,可以用来验 ...

    被你说到重点了&#128514; 其实 rest 框架本身就带有这个功能 ,只不过现在我们主脚本了, 这样使用也没有代码量 ,也算适应现在工作模式, 我们也就没有再替换到jsonschema之类的了
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-15 01:17 , Processed in 0.071821 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表