科学工具
科学工具让世界更美好
让世界更美好

API 开发测试工具 Postcat ,支持 REST、Websocket 等协议

Postcat 是一个强大的开源、跨平台(Windows、Mac、Linux、Browsers...)的 API 开发测试工具,支持 REST、Websocket 等协议(支持 GraphQL、gRPC、TCP、UDP),帮助你加速完成 API 开发和测试工作。

Postcat 设计了一个强大的插件系统,让你一键使用其他人开发好的插件来增强 Postcat 的功能,或者自行开发 Postcat 插件,Postcat 理论上是一个拥有无限可能的 API 产品。

Postcat 现在已经支持 Windows、Mac、Linux 等系统,你可以通过以下地址访问并下载,同时我们也提供了 Web 端,方便你在任何浏览器上使用。

Postcat官网(web端使用):postcat.com

Postcat API 测试

API 开发完成后,需通过调用接口测试其表现,当结果符合预期时,接口方可投入使用,测试过程中,状态码、响应体、响应时间是核心关注数据,Postcat 会清晰展示这些信息,帮助你判断 API 是否正常。

1、测试前准备:创建测试标签页与填写数据

开始测试前,需先填写测试数据,可点击标签页的加号新建测试标签页,也能通过点击分组 API 的闪电图标,快速对某个 API 发起测试。

2、配置请求参数

Postcat 支持多种请求参数配置,满足不同 API 需求:

请求头部:可手动输入,也能批量导入。批量导入数据格式为 key : value,一行一条 header 信息,例如:

Connection: keep-alive
Content-Encoding: gzip
Content-Type: application/json
Date: Mon, 30 Dec 2019 20:49:45 GMT

请求体:提供 Form-data(表单)、JSON、XML、Raw(自定义文本类型数据)四种格式,选择对应格式后点击测试按钮即可发送请求。若需测试文件上传,选中请求体为 Form-data,将参数类型切换到 file,点击选择文件就能发起文件测试。

Query 参数:指地址栏中跟在问号“?”后面的参数,如 /user/login?user_name=jackliu 中的 user_name。批量导入数据格式为 ?key=value...,多个参数用“&”分隔,例如:api.eolinker.com/user/login?user_name=jackliu&user_password=hello。值得注意的是,API Path 中若填写了 Query 参数,Postcat 会自动同步到 Query 参数表格。

REST 参数:指地址栏被斜杠“/”分隔、用大括号“{}”包裹的参数,如 /user/login/{user_name}/{user_password} 中的 user_nameuser_password。配置时,只需在 URL 中用“{}”括起 REST 参数,表单参数名无需填写“{}”。

3、查看测试结果与回溯历史

发送请求后,Postcat 会展示返回结果,包括状态码、响应体、响应时间、内容大小等信息。以 GET 获取城市今日天气接口为例,请求地址为 http://www.weather.com.cn/data/cityinfo/{cityCode}.html,参数 cityCode 设为 101010100 时,返回结果可能如下: • 状态码:200 • 响应体(JSON 格式):

{
  "weatherinfo": {
    "city": "北京",
    "cityid": "101010103",
    "temp1": "18℃",
    "temp2": "28℃",
    "weather": "晴",
    "img1": "n1.gif",
    "img2": "d2.gif",
    "ptime": "18:08"
  }
}

• 响应信息:Size: 0.16KB,Time: 1047.16ms

点击“测试历史”,能回溯过往测试的所有 API 请求信息,包括测试时间、请求地址、返回状态、请求时长等,方便快速回归测试。

4、浏览器与 Postcat 模块对照

日常在浏览器中查看的 API 请求信息,可在 Postcat 中找到对应模块,下划线颜色相同代表相同模块,具体对照如下:

浏览器中的 API 请求信息 Postcat 对应模块
Headers、协议、请求地址、路径、Cookies、Query 参数 请求头部、请求地址、Query 参数、REST 参数等
Request URL、Request Method API 信息中的请求地址、请求方式
Status Code、Response Headers、Request Headers 返回结果中的状态码、返回头部、请求头部

二、API 文档编辑:规范接口信息定义

在新增 API 接口前,需先明确三个关键问题:请求协议是否为 HTTP/HTTPS、请求体和响应体格式是什么(XML、JSON、FormData、Raw)、API 是否为 RESTful 风格。明确后,即可开始编辑 API 文档,主要包含 API 信息、请求参数、响应内容三部分。

1、API 信息设置

在编辑 API 顶部区域,填写 API 的核心信息:

• 协议:支持 HTTP/HTTPS

• 请求方式:支持 GET、POST、PUT、DELETE、HEAD、OPTIONS、PATCH

• 地址:填写 API 的请求 URL,如 http://www.weather.com.cn/data/cityinfo/{cityCode}.html

• 名称:为 API 命名,便于识别,如“获取城市今日天气”

2、API 请求参数配置

与 API 测试中的请求参数配置逻辑一致,包含请求头部、请求体、Query 参数、REST 参数,具体配置方式可参考“API 测试”部分。

3、API 响应内容设置

响应内容用于定义 API 返回的信息格式,方便开发与测试人员了解接口返回结构:

响应头部:可手动输入或批量导入,批量导入格式与请求头部一致,为 key : value 形式。

响应内容:提供 JSON、XML、Raw 三种格式,编写方式与请求参数类似。以 JSON 格式为例,可定义参数名、类型、必填项、说明等,例如定义“获取城市今日天气”接口的响应内容:

参数名 类型 必填 说明
weatherinfo object - 天气信息对象
city string 城市名称
cityid string - 城市 ID
temp1 string - 最低温度
temp2 string - 当日最高温度
weather string - 天气状况
img1 string - 天气图标 1
img2 string - 天气图标 2
ptime string - 发布时间

全局变量

全局变量能在测试过程中动态取值和赋值,在请求信息中,可通过双花括号或代码引用全局变量,例如在请求地址中使用 {{param_key}} 引用名为 param_key 的全局变量。

1、全局变量特性

• 不依赖于环境,即使未选择环境也能使用。

• 仅储存在客户端中,清除浏览器缓存时,自定义全局变量会被一并清除。

• 点击页面右上角“预览环境”按钮,可查看当前自定义全局变量的值。

2、脚本中操作全局变量

在前置脚本或后置脚本中,可通过代码对全局变量进行操作,支持获取、赋值、清除单个变量、清除所有变量四种操作,具体代码如下:

// 获取某个全局变量的值
pc.globals.get("variable_key");
// 为某个全局变量赋值(值的类型只能是 string、number、bool,其他类型会报错)
pc.globals.set("variable_key", "variable_value");
// 清除某个全局变量
pc.globals.unset("variable_key");
// 清除所有全局变量
pc.globals.clear();

Mock 对接:模拟真实 API 场景

Mock 是模拟真实 API 请求的方式,在文档定义好后,不依赖后端环境就能开发,单元测试时也能不耦合其余服务执行测试,广泛用于对接和测试场景。

1、获取 Mock 地址

在 Postcat 列表中找到目标 API,点击“Mock”标签,系统会自动创建默认 Mock 地址。例如,某 POST JSON 类型 API 的 Mock 地址可能为 http://127.0.0.1:3040/mock/JSON

2、使用 Mock 地址对接

将代码中的代理地址或实际请求地址改为 Mock 地址,发送请求后,Mock 服务会返回模拟数据。以某 POST JSON 接口为例,请求 Mock 地址后,返回结果可能如下:

• 状态码:200

• 响应体(JSON 格式):

{
  "string": "string",
  "array": {
    "dom1": "default_value",
    "dom2": "default_value",
    "dom3": "default_value"
  },
  "object": {}
}

• 响应信息:Size: 0.21KB,Time: 7.28ms

通过 Mock 地址,开发人员能在后端接口未完成时,基于模拟数据推进前端开发,测试人员也能提前开展接口测试,提升整体开发效率。