介绍
随着 Web 应用的复杂性增加,API 测试已成为开发中不可或缺的一部分,无论是前端还是后端开发,确保 API 正常运行至关重要。
Postman 长期以来是开发者进行 API 测试的首选工具,但是很多基本功能都需要登陆才能使用,例如创建和管理 Collections(请求集合),这对开发者并不友好。
Postwoman(现已更名为 Hoppscotch)是 Postman 的开源替代品。Hoppscotch 保留了 Postman 的核心功能,同时拥有更轻量、直观的界面,且完全开源,允许开发者自由修改和扩展。
版权问题
官网指出: Hoppscotch Community Edition 是免费和开源的,可以将其用于个人和商业项目,是个人和小型团队的绝佳选择。
Hoppscotch Community Edition is free and open-source. It is licensed under the MIT License. You can use it for personal and commercial projects. It is a great choice for individuals and small teams.
一张图了解基本功能
本文重点介绍 Hoppscotch 在单机版环境下的使用,而非团队协作功能。对于大多数开发者而言,进行 API 测试时往往更多依赖于个人需求,无需依赖登录账户或与他人协作。
界面上的主要功能包括以下
请求类型选择:
- 位于界面顶部,可以选择不同的 HTTP 请求类型(GET、POST、PUT、DELETE、PATCH、OPTIONS、HEAD),用于测试不同类型的 API 操作。
请求 URL:
- 在输入框中,可以输入完整的 API 请求 URL,支持自动补全功能,帮助快速输入。
请求参数:
- Query Params:可以通过键值对形式输入 URL 查询参数,自动添加到请求 URL 后面。
- Body:用于发送请求体(例如 POST 请求的 JSON、表单数据等)。支持不同的格式(JSON、form-data、x-www-form-urlencoded 等)。
- Headers:可以自定义请求头部,添加内容类型、身份验证信息等。
权限(Authorization):
- 允许选择不同的授权方式,如 Basic Auth、Bearer Token、OAuth2 等,用于向 API 发送带有身份验证信息的请求。
请求按钮:
- Send 按钮用于发送请求,执行 API 调用。
响应部分:
- 响应体:显示从服务器返回的响应内容,支持 JSON 格式的格式化显示,方便开发者查看响应数据。
- 状态码:显示响应的 HTTP 状态码(如 200、404、500 等),帮助开发者判断请求的成功与否。
- 响应时间:显示请求的响应时间,帮助开发者评估 API 的性能。
- 响应头:展示响应的 headers,提供关于返回的元数据(如 Content-Type、Cache-Control 等)。
环境管理:
- 可以设置多个环境(如开发环境、生产环境等),并在不同的环境中切换,避免手动修改 URL 或变量。
历史记录:
- 提供请求历史记录功能,用户可以查看和重用之前发送过的请求,便于测试和调试。
控制台输出:
- 显示发送请求和接收响应的详细日志,帮助开发者调试请求的各个环节。
WebSocket 支持:
- 支持 WebSocket 请求,可以实时发送和接收消息,测试与 WebSocket 协议的 API 交互。
处理请求
- 发送请求:可以发送各种类型的 HTTP 请求(如 GET、POST、PUT、DELETE 等)来与服务器进行交互,检查接口的行为和响应。
- 请求参数:可以在请求中设置参数,包括查询参数(Query Params)、请求体(Body)、URL 参数等,用于模拟不同的 API 调用场景。
- 请求头:支持自定义请求头(Headers),如设置 Content-Type、Accept、User-Agent 等,用于控制请求的格式、类型或进行身份验证等。
- 权限 Authorization:支持多种授权方式,如 Basic Auth、Bearer Token 等,帮助开发者在发送请求时添加授权信息,确保请求的合法性。
- 响应处理:在发送请求后,Postwoman 会显示响应数据,包括响应体(Response Body)、状态码(Status Code)、响应时间(Response Time)等,帮助开发者分析 API 响应的准确性和性能。
环境变量
变量类型
在 Hoppscotch 中,常用的变量类型包括 全局变量 和 环境变量:
全局变量:这些变量可以在整个 Hoppscotch 中访问,适用于所有请求和环境。它们的作用范围最广,适合存储在不同测试中需要共享的数据。
环境变量:这些变量的作用范围限于特定的环境。环境变量非常适用于需要为不同环境(例如生产环境和暂存环境)提供相同变量集的场景。通过使用环境变量,可以方便地切换和管理不同环境下的配置和数据。
创建环境
添加环境变量
访问环境变量
通过以下格式引用变量来访问请求部分中的变量 <<variable_name>>
脚本
Hoppscotch 提供了一个特殊的 pw 对象,其中包含了用于编写脚本和进行 API 测试的多种方法。该 pw 对象是全局可用的,可以通过直接引用其名称来访问和调用这些方法,方便地在测试过程中执行各种操作和自定义逻辑。
Hoppscotch 的脚本编辑器中附有很多代码模板,用户可以直接鼠标点击使用模板,然后修改模板中的参数即可,无需担心脚本不会写的问题。
请求前脚本 Pre-request Script
设置环境变量
pw.env.set() 可以直接用于快速方便的环境变量定义。它可用于更好地组织请求代码。
pw.env.set("baseURL", "https://httpbin.org");
pw.env.set("method", "get");
这些变量可以在请求部分中访问,方法是在双尖括号 <<variable_name>> 中引用它们。
生成 random Values 以测试 API
以将 <<randomValue>> 添加到端点 URL 为例子:
https://reqres.in/api/users/<<randomValue>>
现在,在 pre-request script 选项卡中添加以下逻辑:
var random = Math.floor(Math.random() * 10);
pw.env.set("randomValue", random.toString());
这将为环境变量 randomValue 分配一个随机数,API 将返回与该随机值关联的随机用户。
请求后测试 Post-request Script
假设某个请求的响应数据如下:
{
"data": {
"id": 10,
"email": "byron.fields@reqres.in",
"first_name": "Byron",
"last_name": "Fields",
"avatar": "https://reqres.in/img/faces/10-image.jpg"
},
"support": {
"url": "https://contentcaddy.io?utm_source=reqres",
"text": "Tired of writing endless social media content?"
}
}
测试响应状态码
pw.test("Response is ok", () => {
pw.expect(pw.response.status).toBe(200);
});
断言响应数据有效
pw.test("Check first name", () => {
const user = pw.response.body.data;
pw.expect(user.first_name).toBe("Byron");
pw.expect(user.first_name).toBeType("string");
});