API Tester 新功能:gRPC、Socket.IO、MQTT 与真正的测试脚本
API Tester 支持的协议从四种增加到七种——通过服务器反射实现的 gRPC、 Socket.IO 和 MQTT——并用一个真正的沙盒 JavaScript 引擎取代了旧的虚假测试 评估器。此外:集合以项目文件形式进行版本管理,完全无需云端。
七月,我们发布了 API Tester——集成在 IDE 中的完整 REST、 WebSocket、GraphQL 和 SSE 客户端。此后它不仅拥有了完整的文档介绍, 更重要的是新增了整整三种协议、一个真正的脚本引擎,以及一种让你的 API 集合 完全脱离云端的方式。
以下是所有新增内容。
gRPC,通过服务器反射
API Tester 现在无需任何 .proto 文件即可支持 gRPC。指向
host:port,点击 Discover services,它就会遍历服务器的反射 API 来列出
可调用的内容——这与 grpcurl 和 Postman 的 gRPC 客户端使用的机制相同,因此
只要服务器开放了反射,它就能工作。
调用仅限一元调用:流式方法会出现在列表中,并正确标注为禁用,而不是被隐藏
或假装能用。界面也从不要求你逐字段填写生成的表单——你以纯 JSON 编写请求,
PocketCode 在底层将其构建为 DynamicMessage,然后你收到的响应也是 JSON。
Socket.IO,逐个事件
Socket.IO 不像 MQTT 那样有固定的事件目录,所以面板也不会假装存在一个。连接 到一个命名空间,如果需要可开启自动重连,然后:
- 为你期望的任意事件名添加一个监听器。
- 用 JSON 负载发送你自己的事件。
聊天式日志中的每条消息都会标注它所属的事件名,因此一个同时处理
message、typing 和 presence 事件的连接依然清晰可读。底层使用官方的
socket.io-client-java,因此行为与 Node 客户端一致。
MQTT,逐个 topic
基于 HiveMQ 的客户端构建(它支持 MQTT 5,不过面板目前只暴露 3.1.1 级别的 功能——尚不支持 MQTT 5 的属性,这一点被明确记录,而不是被悄悄省略)。可选是否 使用 TLS、是否使用用户名和密码进行连接,然后:
- 以 QoS 0、1 或 2 订阅一个 topic。
- 以 QoS 和可选的 retain 标志发布到一个 topic。
传入的消息按 topic 分组,因此一个发布到 sensors/+/temp 的设备不会变成一条
无法阅读的单一消息流。
真正会运行的测试脚本
这是我们最自豪的一项,因为它替换了一个原本并不真正有效的东西。旧的测试
运行器通过正则表达式匹配 pm.test('...') 调用,并根据测试名称中的字词猜测
结果——一个名为"用户拥有管理员角色"的测试无论响应实际包含什么,永远都会
通过。
这已经成为历史。取而代之的是两样东西:
- 无代码断言——选择一个字段(状态码、响应时间、某个标头、正文中的 JSONPath、正文大小)、一个操作符(等于、包含、大于/小于、存在)和一个值。 无需脚本,始终执行,并且在手机键盘上也能快速构建。
- 真正的 JavaScript 测试脚本,运行在一个隔离的沙盒进程中
(
androidx.javascriptengine——不会给 APK 增加任何体积,因为它依托于设备 自身的 WebView 引擎)。一个抛出异常的脚本不会把整个应用一起拖垮。在极少数 没有现代 WebView 的设备上,它会优雅降级为一条普通的控制台警告,而不是 悄悄假装你的测试通过了。
两者的结果都会写入同一个 Tests 标签页,脚本记录的一切内容都会出现在 专门的 Console 标签页中——包含 LOG / INFO / WARN / ERROR 级别。
存在于你的仓库中,而不是别人的云端
我们认为这是其他移动端 API 客户端都不具备的功能:保存到项目会把一个
集合镜像为每个请求一个可读的 JSON 文件,存放在
.pocketcode/api/<集合>/ 下,就在代码编辑器已经打开的同一个项目中。
Room——PocketCode 的本地数据库——在日常使用中依然是唯一可信来源。导出会从 Room 重新生成整个目录,因此它始终是一份干净的快照。导入会先向你展示预览 ——一个全新的集合,或者恰好会替换多少个请求——在你确认之前,任何内容都不会 触碰数据库。用应用自带的 Git 管理器提交这些文件,你的 API 集合就能像任何 其他 pull request 一样被审阅,因为它本来就是。
一些叠加起来同样重要的小改进
- 历史记录新增了**"与…对比":两个响应之间的真实对比——正文逐行对比, 外加单独的标头对比——以及"用作模拟"**,一键将任意历史响应变为一个模拟 路由。
- 执行器现在可以对 CSV 或 JSON 数据文件进行迭代,每次迭代对应一行, 每一行都可用于优先级高于 Collection 作用域的变量解析。
- 动态变量登场了:
{{$guid}}、{{$timestamp}}、{{$isoTimestamp}}、{{$randomInt}}、{{$randomEmail}}、{{$randomFirstName}}、{{$randomLastName}}——和你在 Postman 中习惯的写法一样,每次使用都会重新 生成。 - Mock Server 现在可以直接从导入的 OpenAPI 文档生成路由,还能将任意 历史响应录制为模拟数据。
七种协议,真正的脚本而非猜测,以及能像你代码的其余部分一样进行版本管理的 API 集合——这一切依然完全运行在你的手机上,无需任何云端支持。如果你还没 了解过这个模块的其他部分,完整介绍在文档中。
PocketCode 即将登陆 Google Play。加入预注册,成为 第一批在自己设备上试用它的人。
API 测试器