Featured image of post # Postman最佳平替, API测试工具Bruno实用教程(一):基础篇

# Postman最佳平替, API测试工具Bruno实用教程(一):基础篇

序言

在前文【】中,我们介绍了目前目前Github上广受关注的新锐接口测试工具Bruno,给厌倦了Postman必须在线使用限制的同学提供了一个很好的替代选择。

Bruno的核心优势,官网重点给出了如下几点:

  1. 承诺开源和可扩展,并且专心做客户端,永不向“平台化”扩充产品。
  2. 基于Git实现协作和版本管理
  3. 离线使用,永不同步本地数据 😂😂😂

下面我们就通过一个系列,详细介绍通过Bruno来进行API接口测试的详细实战教程。本文是第一篇,重点介绍如下内容:

  • Bruno的安装和界面说明
  • 结合Github API实现典型API操作的方法
  • 环境管理
  • 鉴权机制和加密

Bruno安装和界面概览

安装

1
2
3
4
5
6
7
8
# Mac (Homebrew)
brew install bruno

# Windows (Winget)
winget install usebruno.bruno

# Linux (Snap)
sudo snap install bruno

使用界面

  • 左侧面板:Collection管理、导航(类似IDE的项目结构)

  • 中央区域:请求编辑器(URL/Headers/Body配置)

  • 右侧面板:响应结果显示(内容、状态、断言等)

  • 工具栏:顶部主要是一些高级功能配置(付费版本)、变量管理(全局、环境);底部工具栏是工具的系统级配置(界面、代理、鉴权等),cookies、license管理

  • 快捷键体系

    • Ctrl +E:环境变量设置
    • Ctrl + B:新建请求
    • Ctrl + Enter:立即发送请求

典型HTTP接口测试实现(Github API)

下面我们结合 Github 的官方API接口,介绍在 Bruno 中如何完成典型HTTP接口请求测试。

Github API简介

GitHub 是一个面向开源软件项目的托管平台,因为使用 Git 作为唯一的版本库格式进行托管,故名 GitHub。也是目前全球最大的代码托管平台,可以说是程序员的圣地,号称全球最大的同性交友平台

GitHub API目前有两个版本,一个是基于GraphQL的V4版本, 而更常用的主要还是之前的Restful API,它的Restful API定义长期以来被视作此类接口的典范。

具体的接口说明文档:参见 https://docs.github.com/zh/rest?apiVersion=2022-11-28

github 中的时间格式

YYYY-MM-DDTHH:MM:SSZ

github 限流规则

github 为包含服务端负载压力,会对请求流量进行限制。在每个 github 的响应消息头中都会携带 github 的限流设置。

头参数 含义
X-RateLimit-Limit 当前每小时最大请求限制,一般未鉴权请求60次,鉴权请求5000次
X-RateLimit-Remaining 当前剩余请求次数
X-RateLimit-Reset 剩余限制重置时间,毫秒
请求参数与分页

请求中可以携带参数,一般包含两种参数: 路径参数查询参数 image

github API中默认支持两个分页参数:

  • page 当前显示页数
  • per_page 每页显示结果数
github 请求Token

从Github账号设置页中,增加访问API的Token配置

配置Token鉴权

进入Bruno,新建一个Collection, 命名 github,在其中的 Auth 部分, 将之前设置的API token添加进来,这里的鉴权方式选择 bearer Token

除了 bearer Token 外, Bruno还支持其他多种鉴权方式,能基本覆盖到各种API接口的鉴权模式。

  • AWS Sig:针对亚马逊的AWS公有云用户签名的认证方式
  • Basic auth:基本鉴权,通过输入账号、密码
  • WSSE auth:Web Service安全用户认证
  • Bearer Token:基于加密文本的安全认证令牌
  • Digest auth:摘要式认证
  • NTLM auth:微软的局域网管理认证协议
  • Oauth 2.0:开放式授权协议,是第三方认证的常用协议
  • API Key:服务端自己定义的接入令牌
  • no Auth:不鉴权
  • inherit:继承上一级鉴权(Bruno中,下一级请求可以使用上一级的鉴权设置)

接口测试中的增删改查

1. GET请求:获取制定项目最新Release

目标接口GET /repos/{owner}/{repo}/releases/latest

Bruno中通过 {{var}},可以在请求中指定变量,变量配置如下。点击发送按钮后,成功获得响应。

请求这里的鉴权方式使用inherit, 继承collection中配置的 bearer token 鉴权方式

2. POST请求:创建Issue

目标接口POST /repos/{owner}/{repo}/issues

创建issue,对应 POST 方法,Bruno中配置如下,

  • Body配置

    1
    2
    3
    4
    5
    6
    7
    
     {
        "title": {{issue_title}},
        "body": "发现一个测试问题",
        "labels": [
          "bug"
        ]
      }
    
  • 动态变量注入

    这里的issue标题,我们使用Bruno的内置动态变量 {{$timestamp}}, Bruno提供了丰富的内置动态变量,对于我们动态模拟请求数据提供了极大方便。

    1
    2
    3
    
    # 标题预置变量
    vars:
      issue_title: "测试问题_{{$timestamp}}"
    

到Github上查看,Issue已创建

3. PATCH请求:修改Issue

目标接口PATCH /repos/{owner}/{repo}/issues/3

关闭 issue_number 为 3 的问题

1
2
3
{
  "state": "closed"
}

4. DELETE请求:删除Issue 评论

目标接口DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}

基础测试断言

Test脚本验证 状态码

Bruno 中可以类似Postman那样编写Test脚本来进行结果验证

1
2
3
test("Status is 200", () => {
  expect(res.status).to.equal(200);
});
界面Assert

对于一些常用的断言,Bruno中也可以直接在界面上通过添加 Assert 来进行断言。

以上Test和Assert 执行结果如下


以上就是关于Bruno进行接口测试时,主要的基础功能用法介绍。后续会继续更新其他进阶用法更新。 也欢迎大家进入测试交流群和小伙伴们继续深入交流。回复 进群 获取入群邀请。

使用 Hugo 构建
主题 StackJimmy 设计