如果你还没被 Postman 折磨过,那大概率是还没把它装到一台 64GB 内存的机器上。作为一个几乎每天都要调试接口的开发者,我把 Postman 用了整整三年,最后实在忍不了它的体积、启动速度和无孔不入的登录引导,终于在一个下午完成了迁移。现在我的开发机上用的是一套 10 MB 级别的 Postman 替代品,启动基本不到 1 秒,甚至直接打开浏览器就能用。这篇文章就把我这次替换的完整过程、选型对比、迁移踩坑和自动化配置一次讲清楚,给同样被 Postman 卡到崩溃的人一个能直接抄作业的方案。
1. 为什么我要把用了三年的 Postman 卸掉
1.1 Postman 把简单功能做复杂了
接口调试的核心需求其实很朴素:输入 URL、选个方法、填好 Header 和 Body、点发送、看返回。这个流程在 Postman 里当然也能做,但每次启动它都要经历一段漫长的加载,转完菊花还得等侧边栏同步,日常调一个接口要付出的“无意义等待”越来越多。
我机器上实测的 Postman 安装包接近 100 MB,装完占用更是轻松超过 300 MB,这还不算它运行时每个 Tab 吃掉的内存。开三个请求页签,再看一下系统监视器,你会发现自己不是在做接口测试,而是在跑一个小型 IDE。我理解功能全面是一种优点,但对一个只想“发请求、看响应”的人来说,这种全面就是一种资源浪费。
除了体积,启动速度才是压垮我的最后一根稻草。开发时我经常要频繁切换接口工具和编辑器,Postman 每次冷启动都要等好几秒,热启动也常有延迟,急性子根本忍不了。标题里那句“启动不到 1 秒”,对用惯了 Postman 的人来说,真的是用过就回不去的体验。
1.2 被“免费”绑架的登录和云同步
另一个让我越来越不舒服的点是强制登录。早年用 Postman 还没这么激进,现在打开应用不登录,很多功能直接不可用,比如同步集合、共享工作区、甚至某些版本里的基础体验都会被打折。每次换电脑或重新安装,都得先走一遍账号流程,再等云端把集合拉下来。
我能理解云同步对团队协作有价值,但作为个人开发者,我只想本地保存我自己的接口集合,不需要每次打开都先连一遍服务器。这也是我在寻找替代品时特别看重“免登录、本地优先、离线可用”这几个特质的原因。
说到免费,Postman 虽然有免费版本,但一些高级功能像团队协作、历史记录限制、自动化运行等,都在往付费方向收拢。对于一个个人项目或者小团队来说,为了几个接口调试功能去订阅套餐,性价比实在不高。开源、免费、无强制登录的轻量工具,在这个场景下显然更合适。
1.3 我的替代品筛选清单
决定迁移之后,我先列了一份硬性需求清单,用来过滤市面上所有号称“Postman 替代品”的工具:
- 体积小,启动快,不占用太多内存;最好免安装或零安装。
- 不需要强制账号登录,数据可以本地存储。
- 必须支持常用 HTTP 方法、Headers、Body、环境变量和集合管理。
- 能导入 Postman 导出的集合文件,降低迁移成本。
- 能写断言、提取返回值,最好还能在命令行跑自动化测试,方便接入 CI。
带着这份清单,我把主流的几个轻量方案都试了一遍,最终沉淀出三个靠谱选项:Hoppscotch、Thunder Client、Bruno。下面会逐个聊它们的优缺点,方便你根据自己的使用习惯做选择。
2. 三类主流轻量替代品对比
2.1 Hoppscotch:浏览器即开,零安装
Hoppscotch 是我最近用得最多的一个。它最大的特点是开源、免费、界面极简,而且直接在浏览器里打开就能用,不需要安装任何客户端。这个特性完美契合了“在线 Postman 运行”的需求,只要电脑有浏览器和网络,随时都能开个页面开始调试接口。
它支持的功能非常全面:REST API、GraphQL、WebSocket、SSE(Server-Sent Events),甚至 MQTT 都覆盖了。变量、环境、集合、脚本断言、导入导出 Postman 集合一应俱全。最舒服的是它自带中文界面,不用像 Postman 那样再折腾汉化包。
当然它在浏览器的环境下有个绕不开的限制:跨域问题。当页面脚本直接向其他域名的接口发请求时,会受浏览器 CORS 策略限制。这个问题后面我会专门讲怎么绕,日常开发中并不算致命伤。总体来说,Hoppscotch 是我当前的主力工具。
2.2 Thunder Client:长在编辑器里的闪电工具
如果你平时主要用 VS Code 开发,那 Thunder Client 可能是最适合你的那一个。它是一个 VS Code 插件,直接在编辑器左侧打开面板就能用,数据存放在当前工作区的.thunder-client目录里,天然跟着项目走,也方便配合 Git 管理。
Thunder Client 的启动速度跟 VS Code 本身绑定,基本不用额外等待。它支持环境变量、集合、请求链、脚本断言(用 Chai 语法),还自带一个很实用的“生成代码”功能,能一键把请求转成 JavaScript fetch、Python requests、cURL 等格式。
它的缺点也很明显:所有操作都嵌在 VS Code 里,如果你不用这个编辑器,或者需要临时在另一台机器上快速调接口,就没那么方便了。但作为日常开发中的“副工具”,用来做快速冒烟测试,体验相当好。
2.3 Bruno:离线优先的 Git 友好选手
Bruno 是这几款里最强调“离线优先”的独立客户端。它把接口集合以纯文本格式存在本地目录里,你可以把整个集合文件夹放进 Git 仓库,团队协作直接走代码评审流程,而不是在某个云端工作区里你改我我改你。
Bruno 同样支持环境变量、脚本断言、请求生成和命令行运行,而且不需要登录账号。它的界面是传统客户端风格,如果你习惯了 Postman 那种左右布局,上手成本会很低。
不过 Bruno 的生态还在成长中,部分高级功能比如多协议支持、云端同步方案,比 Postman 还是要弱一些。但对于一个项目组就想用 Git 管理接口文档和测试用例的场景,它是我见过的最干净的方案。
2.4 我的最终选择与理由
我把三款工具放在一起,做了一个简单对比:
| 维度 | Hoppscotch | Thunder Client | Bruno |
|---|---|---|---|
| 安装方式 | 浏览器/PWA/桌面端/CLI | VS Code 插件 | 独立客户端 |
| 启动速度 | 秒开 | 随编辑器秒开 | 较快 |
| 登录要求 | 无 | 无 | 无 |
| 数据存储 | 本地/可导入导出 | 工作区目录 | Git 本地目录 |
| 脚本断言 | 支持 | 支持 | 支持 |
| CI 运行 | CLI 支持 | 较弱 | 命令行支持 |
| 最适合场景 | 多平台、快速在线调试 | VS Code 重度用户 | 团队 Git 协作 |
最终我选择了 Hoppscotch 作为主力工具,因为它的“浏览器直接打开”最符合我对“启动不到 1 秒”的全部想象,同时它的脚本能力和 CLI 套件在自动化方向也做得很完整。Thunder Client 我保留在 VS Code 里,用来在写代码时随手验证接口。Bruno 则留给团队协作的项目。
3. Hoppscotch 上手:从打开到构建第一个请求
3.1 三种打开方式
Hoppscotch 的入口很灵活,我平时常用三种方式:
第一种,直接在浏览器地址栏输入官网地址打开,这是最原始也最便捷的方式。由于它是网页应用,打开速度取决于浏览器本身,基本可以做到秒开,无需注册登录就能开始调试。
第二种,把网页安装成 PWA 应用。现在主流浏览器都支持 PWA 安装,Hoppscotch 在页面里会主动提示“安装应用”,点击后系统会生成一个独立的窗口图标,用起来就像本地客户端,但底子仍然是网页,所以体积几乎可以忽略。
第三种,如果你有离线或本地脚本需求,可以直接跑它的 CLI 工具,后面讲自动化测试时我会详细演示。
3.2 第一个 GET 请求
打开 Hoppscotch 之后,你看到的界面比 Postman 简洁多了:顶部是请求方法和 URL 输入框,左侧是收藏夹和集合栏,中间是请求配置区,右侧是响应区。
我先用一个公开的测试接口演示 GET 请求。在输入框里填入:
https://jsonplaceholder.typicode.com/posts/1方法保持 GET,点击发送按钮。响应区很快会返回一段 JSON,包括userId、id、title、body等字段。整个过程没有加载动画,没有登录弹窗,也没有多余的内存开销。
如果你在本地环境测试,比如访问http://localhost:8080/api/health,同样直接填进去发请求就行。本地接口一般不会有跨域问题,网页版用起来非常顺手。
3.3 POST、Body 和 Headers 处理
实际开发里 GET 只占一部分,更多场景是 POST 提交数据。我以登录接口为例,假设请求地址是https://api.example.com/login,方法改成 POST,然后在 Headers 里加Content-Type: application/json,在 Body 里选择 raw JSON,填入:
{ "username": "admin", "password": "123456" }点发送后,服务端返回的响应会显示在右侧。这个流程和 Postman 几乎一样,但整个操作界面更轻,不会在切换方法和填写 Body 时出现明显的界面卡顿。
Body 类型方面,Hoppscotch 支持多种格式:form-data、x-www-form-urlencoded、raw JSON、raw Text、二进制文件等。日常调试表单提交和文件上传,基本不需要切到别的工具。
3.4 环境变量与集合管理
接口调试一旦涉及多套环境(本地、测试、生产),环境变量就是刚需。Hoppscotch 里可以创建“环境”,每个环境里定义一组键值对,比如:
baseUrl = http://localhost:8080 apiToken = test-token-123之后在请求 URL 里直接用{{baseUrl}}/api/health这种占位符引用。切换环境时,请求会自动替换成对应环境里的值。这个用法和 Postman 的{{variable}}语法几乎一致,几乎没有学习成本。
集合管理方面,你可以在左侧创建多个集合,按项目来组织请求。除了手动创建请求之外,Hoppscotch 还支持把当前请求“保存到集合”,后续再打开集合里的请求直接运行。对于习惯用 Postman 的人来说,这种“集合 + 环境”的心智模型不需要重新学。
4. 从 Postman 迁移:导入导出、断言与返回值提取
4.1 把 Postman 里的集合迁过来
迁移第一步是把 Postman 里的接口数据倒出来。打开 Postman,选择某个集合,右键点导出,选择 Collection v2.1 格式,会得到一个 JSON 文件。这个文件里包含了请求 URL、方法、Headers、Body、脚本等核心信息。
然后在 Hoppscotch 左侧找到“集合”入口,选择导入,上传刚才导出的 JSON 文件。实测下来,大部分普通 HTTP 请求都能直接迁移成功,环境变量引用也能保留。
这里要注意的是:如果原集合里用了很多pm.*开头的 Postman 脚本,比如pm.environment.set或者pm.response.to.have.status(200),Hoppscotch 不会直接兼容,需要手动改写成 Hoppscotch 自己的脚本 API。后面讲到断言时我会给一组对应的对照写法。
4.2 断言:验证 body 内容
接口跑通只是第一步,真正有价值的是自动化校验返回结果。Hoppscotch 的脚本能力比较像 Postman 的写法,它内置了基于 Chai 的断言库,可以直接在“脚本”区域写逻辑。
假设接口返回了一段 JSON:
{ "code": 0, "message": "success", "data": { "token": "abc123" } }我常用的断言写法是:
const json = response.json(); expect(json.code).to.equal(0); expect(json.message).to.equal("success"); expect(json.data.token).to.be.a("string");这段脚本会先解析响应体为 JSON,然后逐个校验字段值和类型。如果断言失败,请求会被标记为失败,实测中还会在响应区明确提示哪一行没通过,排查起来非常直观。
如果你只是想做简单的状态码检查,也可以不写脚本,直接在请求设置里指定预期状态码。比如预期 200,实际返回 500,工具会直接红色高亮提示。我通常会用“脚本断言”做业务字段校验,“状态码检查”做基础健康检查,两者搭配使用。
4.3 提取返回值并传给下一个请求
很多项目有“先登录拿 token,再带 token 访问其他接口”的链路。在 Postman 里通常用pm.environment.set存变量,在 Hoppscotch 里对应的写法是:
const json = response.json(); hoppscotch.env.set("accessToken", json.data.token);执行完登录请求后,token 会被写入当前环境变量。后续请求在 Headers 里加:
Authorization: Bearer {{accessToken}}就能自动带上这个动态值。这个能力在处理带鉴权的接口时非常实用,我也把 Hoppscotch 的官方文档里关于环境变量设置的说明仔细读了一遍,确认hoppscotch.env是关键入口,set/get 都支持。
还有一类常见场景是“上一个接口返回的 id 要传给下一个接口的 URL”。我通常会把提取逻辑写在同一个集合的请求链里,比如 A 请求保存变量,B 请求的 URL 写成{{baseUrl}}/users/{{userId}},运行时自动替换,实现了和 Postman 完全一致的动态链式调用。
4.4 一键导出 curl 和生成代码
之前总有同事在群里问“Postman 怎么导出 curl”,其实在 Hoppscotch 里这个操作更顺手。请求配置好之后,点请求区的导入/导出按钮,里面有一个“生成代码”的入口,支持转换成多种格式。
最常用的是导出 cURL:
curl --request POST \ --url https://api.example.com/login \ --header 'content-type: application/json' \ --data '{"username":"admin","password":"123456"}'同时它也支持 JavaScript fetch、Python requests、Node.js axios、Go、Java、Ruby 等多种语言的请求代码。我经常用这个功能直接生成 fetch 代码扔进前端项目里调试,非常省时间。
5. 自动化接口测试与持续集成
5.1 用 CLI 跑集合测试
如果只停留在手动调试层面,那和 Postman 的替代关系还不算完整。真正让 Hoppscotch 在我心里加分的,是它的命令行工具。基于常见实践的补充,你可以通过 npm 全局安装:
npm install -g @hoppscotch/cli然后在集合目录下执行:
hoppscotch test run -e .env.prod.json collection.json其中collection.json是从 Hoppscotch 导出的集合文件,-e参数指定环境变量文件。CLI 会按顺序执行集合里的请求,并执行每个请求上的断言脚本,最终在终端输出每个用例的通过情况。
因为我平时用 Node 生态比较多,这个 npm 安装方式对我最方便。如果你不方便装 Node,也可以用官方提供的 Docker 镜像跑同样的命令,整体思路一致。
5.2 接入 GitHub Actions
有了 CLI,接口回归测试就能顺理成章地塞进 CI 流程。我自己的项目里,接口测试是提交代码后自动跑的。下面是一个可以直接参考的 GitHub Actions 片段:
name: api-test on: push: branches: - main jobs: test: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Install CLI run: npm install -g @hoppscotch/cli - name: Run API Tests run: hoppscotch test run -e .env.prod.json tests/api/collection.json这个流程的核心逻辑很清晰:把 Hoppscotch 的集合文件和环境变量文件提交到 Git 仓库,然后由 CI 在每次推送时执行。如果某个接口的返回结果不符合断言,CLI 会返回非零退出码,流水线直接标红,问题就能在最早期被发现。
相比用 Postman + Newman 跑 CI,这套方案的优势在于开源免费、没有账号绑定、依赖更少,安装和运行都轻量得多。我把接口测试文件放在项目仓库的tests/api目录里,和环境文件一起做版本管理,团队协作时每个人都能直接在本地跑同一套测试。
5.3 多环境参数化
实际项目往往有 dev、test、prod 多套环境。我通常准备多个环境变量文件,比如.env.dev.json、.env.test.json、.env.prod.json,里面分别定义baseUrl、apiKey等字段。
跑测试时通过参数指定环境:
hoppscotch test run -e .env.test.json collection.json这样无论本地还是 CI,都能用同一份集合、不同的环境配置去执行。切换环境只是换一个参数,不会改测试逻辑。这个思路和 Postman 的 Environments 功能一致,但因为是纯文件形式,放在 Git 仓库里可读性更好,diff 也一目了然。
6. 常见问题与避坑技巧
6.1 浏览器 CORS 拦截怎么破
Hoppscotch 网页版最常见的问题,就是请求跨域接口时被浏览器拦截,响应区报出 CORS 错误。这个问题的根源是浏览器的同源策略,不是工具本身的问题,任何网页版 API 客户端都会遇到。
我的解决方案是使用浏览器扩展。官方提供了一款扩展,安装后 Hoppscotch 的请求会通过扩展的后台逻辑发送,从而规避页面环境的跨域限制。实测效果很好,本地联调和访问远程测试服都没有问题。
如果你的网络环境不允许装扩展,或者你不想装任何东西,还有一个更简单粗暴的方法:直接用 CLI 跑请求。CLI 不存在浏览器同源策略,适用于临时验证跨域接口是否可达。
注意:如果你在公司网络或特殊安全策略下使用网页版工具,务必确认外部请求和扩展安装符合你的安全合规要求。
6.2 Linux 上怎么装
Postman 在 Ubuntu 这类 Linux 系统上一般要手动下 DEB 包或者用 Snap,有些人还会因为依赖问题装得很痛苦。Hoppscotch 在这方面省事很多。
你可以在 Linux 桌面端直接用浏览器打开网页版,也可以安装官方桌面客户端,一些发行版还支持通过包管理器安装。CLI 方式就更简单了,Node 装好后一条 npm 命令搞定,和系统版本没有强耦合。
我在自己的 Ubuntu 机器上亲测过两条路径:一是用浏览器 PWA,二是用 CLI。两条路都很顺,没有遇到额外依赖问题。相比之下,再回头看 Postman 在 Linux 上的安装体验,差异还是挺明显的。
6.3 WebSocket、SSE 等实时场景
如果接口调试涉及 WebSocket 或 SSE,Hoppscotch 也支持。左侧选择 Realtime 模式,填入 WebSocket 地址就能建立连接,还能发送消息和查看实时日志。
这里想提醒一个实际踩过的坑:WebSocket 地址需要关注协议前缀,ws://和wss://不要写错,否则连接会失败。另外带鉴权的 WebSocket,一般是在连接 URL 上拼 token 参数,或通过子协议头携带,不同服务端规则不一样,最好先看一眼服务端文档再调试。
6.4 迁移时的兼容性问题
从 Postman 迁过来,最容易踩的坑就是脚本语法。Postman 用pm.response、pm.environment,Hoppscotch 用response、hoppscotch.env,两者不能直接混用。
如果你是从 Postman 导出的集合,导入后请逐个检查有脚本的请求,把pm.*的 API 改成 Hoppscotch 对应的写法。环境变量引用方面,两边都支持{{var}}语法,这部分基本可以无缝迁移。
还有一个细节是 Cookie 管理。Postman 有一个独立的 Cookie 管理器,Hoppscotch 的 Cookie 策略跟浏览器的会话机制更贴近。如果你依赖 Postman 那种“手动填 Cookie 再发送”的方式,切换到 Hoppscotch 后需要稍微适应一下,或者直接把 Cookie 写进请求 Header。
我自己的体会是:工具越轻,越能专注在接口本身上。卸掉 Postman 之后,我的开发机省下了几百 MB 内存,冷启动接口工具的等待时间从“泡杯咖啡”变成了“眨个眼”。如果你也被 Postman 的体积和启动速度困扰,不一定要急着全盘迁移,可以先从单个集合导入试试,用顺手了再慢慢切换主力工具。最后分享一个我现在的小习惯:日常开发把 Hoppscotch 挂在浏览器里,写前端代码时用 Thunder Client 随手验证接口,两个工具互补,基本覆盖了所有调试场景。