您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > javascript

接口自动化测试如何搞定 json 响应断言?

时间:2022-10-05 14:00:07  来源:今日头条  作者:白橘透着黑

在之前的的章节已经简单介绍了如何断言接口的响应值,在实际工作过程中,json 的响应内容往往十分复杂,面对复杂的 json 响应体,主要通过 JSONPath 解决。JSONPath 提供了强大的 JSON 解析功能,使用它自带的类似 XPath 的语法,可以更便捷灵活的用来获取对应的 JSON 内容。

环境准备

Python/ target=_blank class=infotextkey>Python 版本安装

pip install jsonpath

JAVA 版本安装

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.6.0</version>
</dependency>

https://qrcode.ceba.ceshiren.com/link?from=toutiao&name=toutiao&project_id=qrcode&author=anlinger

XPath 和 JSONPath 语法

下表是 XPath 和 JSONPath 语法进行对比,这两者的定位方式,有着非常多的相似之处:

 

image1020×1134 41.3 KB

比如同样一个字段,XPath 中的语法是:

/store/book[0]/title

JSONPath 的语法是:

$.store.book[0].title
$['store']['book'][0]['title']

下面是一组 json 结构,分别通过 JSONPath 和 XPath 的方式提取出来

{
  "store": {
    "book": [
      {
        "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      {
        "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      },
      {
        "category": "fiction",
        "author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": 8.99
      },
      {
        "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}

下表列出了 XPath 与 JSONPath 的对比:

 

1034×1044 44.6 KB

更多内容请访问:
https://goessner.NET/articles/JsonPath

https://qrcode.ceba.ceshiren.com/link?from=toutiao&name=toutiao&project_id=qrcode&author=anlinger

实战练习

以下是 测试人生 | 从外包菜鸟到测试开发,薪资一年翻三倍,连自己都不敢信!(附面试真题与答案) 这个接口的正常响应值(因响应篇幅过长,删除了部分内容):

{
  'post_stream': {
    'posts': [
      {
        'id': 17126,
        'name': '思寒',
        'username': 'seveniruby',
        'avatar_template': '/user_avatar/ceshiren.com/seveniruby/{size}/2_2.png',
        'created_at': '2020-10-02T04:23:30.586Z',
        'cooked': '<p>一直以来的平均涨薪率在30%以上,这次刷新的记录估计要保持好几年了</p>',
        'post_number': 6,
        'post_type': 1,
        'updated_at': '2020-10-02T04:23:48.775Z',
        'reply_to_post_number': None,
        'reads': 651,
        'readers_count': 650,
        'score': 166.6,
        'yours': False,
        'topic_id': 6950,
        'topic_slug': 'topic',
        'display_username': '思寒',
        'primary_group_name': 'python_12',
        ...省略...
      },
    ],
  },
  'timeline_lookup': ,
  'suggested_topics':,
  'tags': [
    '精华帖',
    '测试开发',
    '测试求职',
    '外包测试'
  ],
  'id': 6950,
  'title': '测试人生 | 从外包菜鸟到测试开发,薪资一年翻三倍,连自己都不敢信!(附面试真题与答案)',
  'fancy_title': '测试人生 | 从外包菜鸟到测试开发,薪资一年翻三倍,连自己都不敢信!(附面试真题与答案)',

}

接下来则需要实现一个请求,断言以上的响应内容中 name 字段为’思寒’所对应的 cooked 包含"涨薪"

Python 演示代码

JSONPath 断言

import requests
from jsonpath import jsonpath
r = requests.get("https://ceshiren.com/t/topic/6950.json").json()
result = jsonpath(r, "$..posts[?(@.name == '思寒')].cooked")[1]
assert "涨薪" in result

Java 演示代码

JSONPath 断言

import com.jayway.jsonpath.JsonPath;
import org.junit.jupiter.api.Test;
import java.util.List;
import static io.restassured.RestAssured.given;
public class jsonTest {

    @Test
    void jsonTest() {
        //获取响应信息,并转成字符串类型
        String res = given().when().
                get("https://ceshiren.com/t/topic/6950.json")
                .then().extract().response().asString();
        //通过jsonpath表达式提取需要的字段
        List<String> result = JsonPath.read(res, "$..posts[?(@.name == '思寒')].cooked");
        // 断言验证
        assert result.get(1).contAIns("涨薪");
    }
}


https://qrcode.ceba.ceshiren.com/link?from=toutiao&name=toutiao&project_id=qrcode&author=anlinger



Tags: json   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
使用 Mapstructure 解析 Json,你学会了吗?
背景前几天群里的小伙伴问了一个这样的问题:图片其实质就是在面对 value 类型不确定的情况下,怎么解析这个 json?我下意识就想到了 [mapstructure](https://github.com/mitchel...【详细内容】
2023-12-27  Search: json  点击:(153)  评论:(0)  加入收藏
解码Python JSON:从基础到高级,掌握使用的精髓
目录 简介 JSON基础 将Python对象转换为JSON 将JSON转换为Python对象 文件操作与JSON 高级应用示例 总结1. 简介JSON(JavaScript Object Notation)是一种用于数据交换...【详细内容】
2023-08-24  Search: json  点击:(231)  评论:(0)  加入收藏
前端 Jsonp 跨域方案原理
JSONP(JSON with Padding)是一种常用的跨域数据请求策略,它的基本原理是利用 <script> 标签的 src 属性没有同源策略限制的特性来达到跨域的目的。我们来详细解析 JSONP 的工作...【详细内容】
2023-06-01  Search: json  点击:(230)  评论:(0)  加入收藏
Java几种常用 JSON 库性能比较,哪家最强?
1、 我代码就加了一行log日志,结果引发了P1的线上事故2、14个SpringBoot优化小妙招,看完后同事说写代码像写诗!3、 干掉 “重复代码”,这三种方式绝了!4、 我在代码里面故意留个...【详细内容】
2022-12-01  Search: json  点击:(357)  评论:(0)  加入收藏
如何在 .NET MAUI 中加载 json 文件?
引言:按core传统方式添加 AddJsonFile("appsettings.json") 在windows平台和ssr工作正常,但是在 ios 和 android 无法用这种方式,因为资源生成方式不一样. 使用内置资源方式...【详细内容】
2022-11-14  Search: json  点击:(409)  评论:(0)  加入收藏
我的朋友因为 JSON.stringify 差点丢了奖金
这是发生在我朋友身上的真实故事,他的绰号叫胖头。由于JSON.stringify的错误使用,他负责的其中一个业务模块上线后出现了bug,导致某个页面无法使用,进而影响用户体验,差点让他失去年终奖。...【详细内容】
2022-11-07  Search: json  点击:(260)  评论:(0)  加入收藏
如何在 Spring Boot 中验证 JSON 请求正文
我们将研究 request-validator 库,它能够将用户输入与预定义的一组规则(如 required、max、min、email 等)进行比较。我们有时会遇到由于用户提供的输入长于数据库列大小甚至不...【详细内容】
2022-10-31  Search: json  点击:(419)  评论:(0)  加入收藏
Springboot 之 Filter 实现 Gzip 压缩超大 json 对象
简介在项目中,存在传递超大 json 数据的场景。直接传输超大 json 数据的话,有以下两个弊端 占用网络带宽,而有些云产品就是按照带宽来计费的,间接浪费了钱 传输数据大导致网络...【详细内容】
2022-10-10  Search: json  点击:(408)  评论:(0)  加入收藏
 接口自动化测试如何搞定 json 响应断言?
在之前的的章节已经简单介绍了如何断言接口的响应值,在实际工作过程中,json 的响应内容往往十分复杂,面对复杂的 json 响应体,主要通过 JSONPath 解决。JSONPath 提供了强大的 J...【详细内容】
2022-10-05  Search: json  点击:(362)  评论:(0)  加入收藏
发现一款 JSON 可视化工具神器,太爱了
正文 JSON Hero 这是一个简单实用的 JSON 工具,通过简洁美观的 UI 增强的额外功能,使得阅读和理解 JSON 文档变得更容易、直观。支持多种视图以便查看 JSON:列视图、树视图、JS...【详细内容】
2022-08-12  Search: json  点击:(757)  评论:(0)  加入收藏
▌简易百科推荐
JavaScript的异步编程常见模式
在JavaScript中,异步编程是一种处理长时间运行操作(如网络请求或I/O操作)的常见方式。它允许程序在等待这些操作完成时继续执行其他任务,从而提高应用程序的响应性和性能。JavaS...【详细内容】
2024-04-12  靳国梁    Tags:JavaScript   点击:(2)  评论:(0)  加入收藏
17 个你需要知道的 JavaScript 优化技巧
你可能一直在使用JavaScript搞开发,但很多时候你可能对它提供的最新功能并不感冒,尽管这些功能在无需编写额外代码的情况下就可以解决你的问题。作为前端开发人员,我们必须了解...【详细内容】
2024-04-03  前端新世界  微信公众号  Tags:JavaScript   点击:(6)  评论:(0)  加入收藏
你不可不知的 15 个 JavaScript 小贴士
在掌握如何编写JavaScript代码之后,那么就进阶到实践&mdash;&mdash;如何真正地解决问题。我们需要更改JS代码使其更简单、更易于阅读,因为这样的程序更易于团队成员之间紧密协...【详细内容】
2024-03-21  前端新世界  微信公众号  Tags:JavaScript   点击:(27)  评论:(0)  加入收藏
又出新JS运行时了!JS运行时大盘点
Node.js是基于Google V8引擎的JavaScript运行时,以非阻塞I/O和事件驱动架构为特色,实现全栈开发。它跨平台且拥有丰富的生态系统,但也面临安全性、TypeScript支持和性能等挑战...【详细内容】
2024-03-21  前端充电宝  微信公众号  Tags:JS   点击:(26)  评论:(0)  加入收藏
构建一个通用灵活的JavaScript插件系统?看完你也会!
在软件开发中,插件系统为应用程序提供了巨大的灵活性和可扩展性。它们允许开发者在不修改核心代码的情况下扩展和定制应用程序的功能。本文将详细介绍如何构建一个灵活的Java...【详细内容】
2024-03-20  前端历险记  微信公众号  Tags:JavaScript   点击:(20)  评论:(0)  加入收藏
对JavaScript代码压缩有什么好处?
对JavaScript代码进行压缩主要带来以下好处: 减小文件大小:通过移除代码中的空白符、换行符、注释,以及缩短变量名等方式,可以显著减小JavaScript文件的大小。这有助于减少网页...【详细内容】
2024-03-13  WangLiwen    Tags:JavaScript   点击:(2)  评论:(0)  加入收藏
跨端轻量JavaScript引擎的实现与探索
一、JavaScript 1.JavaScript语言JavaScript是ECMAScript的实现,由ECMA 39(欧洲计算机制造商协会39号技术委员会)负责制定ECMAScript标准。ECMAScript发展史: 2.JavaScript...【详细内容】
2024-03-12  京东云开发者    Tags:JavaScript   点击:(2)  评论:(0)  加入收藏
面向AI工程的五大JavaScript工具
令许多人惊讶的是,一向在Web开发领域中大放异彩的JavaScript在开发使用大语言模型(LLM)的应用程序方面同样大有价值。我们在本文中将介绍面向AI工程的五大工具,并为希望将LLM...【详细内容】
2024-02-06    51CTO  Tags:JavaScript   点击:(53)  评论:(0)  加入收藏
JS小知识,使用这6个小技巧,避免过多的使用 if 语句
最近在重构我的代码时,我注意到早期的代码使用了太多的 if 语句,达到了我以前从未见过的程度。这就是为什么我认为分享这些可以帮助我们避免使用过多 if 语句的简单技巧很重要...【详细内容】
2024-01-30  前端达人  今日头条  Tags:JS   点击:(58)  评论:(0)  加入收藏
18个JavaScript技巧:编写简洁高效的代码
本文翻译自 18 JavaScript Tips : You Should Know for Clean and Efficient Code,作者:Shefali, 略有删改。在这篇文章中,我将分享18个JavaScript技巧,以及一些你应该知道的示例...【详细内容】
2024-01-30  南城大前端  微信公众号  Tags:JavaScript   点击:(71)  评论:(0)  加入收藏
站内最新
站内热门
站内头条