告别Postman依赖地狱:Bruno请求链让API测试丝滑如流
在API开发中,你是否遇到过这样的困境:登录请求未完成,后续的订单查询就已执行失败?或者环境变量传递混乱,导致整个测试流程频繁中断?作为Postman/Insomnia的轻量级替代方案,Bruno通过创新的请求链(Request Chain)功能,彻底解决了API请求的顺序执行与依赖管理难题。本文将带你从零掌握这一核心功能,让API测试从"步步惊心"变为"行云流水"。
什么是请求链?为何它如此重要?
请求链(Request Chain)是Bruno独创的API测试工作流,允许开发者定义请求之间的执行顺序和数据依赖关系。与传统工具的孤立请求不同,Bruno的请求链能确保"登录→获取Token→查询用户信息→创建订单"这类有严格先后顺序的业务流程自动按序执行。
这种机制特别适合:
- 用户认证会话管理(如JWT令牌传递)
- 多步骤业务流程测试(如电商下单全流程)
- 环境变量动态传递(如从响应中提取参数)
- 批量数据生成与验证(如创建10个用户后批量查询)
官方文档对这一功能的定位是:Bruno CLI Documentation,强调其作为自动化测试的核心引擎地位。
核心原理:Bruno如何管理请求依赖?
Bruno通过两种机制实现请求链管理:文件系统级的目录排序和脚本级的依赖声明。这种设计完美结合了可视化管理与可编程控制的优势。
1. 目录结构即执行顺序
在Bruno中,请求文件的执行顺序直接由文件/文件夹的命名决定。遵循01_login.bru、02_get_user.bru、03_create_order.bru的命名约定,Bruno CLI会自动按数字升序执行请求:
# 按目录顺序执行所有请求
bru run my-collection --env Production
这种"所见即所得"的设计,让非技术人员也能通过文件命名轻松调整执行顺序。测试代码示例可参考:tests/runner/collection-run-report/collection-run-report.spec.ts
2. 脚本级依赖声明
对于复杂依赖,Bruno支持在请求文件中显式声明前置依赖:
// 在请求脚本中声明依赖
bru.require('01_login.bru', (response) => {
// 从登录响应中提取并设置Token
env.set('authToken', response.json().token);
});
这种双向控制机制,既保证了简单场景的易用性,又满足了复杂业务的灵活性需求。
实战指南:构建你的第一个请求链
下面通过一个电商订单流程案例,完整演示请求链的创建与执行过程。我们将构建包含3个请求的支付流程:获取商品列表→创建订单→支付订单。
步骤1:准备工作目录
创建如下目录结构:
ecommerce-flow/
├── 01_get_products.bru
├── 02_create_order.bru
├── 03_pay_order.bru
└── bruno.json
其中bruno.json是集合配置文件,定义了环境变量和全局设置。
步骤2:定义请求依赖关系
在02_create_order.bru中,我们需要从商品列表请求中获取商品ID:
POST https://api.example.com/orders
Content-Type: application/json
{
"productId": {{products[0].id}},
"quantity": 1
}
// 脚本区域
// 声明依赖于01_get_products.bru
bru.require('01_get_products.bru', (response) => {
env.set('products', response.json().data);
});
步骤3:使用CLI执行请求链
通过Bruno CLI运行整个流程,并生成测试报告:
# 执行请求链并输出JUnit格式报告
bru run ecommerce-flow --env Production --reporter-junit report.xml
执行完成后,你将得到包含所有请求执行状态的详细报告,包括每个请求的响应时间、状态码和测试结果。
高级技巧:动态参数传递与错误处理
掌握基础流程后,这些高级技巧能帮你应对更复杂的业务场景:
1. 跨请求参数传递
利用环境变量在请求间传递数据:
// 在01_login.bru中设置
env.set('userId', response.json().user.id);
// 在02_get_profile.bru中使用
GET https://api.example.com/users/{{userId}}
这种机制支持任意类型的数据传递,包括JSON对象、数组和二进制数据。
2. 条件执行与循环控制
通过脚本实现复杂逻辑控制:
// 循环创建10个测试用户
for (let i = 0; i < 10; i++) {
const response = await bru.run('create_user_template.bru', {
body: { username: `test_${i}` }
});
env.set(`user_${i}_id`, response.json().id);
}
3. 错误处理与重试机制
Bruno CLI提供了强大的错误处理选项:
# 失败时重试3次,每次间隔2秒
bru run critical-flow --retry 3 --retry-delay 2000 --bail
--bail参数确保在关键请求失败时立即停止执行,避免无效测试。完整的命令选项可参考:packages/bruno-cli/readme.md
企业级应用:CI/CD集成与报告分析
Bruno请求链不仅是开发工具,更是自动化测试的核心引擎。通过与CI/CD系统集成,可以实现API测试的全流程自动化。
GitHub Actions集成示例
name: API Tests
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Bruno CLI
run: npm install -g @usebruno/cli
- name: Run API Test Chain
run: bru run tests/e2e --env Production --output results.json
- name: Upload Report
uses: actions/upload-artifact@v3
with:
name: test-report
path: results.json
这种配置可确保每次代码推送都自动执行完整的API请求链测试,并生成详细报告。
报告分析工具
Bruno支持多种报告格式输出:
# 生成JUnit格式报告(适合Jenkins等CI工具)
bru run my-collection --reporter-junit report.xml
# 生成HTML可视化报告
bru run my-collection --reporter-html report.html
HTML报告示例可参考:packages/bruno-cli/examples/report.html
常见问题与最佳实践
Q1: 如何处理循环依赖?
Bruno会自动检测循环依赖并抛出错误代码3(CLI退出码定义)。解决方法是:
- 拆分循环依赖的请求
- 使用中间变量存储共享数据
- 重构为并行执行的独立链
Q2: 大型项目如何组织请求链?
推荐采用"模块化+主链"的结构:
project/
├── modules/ # 可复用模块
│ ├── auth/ # 认证相关请求
│ └── users/ # 用户管理请求
└── main-flow.bru # 主流程,引用模块请求
Q3: 如何调试失败的请求链?
使用Bruno的调试模式获取详细执行日志:
# 启用调试模式执行请求链
bru run my-collection --debug --output debug.log
日志文件会记录每个请求的详细信息,包括:
- 请求头与请求体
- 响应状态码与响应时间
- 环境变量的变化过程
- 脚本执行轨迹
总结:从"手动拼接"到"自动编排"的飞跃
Bruno的请求链功能,通过创新的文件系统排序+脚本依赖声明机制,彻底改变了API测试的工作方式。它让开发者从繁琐的手动执行和参数传递中解放出来,专注于业务逻辑本身。无论是简单的Token传递,还是复杂的微服务集成测试,Bruno都能提供清晰、可靠的执行保障。
作为开源工具,Bruno的请求链实现完全透明可审计,所有核心代码都可以在packages/bruno-js/src中找到。这种开放性不仅保证了数据安全,也让团队可以根据特殊需求定制请求链逻辑。
立即访问Bruno官方文档,开始你的API测试自动化之旅吧!无论是开发团队的日常测试,还是DevOps的CI/CD流水线,Bruno请求链都能成为你最可靠的API测试助手。
提示:遇到问题?可在Stack Overflow获取社区支持,或查看贡献指南参与功能改进。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00


