大多数 API 测试工具都要求你在发送单个请求之前,先打开窗口、登录并在工作区中点击。初次尝试时这没问题。但对于终端来说,这种形式并不合适,因为在终端中你只想输入一行命令,读取响应,然后继续下一步。轻量级命令行工具颠倒了这一顺序:工具本身退居幕后,请求才是交互的核心。
这里的“轻量级”有其特定含义。安装包小,通常是一个二进制文件或一个快速的 npx 命令。启动快,因此调用接口感觉是瞬间完成的。运行第一个请求几乎不需要配置。终端优先的输出,可以通过管道传输到 jq 或 grep。这与“哪个工具是开源的”或“哪个功能最全”是不同的问题。它关乎的是占用空间和操作阻力。想要了解涵盖托管 GUI 的更广泛调研,请参阅最佳免费 API 测试工具综述。
下面是 8 个用于测试 REST 和 HTTP API 的轻量级 CLI 工具,大致按照从最精简、最手动到能在 CI 中运行完整测试套件的顺序排列。每个条目都包含实际的安装命令、一个演示其运行的命令、它的擅长领域以及一个真实的局限性说明。最后一个是 Apifox CLI,它是一个轻量级二进制文件,可以运行你通过可视化方式构建的测试场景,并根据其退出状态码来控制流水线的通过与否。
什么是 API 测试中的“轻量级”CLI 工具
很多工具都能在终端运行,但并非所有工具都让人感觉轻便。在本名单中,一个工具需要符合以下四点:
- 占用空间小。 单个二进制文件、
pip/npm安装或npx一行命令。无需预先设置运行时,理想情况下没有守护进程。 - 启动速度快。 工具启动并发送请求无需预热。Rust 和 Go 编写的二进制文件在这方面胜出;任何需要启动沉重运行时的工具都会落败。
- 低配置或零配置。 无需项目文件、账号或登录即可发送第一个请求。配置是可选的,仅在你需要保存和重复操作时使用。
- 终端原生输出。 结果以一目了然的形式打印,并可管道传输到另一个命令。退出状态码具有实际意义,以便 CI 可以据此进行拦截。
前面的工具主要体现前三点;最后两个工具侧重于第四点,因为这正是轻量级二进制文件在流水线中体现价值的地方。如果你想更深入地了解交互式、手动调用接口的方法,curl 的 REST API 测试替代方案指南对这类手动客户端进行了更深入的探讨。
curl:已预装的标准工具
curl 几乎是你肯定已经拥有的工具。它内置于 macOS、大多数 Linux 发行版和现代 Windows 中,因此最轻量的安装就是无需安装。它支持 HTTP、HTTPS 以及一长串其他协议,是所有其他客户端衡量自身的基准。
# Already on your machine; check the version
curl --version
# POST JSON 并仅打印 HTTP 状态码
curl -s -o /dev/null -w "%{http_code}\n" \
-X POST https://httpbin.org/post \
-H "Content-Type: application/json" \
-d '{"user":"acme","plan":"pro"}'
适用于:快速的一次性请求、脚本以及任何无法安装新软件的环境。坦白说,它的局限性在于:交互体验已经过时。你需要手动设置 header,JSON 不会自动美化输出,而且对响应进行断言意味着需要将结果通过管道传输给 jq 并自行检查退出状态码。它只负责发送和显示,并不具备测试功能。
HTTPie:为人类设计的 curl
HTTPie 执行与 curl 相同的请求,但其语法是为人类设计的。命令为 http,header 和 JSON 字段是简单的 key=value 键值对,且输出默认带有颜色和格式化。它由 Python 编写,因此需要 Python 运行时,这使得它比单个二进制文件更重,但仍然可以通过一行命令完成安装。
python -m pip install httpie # 或者:brew install httpie
# POST JSON:age:=24 发送数字,name= 发送字符串
http POST httpbin.org/post name=acme age:=24 plan=pro
适用于:当你想要在无需各种 flag 的情况下获得可读性高的输出,并手动探索 API 时。坦白说,它的局限性在于:Python 的启动速度明显慢于编译后的二进制文件,而且在纯净系统中安装意味着如果还没有 Python,就必须先引入它。与 curl 一样,它是一个客户端,而不是测试运行器;你只能阅读响应,而不能对其进行断言。
xh:拥有 HTTPie 速度的单个二进制文件
xh 用 Rust 重新实现了 HTTPie 友好的语法,并以单个静态链接二进制文件的形式发布。你将获得相同的 key=value 易用性和彩色输出,同时启动速度更快,且除了二进制文件本身外无需安装任何其他内容。它支持 HTTP/2,甚至可以通过 --curl 打印出等效的 curl 命令。
brew install xh # 或者:cargo install xh --locked
# 与 HTTPie 语法相同,启动更快
xh POST httpbin.org/post name=acme age:=24 plan=pro
适用于:喜欢 HTTPie 的体验但想要一个无需运行时的快速单个二进制文件的开发者。坦白说,它的局限性在于:它并未实现 HTTPie 的所有功能,且没有插件系统。它比 HTTPie 更年轻,因此围绕它的生态系统较小。它仍然只是一个客户端,而不是断言引擎。
Apifox CLI:运行你构建的场景,通过退出状态码拦截 CI
Apifox CLI 是 Apifox 的轻量级版本。它是一个 npm 包 apifox-cli,可以直接在终端运行你在 Apifox 中可视化设计的测试场景。测试构建部分保留在 GUI 中,在那里串联请求、提取变量和编写断言非常高效;CLI 则是一个轻量级组件,用于以无头模式运行这些测试场景并返回退出状态码。Apifox 并非开源软件,但其免费版加上此 CLI 为你提供了一个集成化的替代方案,无需将独立的客户端、运行器和负载工具拼凑在一起。
npm install -g apifox-cli
apifox login --with-token <YOUR_TOKEN>
# 从测试场景的 CI/CD 标签页复制准确的命令
apifox run -t <scenario_id> -e <env_id> -r cli
你不需要猜测测试场景和环境 ID。在 Apifox 中打开你的测试场景,进入 CI/CD 标签页,复制已填充好 ID 的生成的 apifox run 命令即可。-r cli 报告器会在终端打印逐步结果和总结;当 CI 仪表板需要解析结果时,可以添加 -r cli,junit。与上述工具类似,当所有断言通过时 apifox run 退出码为 0,当任何项失败时退出码为非零,因此流水线会将其视为一个清晰的拦截点。其输出是带有 agentHints.nextSteps 的结构化 JSON,这使得 AI 编程智能体也能轻松运行和读取。
最适合:希望在可视化编辑器中编写复杂的多步骤测试场景,但在 CI 或通过智能体以无头模式运行它们的团队。局限性:与 curl 或 xh 不同,它绑定在你在 Apifox 项目中维护的测试场景上,因此它是一个集成平台选项,而非纯粹的 HTTP 客户端。有关完整命令集,请参阅 Apifox CLI 完整指南、apifox run 命令参考,以及关于如何使用 Apifox CLI 从命令行测试 REST API 的教程。
如何选择
选择合适的工具取决于你除了“发送一个请求”之外还需要做多少工作。
手动操作时,可以从最基础的工具开始。使用 curl 或 xh 来快速探测接口。当你希望在版本控制中运行这些检查时,请切换到 Hurl。当涉及到负载测试时,引入 k6;如果你的测试已经存在于 Postman 中,则使用 Newman。如果你更倾向于在编辑器中构建复杂的测试场景,并在其他任何地方以无头模式运行它,请选择 Apifox CLI。如果你正在权衡这些工具与完全脱离 GUI 的工作流,无头 API 测试工具指南涵盖了在没有任何界面的情况下运行测试的内容。
轻量级工具的优势所在
当 GUI 拖慢你的速度时,轻量级 CLI 工具就体现出了优势:当你深陷终端操作、当测试需要在 CI 中无人值守运行,以及越来越多由 AI Agent 为你执行检查的场景。curl 和 xh 保持了紧凑的手动操作循环。Hurl 和 Step CI 将即时请求转变为可重复的测试。k6 解决了负载问题。Newman 运行你在 Postman 中已经构建的内容。
Apifox CLI 弥合了构建测试与在任何地方运行测试之间的差距。你在 Apifox 中设计一次测试场景,然后通过 apifox run 从终端、流水线或 Agent 中启动它,退出代码将决定构建是否保持“绿色”(通过)。下载 Apifox,构建一个测试场景,并将其 apifox run 命令放入你的 CI 配置中,即可看到整个闭环的实现。