小白教程:使用IntelliJ IDEA的HTTP Client进行接口验证

问题背景

这段时间使用开发一些Rest API相关的功能,准备做一些接口的简单测试,快速的验证一下API功能是否正常,正好觉得IntelliJ IDEA中的HTTP Client功能非常方便,它允许我们直接在编辑器中操作,正好记录一下。

解决方案

1、创建HTTP请求文件

在idea工具的Tools菜单中,选择HTTP Client,在里面选择创建一个测试请求,或者你创建一个.http.rest文件,通常在项目的src目录中,例如src/test/http/。你可以右键点击该目录,选择New -> File,然后输入文件名如api_requests.http

2、编写HTTP请求

在创建的文件中,可以编写HTTP请求。以下是几个基本请求的例子:

GET请求

http://localhost:8080/api/users发送一个GET请求,并期望JSON格式的响应。

GET http://localhost:8080/api/users
Accept: application/json

POST请求

http://localhost:8080/api/users发送一个POST请求,并期望JSON格式的响应。

POST http://localhost:8080/api/users
Content-Type: application/json
Accept: application/json{"name": "John Doe","email": "johndoe@example.com"
}

PUT请求

http://localhost:8080/api/users/1发送一个PUT请求,用来更新ID为1的用户信息。

PUT http://localhost:8080/api/users/1
Content-Type: application/json
Accept: application/json{"name": "Jane Doe","email": "janedoe@example.com"
}

DELETE请求

http://localhost:8080/api/users/1发送一个PUT请求,用来更新ID为1的用户信息。

DELETE http://localhost:8080/api/users/1

请求写好了之后,就是验证结果对不对问题,我们可以在控制台查看结果是否正确,只是几个接口,我们可以自己看一看,但是如果是几十个接口做测试,这再一个一个的去看,这就要了老命了,那么是不是还可以通过代码自动校验结果呢?

3、执行和验证请求

编写好请求后,你可以通过点击请求行旁边的运行图标(绿色的三角形)来执行它。执行后,IDEA会在下方的Run窗口中显示HTTP响应。

为了验证返回结果是否正确,你可以在HTTP请求下方写上一些验证条件:

GET http://localhost:8080/api/users
Accept: application/json> {%
client.test("Request executed successfully", function() {client.assert(response.status === 200, "Response status is not 200");
});
client.test("Response contains users", function() {var jsonData = JSON.parse(response.body);client.assert(jsonData.length > 0, "Response does not contain a list of users");
});
%}

在上面的例子中,我们不仅发送了GET请求,还定义了一些测试来验证请求是否成功执行,以及响应体是否包含用户数据。

接下来我们列举一些常见的方法和示例:

1、校验响应状态码:使用response.status来验证HTTP响应的状态码是否符合预期值。

GET http://localhost:8080/api/users
Accept: application/json> {% client.test("Status code is 200", function() {client.assert(response.status === 200, "Expected status code 200, but got " + response.status);
}); %}

2、校验响应正文内容:使用JSON.parse(response.body)来解析响应正文中的JSON,然后对其进行各种校验。

GET http://localhost:8080/api/users/1
Accept: application/json> {% client.test("User name is John", function() {var responseBody = JSON.parse(response.body);client.assert(responseBody.name === "John", "Expected name to be John");
}); %}

3、检查响应头:使用response.headers来验证响应头中的特定值。

GET http://localhost:8080/api/users
Accept: application/json> {% client.test("Content-Type is set to application/json", function() {var contentType = response.headers['Content-Type'] || response.headers['content-type'];client.assert(contentType.includes('application/json'), "Expected 'Content-Type' header to be 'application/json'");
}); %}

4、校验响应时间:使用response.timings来测量请求的响应时间,并确保响应足够快。

GET http://localhost:8080/api/users
Accept: application/json> {% client.test("Response time is under 500ms", function() {var timeTaken = response.timings.response;client.assert(timeTaken < 500, "Expected response time to be under 500ms");
}); %}

5、检查响应是否包含某字符串:验证响应正文中是否包含某个特定的字符串。

GET http://localhost:8080/api/users
Accept: application/json> {% client.test("Body contains 'John'", function() {client.assert(response.body.indexOf('John') !== -1, "Response body does not contain 'John'");
}); %}

6、检查数组或对象长度:验证JSONObject或JSONArray的长度与预期是否一致。

GET http://localhost:8080/api/users
Accept: application/json> {% client.test("User list is not empty", function() {var responseBody = JSON.parse(response.body);client.assert(responseBody.length > 0, "User list should not be empty");
}); %}

最后我们使用一个完整的示例,说明一下在使用IntelliJ IDEA的HTTP Client时,如何验证响应正文中的JSON数据?

这时候通常涉及以下几个步骤:

  1. 发送HTTP请求。
  2. 接收响应正文。
  3. 将响应正文中的JSON字符串转换为JavaScript对象。
  4. 对转换后的对象进行断言测试以验证数据。
GET http://localhost:8080/api/users/1
Accept: application/json> {% client.test("Validate user data", function() {var responseJson = JSON.parse(response.body);// 验证状态码是200client.assert(response.status === 200, "Expected 200 OK response");// 验证某个具体的属性值client.assert(responseJson.id === 1, "Expected user id to be 1");// 验证返回的JSON对象包含必要的属性client.assert("name" in responseJson, "Response json should include 'name' property");client.assert("email" in responseJson, "Response json should include 'email' property");// 验证属性值满足某种条件client.assert(responseJson.name.length > 0, "User name should not be empty");// 验证邮箱格式(这里采用简单的正则表达式,实际情况可能需要更严格的验证)client.assert(/^[^@]+@[^@]+.[^@]+$/i.test(responseJson.email), "Email format is invalid");// 验证数字类型的属性client.assert(typeof responseJson.age === 'number', "Age should be a number");// 验证布尔类型的属性client.assert(typeof responseJson.isActive === 'boolean', "isActive should be a boolean");// 验证返回的JSON数组client.assert(Array.isArray(responseJson.tags), "Tags should be an array");client.assert(responseJson.tags.includes("Developer"), "Tags should include 'Developer'");// 验证嵌套的JSON对象client.assert(responseJson.address.city === "New York", "User should be from New York");}); %}

在这个例子中,这段HTTP Client脚本在IntelliJ IDEA中执行以下操作:

  1. 发送一个GET请求到URL http://localhost:8080/api/users/1,期望获取application/json格式的响应。
  2. 使用client.test()定义了一个测试用例,名称为“Validate user data”。
  3. 将响应正文的内容解析成JSON对象,赋值给变量responseJson
  4. 验证HTTP响应状态码是否是200。
  5. 验证解析出的JSON对象中id属性值是否为1。
  6. 检查JSON对象是否包含nameemail属性。
  7. 验证name属性的值是否非空。
  8. 使用正则表达式检测email属性的格式是否符合简单的电子邮件格式。
  9. 确保age属性的类型是一个数字。
  10. 确保isActive属性的类型是布尔值。
  11. 验证tags是一个数组,并且包含字符串"Developer"。
  12. 验证嵌套的JSON对象中address对象的city属性的值是否是"New York"。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/31406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序使用接口wx.getLocation配置

开通时需详细描述业务&#xff0c;否则可能审核不通过 可能需要绑定腾讯位置服务&#xff0c;新建应该&#xff0c;绑定到小程序 配置 权限声明&#xff1a;在使用wx.getLocation前&#xff0c;需要在app.json的permission字段中声明对用户位置信息的使用权限&#xff0c;并提…

掘金淘宝API:揭秘店铺商品详情的智能获取秘籍

引言 在浩瀚的电商世界里&#xff0c;淘宝作为中国的电商巨头&#xff0c;不仅为买家提供了琳琅满目的商品选择&#xff0c;更为开发者开启了数据宝藏的大门。通过淘宝API&#xff0c;你能够轻松获取店铺所有商品的详尽信息&#xff0c;无论是为了市场分析、价格监控&#xff…

大数据学习-大数据介绍

意义 从海量的数据中分析出海量数据背后的价值 需要分析海量的数据&#xff0c;就需要存储、计算和分析 那就需要分布式多台计算机合适的工具来处理数据 工具 特点 大数据的核心工作&#xff1a;从海量的、高增长的、多类别的、信息密度低的数据中挖掘出高质量的结果 数据存储…

【CS.AI】决策树算法介绍: 原理与案例实现

文章目录 1. 简介1.1 决策树的基本原理核心概念: 2. 决策树的应用案例2.1 金融行业中的信用评分2.2 医疗诊断中的应用2.3 零售行业中的市场营销 3. 决策树的优缺点优点:缺点: 4. Python代码示例5 结论 [toc] ![在这里插入图片描述 1. 简介 决策树是一种常见且强大的机器学习算…

!=和!==的区别

在JavaScript中&#xff0c;! 和 ! 是两种不同类型的比较运算符&#xff0c;它们之间的主要区别在于它们如何处理比较中的类型转换&#xff08;也称为“强制类型转换”或“宽松比较”与“严格比较”&#xff09;。 !&#xff08;宽松比较&#xff09;: 如果两个操作数的类型不同…

本地部署 ChatTTS

本地部署 ChatTTS 0. ChatTTS 简介1. ChatTTS 亮点2. 创建虚拟环境3. 克隆代码4. 安装依赖5. 快速开始6. 访问 0. ChatTTS 简介 ChatTTS 是一款专门为对话场景&#xff08;例如 LLM 助手&#xff09;设计的文本转语音模型。 1. ChatTTS 亮点 对话式 TTS: ChatTTS 针对对话式…

基坑监测的内容及其重要性概述

随着城市建设的不断深入&#xff0c;基坑工程作为基础建设的重要组成部分&#xff0c;其安全性和稳定性成为了关注的重点。为了确保基坑施工过程中的安全&#xff0c;基坑监测显得尤为重要。本文将围绕基坑监测的内容展开&#xff0c;旨在帮助读者更好地理解其重要性及实施方法…

卫星导航与gazebo仿真

全球卫星导航系统(Global Navigation Satelite System,GNSS)&#xff0c;简称卫星导航&#xff0c;是室外机器人定位的一个主要信息来源。 卫星导航能给机器人提供什么信息&#xff1f; 正常工作时&#xff0c;实际上可以提供机器人所需的所有定位信息&#xff0c;包括&#x…

用了这么久的群晖NAS,它到底能干些什么?

从21年开始玩群晖也有几年了&#xff0c;除非面临断电或升级&#xff0c;这个小伙伴都任劳任怨的工作着 现在NAS也广泛应用于家庭和企业环境中了&#xff0c;今天盘点一下我用群晖NAS都干了些什么~ 1.文件存储与共享&#xff1a; 群晖NAS可以作为文件服务器&#xff0c;提供…

Windows——报错解决:Linux服务器下载的文件夹打不开

问题描述&#xff1a; 显示已经占用了内存&#xff0c;但是点进文件夹报错。 解决办法&#xff1a; Linux服务器上使用zip压缩后&#xff0c;然后下载到windows电脑&#xff0c;然后解压。

【Autoware】Autoware.universe安装过程与问题记录

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Autoware.universe安装过程与问题记录。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下…

七人拼团:互助共赢,电商新动力

在当前繁荣的电商领域中&#xff0c;七人互助拼团模式以其别具一格的激励机制和互助合作理念&#xff0c;成为了消费者和商家共同瞩目的焦点。接下来&#xff0c;我们将详细解读这一模式中的直推激励、滑落补偿以及团队成就奖&#xff0c;并探讨其如何体现互助合作的精神。 一、…

190.回溯算法:组合(力扣)

代码随想录 (programmercarl.com) 一、什么是回溯算法 回溯算法是一种通用的算法设计技巧&#xff0c;特别适用于解决组合、排列、子集等问题。它通过逐步构建解决方案&#xff0c;并在发现部分解决方案无效时撤销&#xff08;回溯&#xff09;部分计算&#xff0c;从而寻找所…

灵活的招聘管理系统有五种方法帮助成功招聘

还记得以前的时代吗&#xff1f;这取决于你的年龄&#xff0c;直到智能手机、流媒体电视和电子邮件出现。今天&#xff0c;任何活着的成年人都经历了技术上的巨大变化&#xff0c;这创造了一种新的行为方式。人才获取也是如此。 一个值得推荐的招聘管理系统 招聘团队被困在满足…

zlib库的交叉编译记录

zlib库的交叉编译记录 嵌入式项目中要用到zlib库&#xff0c;今天下载交叉编译了一遍&#xff0c;发现和其它库有点区别&#xff0c;这里记录一下。 1.首先clone到本地 git clone https://github.com/madler/zlib.git2.建立一个安装目录 mkdir ~/zlib-arm-install3.声明一个…

C# —— 构造函数

什么是构造函数 构造函数: 一般在函数为类的属性初始值的作用&#xff0c;构造函数的名称类名 在类里面定义构造函数 方法名和类名同名 不能带返回值类型 void/非void 不能有 // 创建一个构造函数 class People {public string Name { get; set; }public int Age { get; set;…

用于制作耳机壳的UV树脂耳机壳UV胶价格高不高?

用于制作耳机壳的UV树脂耳机壳UV胶价格高不高&#xff1f; 制作耳机壳的UV树脂价格相对于一些其他材料可能会略高&#xff0c;但具体的价格取决于多个因素&#xff0c;如品牌、型号、质量等。一些高端的UV树脂品牌和型号可能会价格较高&#xff0c;但它们也通常具有更好的性能…

C语言入门3-逻辑控制

If-Else 语法 if (expression)statement1 elsestatement2Else-If 语法 if (expression1) {// 条件expression1为真时执行的语句 } else if (expression2) {// 条件expression1为假&#xff0c;且expression2为真时执行的语句 } else if (expression3) {// 条件expression1和…

nvidia历史版本驱动

打开官网 https://www.nvidia.cn windows GTX-1060为例 标准

【中学教资科目二】03中学教学

03中学教学 第一节 教学的任务1.1 教学的任务 第二节 教学过程2.1 教学过程的本质2.2 教学过程的基本规律 第三节 教学原则3.1 因材施教原则 第四节 教学方法4.1 我国中学常用的教学方法4.2 国外常用的教学方法 第五节 教学组织形式、教学工作基本环节和教学评价5.1 现代其他教…