编辑
2026-01-16
服务器
00

目录

1. 初识 Bruno
2. 基本操作
2.1 创建 Workspace
2.2 创建 Collection
2.3 软件设置
3. Request
3.1 创建 Request
3.2 Request 下的选项
Params
Body
Header
Auth
File
3.3 运行 Request
4. Variable 变量
4.1 普通变量
4.2 环境变量
4.3 环境变量存JWT来访问受限API
5. Git
6. 测试能力
6.1 Assert
6.2 Script
6.3 Tests
7. 结尾

bruno0.jpeg

受公司数据安全政策影响,我不得不由Postman转向了开源API测试工具Bruno。文章详细介绍了Bruno的下载安装、Workspace和Collection管理、请求配置、变量与环境变量使用、Git集成及测试能力等核心功能,并通过丰富截图与操作说明,展示了Bruno的易用性和灵活性。对于日常API测试需求,Bruno已能满足大部分开发者的使用场景。

1. 初识 Bruno

Postman一直是我进行API测试使用的工具,今天收到单位内部信,由于数据安全的原因不可以使用免费版的Postman了。如果非要使用Postman,只能使用企业付费版的。正常价是900多刀一年,企业内部的license要是用的多的话,会便宜一些。大环境不好的情况,就别申请付费版了。

内部推荐的替代是Bruno,一直伸着舌头的小黄狗。它是一个开源的,本地的,轻量级的API客户端。当然了,除了社区版,它也有付费版叫Bruno Ultimate。

bruno1.jpeg

截至 2026 年 1 月,Bruno 已成为开发者社区中备受推崇的 API 测试工具,被视为 Postman 的强力开源替代方案。

2. 基本操作

2.1 创建 Workspace

Workspace分为默认的My Workspace和自定义Workspace。首次打开Bruno后会自动创建默认Workspace,它无法被关闭和删除。而自定义的Workspace支持Git,分享以及管理collections。

创建自定义Workspace。

bruno2.jpeg

2.2 创建 Collection

创建Collection时,支持两种文档格式 .bru.yaml(beta)。Bruno的维护者说Json不支持多行字符串,YAML的缩进让人头疼,因为发明了叫做Bru的标记语言。当然了,看了一下是使用了ohmjs库把.bru翻译成Json。我就姑且使用它推荐的格式。

image.png

也在可以在Collection下再创建文件夹,把同类型的请求放在一个文件夹下面,并支持共用的一些参数。

2.3 软件设置

客户端的左下角有Theme的选项,可以选择Light和Dark或是跟随系统。

bruno4.jpeg

其余的设置在左下角的小齿轮里,但是设置选项并没有太多。

image.png

3. Request

3.1 创建 Request

Request可以在Collection或是文件夹层面创建。每一级的名称右面都有三个小点,可以点击new request。在这里需要指定Request的类型,我选的是HTTP,因为我后端是FastAPI。然后再指定API的URL以及HTTP方法。

bruno6.jpeg

3.2 Request 下的选项

以登陆的API作为例子来看一下各个选项。

Params

在参数这里面,并没有区别是路径参数还是查询参数。它的机制是,根据参数名字来判断,如果API的路径参数里的名字能对上就是路径参数,对不上就是查询参数。

bruno7.jpeg

Body

因为我要提交的是登录表单,所以选择URL encoded。Body里是username和password。

bruno8.jpeg

没有要往Header加的东西,没有特殊的Header,也没有Token,因为是Login。

image.png

Auth

No Auth因为现在是要取得access token。但是以下的验证方式。

bruno10.jpeg

File

Request的参数都设置完后,点击file会显示出文件里的内容,它和存在磁盘上的文件是一样的。这个格式就是.bru的格式。

bruno11.jpeg

3.3 运行 Request

发送Request,然后收到的Response会在客户端的右侧显示。显示的方式是最常用的JSON,当然也有其他的方式,譬如HTML,XML,RAW等。

这是Response的Body。

bruno12.jpeg

这是Response的Header。

bruno13.jpeg

在Timeline这可以查看调用这个API的历史。点开每条历史,里面会保存Request,Response和Network Logs的数据。也可以点击右上角清除历史。

bruno14.jpeg

4. Variable 变量

4.1 普通变量

在右上角新建变量,我是按Collection来的。毕竟每个Collection测试的大概率不是同一个API Server。

bruno15.jpeg

变量就是键值对,对于密码或是API Key之类的可以点击Secret的开关,这样显示就是隐藏的了。

bruno16.jpeg

也可以在文件夹级别设置变量,它的优先级高于Collection。

bruno17.jpeg

如果同一个变量名在Collection和文件夹下都设置了。则在文件夹内的文件走文件夹的变量设置,Collection内的其它文件则遵循Collection的变量。变量的写法是{{ VAR NAME }}

bruno18.jpeg

4.2 环境变量

在Collection的文件夹下新建一个 .env 文件,把baseUrl从Collection的变量移到环境变量里,内容为 baseUrl = http://127.0.0.1:8000/api/v1。这时可以看见原来的变量名变红了,说明它失效了。

bruno19.jpeg

.env文件要放在Collection名字的根目录下面。

bruno20.jpeg

然后在这个Collection设置变量的时候,键值对的值可以使用环境变量的键,只不过变量的名字前面加上前缀process.env.

bruno21.jpeg

但是在实际使用变量的时候,还是使用原来的变量名,发送Request依然可以得到Response。这个只是一个例子,通常是将敏感信息放到环境变量里,譬如账号密码,Token,API Key,私钥等。

4.3 环境变量存JWT来访问受限API

在Collection的变量里将值设为环境变量的键,然后在Request的时候引用。正常认证的信息是在请求的头部的,在客户端是单独列出来了一个Auth的选项。

bruno22.jpeg

5. Git

Bruno引以为傲的就是本地优先且项目即文件,因此使用Git进行版本管理也是顺理成章的了。客户端自带Git的UI界面,然而连Commit都需要付费版。我们直接在这个文件夹下面使用Git CLI进行操作就好了,对于用户来说没啥大的区别。

bruno23.jpeg

6. 测试能力

可以使用JS写一些用于测试的东西。这部分我从官网找的例子。

6.1 Assert

可以对多种参数进行断言,譬如Response的状态码,返回值啥的。格式就是目标,操作符和值。

bruno24.webp

6.2 Script

在Request之前或是Response之后,对一些参数进行操作。

bruno25.webp

6.3 Tests

和断言类似,也是使用JS写一些复杂的逻辑来判断一些事情。

bruno26.webp

7. 结尾

这篇文章省去了很多的介绍部分,着重讲了Bruno的用法,基本上算是一个比较全面的使用文档了。经过了一天的研究,对于我这种比较简单的API测试,还是可以平替Postman的。我也不需要登录,文件都在本地,通过Git也可以很好的分享给其他人。但是说回来,使用Postman的时候我还是觉得挺舒心的,毕竟用的比较习惯了。如果不是公司政策的要求,我也不会换其它的工具。

本文作者:潘晓可

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!