跳转到内容
返回首页
Feature

API Tester 新功能:Socket.IO、MQTT 与真正的测试脚本

API Tester 支持的协议从四种增加到六种,新增 Socket.IO 和 MQTT,并用一个真正的沙盒 JavaScript 引擎取代了旧的测试评估器。此外:集合以项目文件形式保存。

更新于:
1 min
作者 Pelayo Naredo
API Tester 新功能:Socket.IO、MQTT 与真正的测试脚本

七月,我们发布了 API Tester——集成在 IDE 中的 REST、 WebSocket、GraphQL 和 SSE 客户端。此后它不仅拥有了完整的文档介绍, 更重要的是新增了两种协议、一个真正的脚本引擎,以及一种让你的 API 集合完全脱离云端的方式。

以下是所有新增内容。

Socket.IO,逐个事件

Socket.IO 不像 MQTT 那样有固定的事件目录,所以面板也不会假装存在一个。连接 到一个命名空间,如果需要可开启自动重连,然后:

  • 为你期望的任意事件名添加一个监听器。
  • 用 JSON 负载发送你自己的事件。

聊天式日志中的每条消息都会标注它所属的事件名,因此一个同时处理 message、typing 和 presence 事件的连接依然清晰可读。底层使用官方的 socket.io-client-java 库。不支持自定义请求头、auth 或 query 参数,监听器添加后也无法移除。

MQTT,逐个 topic

基于 HiveMQ 的客户端构建,仅支持 MQTT 5:只支持 3.1.1 的 broker 可能拒绝连接, 面板目前也还不支持 MQTT 5 的属性。可选是否使用 TLS、是否使用用户名和密码进行连接,然后:

  • 以 QoS 0、1 或 2 订阅一个 topic。
  • 以某个 QoS 发布到一个 topic(没有 retain 选项)。

传入的消息按 topic 分组,因此一个发布到 sensors/+/temp 的设备不会变成一条 无法阅读的单一消息流。目前还没有取消订阅、遗嘱消息或自定义 TLS 证书。

那 gRPC 呢?

这篇文章最初发布时,还宣布了一个实验性的 gRPC 面板。这个面板仍然在代码里,但当前版本的 PocketCode 把它隐藏了:gRPC 需要一个应用不得不排除在外的库,所以面板暂时还不能在 Android 上运行,在它能运行之前会一直隐藏。如今协议菜单里是六种能用的协议:REST、 WebSocket、GraphQL、SSE、Socket.IO 和 MQTT。

真正会运行的测试脚本

这是我们最自豪的一项,因为它替换了一个原本并不真正有效的东西。旧的测试 运行器通过正则表达式匹配 pm.test('...') 调用,并根据测试名称中的字词猜测 结果——一个名为"用户拥有管理员角色"的测试无论响应实际包含什么,永远都会 通过。

这已经成为历史。取而代之的是两样东西:

  1. 无代码断言——选择一个字段(状态码、响应时间、某个标头、正文中的 JSONPath、正文大小)、一个操作符(等于、包含、大于/小于、存在)和一个值。 无需脚本,始终执行,并且在手机键盘上也能快速构建。
  2. 真正的 JavaScript 测试脚本,运行在一个隔离的沙盒进程中 (androidx.javascriptengine,依托于设备自身的 WebView 引擎)。一个抛出异常的脚本不会把整个应用一起拖垮。在极少数 没有现代 WebView 的设备上,它会优雅降级为一条普通的控制台警告,而不是 悄悄假装你的测试通过了。脚本可用的只是 pm.* 的一个小子集(pm.test、pm.expect、 pm.environment、pm.response 等少数几个),而不是完整的 Postman API。

两者的结果都会写入同一个 Tests 标签页,脚本记录的一切内容都会出现在 专门的 Console 标签页中——包含 LOG / INFO / WARN / ERROR 级别。

存在于你的仓库中,而不是别人的云端

保存到项目会把一个集合镜像为每个请求一个可读的 JSON 文件,存放在 .pocketcode/api/<集合>/ 下,就在代码编辑器已经打开的同一个项目中。需要你自己点按; 不会自动镜像。

Room——PocketCode 的本地数据库——在日常使用中依然是唯一可信来源。导出会从 Room 重新生成整个目录,因此它始终是一份干净的快照。导入会先向你展示预览 ——一个全新的集合,或者恰好会替换多少个请求——在你确认之前,任何内容都不会 触碰数据库。用应用自带的 Git 管理器提交这些文件,你的 API 集合就能像任何 其他 pull request 一样被审阅,因为它本来就是。有一点要留意:这些文件会原样带上请求中保存的 认证值,所以别把 token 提交进去。

一些叠加起来同样重要的小改进

  • 历史记录新增了**"与…对比":两个响应之间的真实对比——正文逐行对比, 外加单独的标头对比——以及"用作模拟"**,通过菜单将历史响应变为一个模拟 路由。
  • 执行器(Pro)现在可以对 CSV 或 JSON 数据文件进行迭代,每次迭代对应一行, 每一行都可用于优先级高于 Collection 作用域的变量解析。
  • 动态变量登场了:{{$guid}}、{{$timestamp}}、{{$isoTimestamp}}、 {{$randomInt}}、{{$randomEmail}}、{{$randomFirstName}}、 {{$randomLastName}},每次使用都会重新生成。
  • Mock Server(Pro)现在可以直接从导入的 OpenAPI 文档生成路由,历史响应也可以 变成模拟路由。

六种协议,真正的脚本而非猜测,以及能像你代码的其余部分一样进行版本管理的 API 集合——这一切都保存在你的手机上,无需任何云端支持。如果你还没 了解过这个模块的其他部分,完整介绍在文档中。

PocketCode 已在 Google Play 上架。获取 PocketCode,在你自己的设备上试用它。

本文背后的工具

API 测试器

关于这个的快速解答

准备好试用 PocketCode 了吗?

下载应用,开始用手机编程。