
受公司数据安全政策影响,我不得不由Postman转向了开源API测试工具Bruno。文章详细介绍了Bruno的下载安装、Workspace和Collection管理、请求配置、变量与环境变量使用、Git集成及测试能力等核心功能,并通过丰富截图与操作说明,展示了Bruno的易用性和灵活性。对于日常API测试需求,Bruno已能满足大部分开发者的使用场景。
1. 初识 Bruno
Postman一直是我进行API测试使用的工具,今天收到单位内部信,由于数据安全的原因不可以使用免费版的Postman了。如果非要使用Postman,只能使用企业付费版的。正常价是900多刀一年,企业内部的license要是用的多的话,会便宜一些。大环境不好的情况,就别申请付费版了。
内部推荐的替代是Bruno,一直伸着舌头的小黄狗。它是一个开源的,本地的,轻量级的API客户端。当然了,除了社区版,它也有付费版叫Bruno Ultimate。
- 客户端下载:Bruno客户端
- Github项目地址:Bruno
- 项目文档:Bruno Docs

截至 2026 年 1 月,Bruno 已成为开发者社区中备受推崇的 API 测试工具,被视为 Postman 的强力开源替代方案。
2. 基本操作
2.1 创建 Workspace
Workspace分为默认的My Workspace和自定义Workspace。首次打开Bruno后会自动创建默认Workspace,它无法被关闭和删除。而自定义的Workspace支持Git,分享以及管理collections。
创建自定义Workspace。

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

也在可以在Collection下再创建文件夹,把同类型的请求放在一个文件夹下面,并支持共用的一些参数。
2.3 软件设置
客户端的左下角有Theme的选项,可以选择Light和Dark或是跟随系统。

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

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

3.2 Request 下的选项
以登陆的API作为例子来看一下各个选项。
Params
在参数这里面,并没有区别是路径参数还是查询参数。它的机制是,根据参数名字来判断,如果API的路径参数里的名字能对上就是路径参数,对不上就是查询参数。

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

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

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

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

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

这是Response的Header。

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

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

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

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

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

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

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

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

但是在实际使用变量的时候,还是使用原来的变量名,发送Request依然可以得到Response。这个只是一个例子,通常是将敏感信息放到环境变量里,譬如账号密码,Token,API Key,私钥等。
4.3 环境变量存JWT来访问受限API
在Collection的变量里将值设为环境变量的键,然后在Request的时候引用。正常认证的信息是在请求的头部的,在客户端是单独列出来了一个Auth的选项。

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

6. 测试能力
可以使用JS写一些用于测试的东西。这部分我从官网找的例子。
6.1 Assert
可以对多种参数进行断言,譬如Response的状态码,返回值啥的。格式就是目标,操作符和值。

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

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

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