[工具系列] 开源的 API 调试工具 Postwoman

介绍

随着 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 交互。


处理请求

  1. 发送请求:可以发送各种类型的 HTTP 请求(如 GET、POST、PUT、DELETE 等)来与服务器进行交互,检查接口的行为和响应。
  2. 请求参数:可以在请求中设置参数,包括查询参数(Query Params)、请求体(Body)、URL 参数等,用于模拟不同的 API 调用场景。
  3. 请求头:支持自定义请求头(Headers),如设置 Content-Type、Accept、User-Agent 等,用于控制请求的格式、类型或进行身份验证等。
  4. 权限 Authorization:支持多种授权方式,如 Basic Auth、Bearer Token 等,帮助开发者在发送请求时添加授权信息,确保请求的合法性。
  5. 响应处理:在发送请求后,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");
});


参考

Introduction to Hoppscotch - Hoppscotch Documentation

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

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

相关文章

【力扣 简单 C】746. 使用最小花费爬楼梯

目录 题目 解法一 题目 解法一 int min(int a, int b) {return a < b ? a : b; }int minCostClimbingStairs(int* cost, int costSize) {const int n costSize; // 楼顶&#xff0c;第n阶// 爬到第n阶的最小花费 // 爬到第n-1阶的最小花费从第n-1阶爬上第n阶的花费…

python+django开发带auth接口

pythondjango开发带auth接口 # coding utf-8 import base64 from django.contrib import auth as django_authfrom django.core.exceptions import ObjectDoesNotExist from django.http import JsonResponsefrom sign.models import Eventdef user_auth(request):"&quo…

RBAC权限模型如何让API访问控制既安全又灵活?

url: /posts/9f01e838545ae8d34016c759ef461423/ title: RBAC权限模型如何让API访问控制既安全又灵活? date: 2025-07-01T04:52:07+08:00 lastmod: 2025-07-01T04:52:07+08:00 author: cmdragon summary: RBAC权限模型通过用户、角色和权限的关联实现访问控制,核心组件包括用…

安达发|告别低效排产:APS高级排程如何助力电池企业智造升级?

在全球能源转型的背景下&#xff0c;动力电池、储能电池等市场需求快速增长&#xff0c;电池制造企业面临着订单波动大、工艺复杂、交期严格等挑战。传统的手工排产或基于ERP的简单计划模式已难以满足高效、精准的生产需求。APS高级排程通过智能算法优化生产计划&#xff0c;实…

数据结构20250620_数据结构考试

试卷01 天津金海通软件笔试题 选择题(4*416) 对于双向循环链表,在p指针所指的结点之后插入s指针所指结点的操作应为 p->nexts; s->prip; p->next->pris; s->nextp->nextp->nexts; p->next->pris; s->prip; s->nextp->nexts->pri …

4. 寻找正序数组的中位数

题目&#xff1a; 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例&#xff1a; 输入&#xff1a;nums1 [1,3], nums2 [2] 输出&#xff1a…

DeepSeek飞机大战小游戏HTML5(附源码)

用DeepSeek帮忙生成的飞机大战小游戏网页版&#xff0c;基于HTML5。 提示词prompt 帮我做一个网页版的飞机大战游戏 html5的游戏功能说明 玩家控制&#xff1a; 使用键盘方向键或WASD移动飞机 空格键发射子弹 移动设备支持触摸控制 游戏机制&#xff1a; 敌机会从屏幕顶部随机位…

全素山药开发指南:从防痒处理到高可用食谱架构

摘要&#xff1a;本文系统性解析山药的化学特性&#xff08;黏液蛋白/皂苷致痒机制&#xff09;及全素场景下的烹饪解决方案&#xff0c;提供6种高内聚低耦合的食谱实现&#xff0c;附完整防氧化与黏液控制技术方案。一、核心问题分析&#xff1a;山药处理中的“痛点”致痒物质…

OpenLayers 入门指南:序言

本专栏旨在帮助零GIS基础的开发人员系统掌握OpenLayers这一强大的开源Web地图库&#xff0c;通过 “理论实战” 结合的方式&#xff0c;逐步实现从创建地图到构建一个基础地图应用模版。无论你是前端开发者、GIS爱好者&#xff0c;都可以通过此专栏零基础开始用OpenLayers开发一…

WebRTC轻量学习 libdatachannel

最近想了解一些在浏览器中推送音视频流&#xff0c;寻找很多版本的代码&#xff0c;C、Go、Python等语言实现的webRTC协议。 按照搭建难度和快速实现首选Python版本的WebRTC&#xff0c;这种是最适合原型开发的。 选型&#xff1a;C的开源库libdatachannel Python的开源库Ai…

Vue2中的keep-alive:组件状态缓存与性能优化实战指南

目录 一、什么是keep-alive&#xff1f; 与普通组件切换的对比 二、核心用法详解 1. 基础用法&#xff1a;动态组件缓存 2. 路由视图缓存 3. 生命周期钩子 三、进阶配置与优化 1. 精准控制缓存组件 &#xff08;1&#xff09;include/exclude属性 &#xff08;2&…

FastAPI安全加固:密钥轮换、限流策略与安全头部如何实现三重防护?

url: /posts/f96ba438de34dc197fd2598f91ae133d/ title: FastAPI安全加固:密钥轮换、限流策略与安全头部如何实现三重防护? date: 2025-07-02T22:05:04+08:00 lastmod: 2025-07-02T22:05:04+08:00 author: cmdragon summary: FastAPI框架安全加固方案包括密钥轮换自动化、请…

NeighborGeo:基于邻居的IP地理定位(五)

NeighborGeo:基于neighbors的IP地理定位 X. Wang, D. Zhao, X. Liu, Z. Zhang, T. Zhao, NeighborGeo: IP geolocation based on neighbors, Comput. Netw. 257 (2025) 110896, 5. Case analysis 为了说明NeighborGeo在优化图结构和利用邻居信息进行预测方面的优势,将目标I…

Ethernet IP与Profinet共舞:网关驱动绿色工业的智慧脉动

Ethernet IP与Profinet共舞&#xff1a;驱动绿色工业的智慧脉动 光伏建筑一体化&#xff0c;建筑碳中和&#xff0c;在全球气候变化、国家碳达峰碳中和战略大背景下&#xff0c;敬畏生活、生产与自然和谐共处&#xff0c;确立自身资源循环高效利用的倒计时和路线图。 在全球气…

衡石科技破解指标管理技术难题:语义层建模如何实现业务与技术语言对齐?

在数字化转型的深水区&#xff0c;企业指标管理体系普遍面临一个核心矛盾&#xff1a;业务部门需要敏捷的数据洞察支撑决策&#xff0c;而IT部门却受困于复杂的数据架构和冗长的需求响应周期。这种矛盾的本质&#xff0c;是传统指标管理体系中“技术语言”与“业务语言”的割裂…

正品库拍照PWA应用的实现与性能优化|得物技术

一、 背景与难点 背景 目前得物ERP主要鉴别流程&#xff0c;是通过鉴别师鉴别提需到仓库&#xff0c;仓库库工去进行商品补图拍照&#xff0c;现有正品库59%的人力投入在线下商品借取/归还业务的操作端&#xff0c;目前&#xff0c;线下借取的方式会占用商品资源&#xff0c…

如何使用python识别出文件夹中全是图片合成的的PDF,并将其移动到指定文件夹

引言 在现代数字化工作流程中&#xff0c;无论是为机器学习模型处理数据&#xff0c;还是进行数字归档&#xff0c;区分原生文本 PDF&#xff08;例如&#xff0c;由文字处理器生成的报告&#xff09;和基于图像的 PDF&#xff08;例如&#xff0c;扫描的发票、档案文件&#…

淘系怎么做?

首先&#xff0c;要明确一点就是&#xff0c;补单不是“刷/单”&#xff0c;补单是为了给买家营造一个良好的购物氛围&#xff0c;毕竟再好的产品没有排名、没有权重&#xff0c;买家根本都没有机会看到你的产品&#xff0c;而且只有让淘宝感觉的产品有扶持必要它才会给你对应的…

网安系列【6】之[特殊字符] SQL注入揭秘:从入门到防御实战指南

文章目录一 真实案例二 SQL注入三 为什么危害堪比核弹&#xff1f;四 深入解剖攻击原理&#x1f3af; 4.1&#xff1a;探测SQL漏洞的存在&#x1f3af; 4.2&#xff1a;数据库信息探测&#x1f3af; 4.3&#xff1a;数据库信息探测&#x1f3af; 4.4&#xff1a;数据库信息进一…

Windows内核并发优化

Windows内核并发优化通过多层次技术手段提升多核环境下的系统性能&#xff0c;以下是关键技术实现方案&#xff1a; 一、内核锁机制优化‌ 精细化锁策略‌ 采用自旋锁&#xff08;Spinlock&#xff09;替代信号量处理短临界区&#xff0c;减少线程切换开销 对共享资源实施读…