"再点一下"的联调噩梦
后端开发者对这个场景一定不陌生:你写好了一个新接口,想验证一下功能是否正常。这时你有几个选择------
- 等前端同事联调:但他正忙着另一个页面,你得等
- 用 Postman 发请求:但你的服务器用的是 TCP/WebSocket 协议,Postman 不支持
- 自己写一个测试客户端:有用,但每次改了接口都要改测试代码
更痛苦的是联调阶段。你和前端同事坐在一起,每调一个功能你都要说:"在点一下"、"再点一下"、"再点一下那个按钮"......这种低效的交流方式,在 ionet 中成为了过去式。
模拟客户端:真实网络 + 可持续交互
ionet 提供的模拟客户端请求模块,和你见过的测试工具都不一样:
| 特性 | 单元测试 | Postman | ionet 模拟客户端 |
|---|---|---|---|
| 真实网络环境 | ❌ Mock | HTTP only | ✅ TCP/WebSocket |
| 可持续交互 | ❌ 一次性 | 手动重发 | ✅ 控制台反复执行 |
| 支持广播 | ❌ | ❌ | ✅ 可接收推送 |
| 自动化 | ✅ | ❌ | ✅ |
| 压测 | ❌ | ❌ | ✅ |
关键区别在于:模拟客户端建立的是真实的网络连接,和你的前端客户端走的是同一条链路。
快速上手
1. 添加依赖
xml
<dependency>
<groupId>com.iohao.net</groupId>
<artifactId>extension-client</artifactId>
<version>${ionet.version}</version>
</dependency>
2. 编写模拟请求
java
public class DemoClient {
static void main() {
new ClientRunOne()
.setInputCommandRegions(List.of(new DemoRegion()))
.startup();
}
static class DemoRegion extends AbstractInputCommandRegion {
@Override
public void initInputCommand() {
this.setCmd(1, "Demo模块");
// 请求 1-0:发送消息并接收响应
ofCommand(0).setTitle("sayHello").setRequestData(() -> {
HelloMessage msg = new HelloMessage();
msg.name = "Jack";
return msg;
}).callback(result -> {
HelloMessage value = result.getValue(HelloMessage.class);
log.info("收到响应: {}", value);
});
// 请求 1-1:测试异常
ofCommand(1).setTitle("testError").setRequestData(() -> {
HelloMessage msg = new HelloMessage();
msg.name = "NotJackson";
return msg;
}).callback(result -> {
HelloMessage value = result.getValue(HelloMessage.class);
log.info("收到响应: {}", value);
});
// 广播监听
ofListen(result -> {
HelloMessage msg = result.getValue(HelloMessage.class);
log.info("收到广播: {}", msg);
}, CmdInfo.of(1, 20), "监听广播");
}
}
}
3. 控制台交互
启动后,在控制台输入 . 列出所有可用命令:
┌──── 可用命令 ────────────────────────
│ Demo模块
│ 1-0 sayHello
│ 1-1 testError
│
│ 输入命令编号执行,如: 1-0
└──────────────────────────────────────
输入 1-0 触发请求,控制台立即显示响应结果。你可以反复执行,不需要重启。
核心优势
可持续交互
传统的测试方式是"一次性"的------跑完就结束了。ionet 的模拟客户端保持着与服务器的长连接,你可以:
- 反复执行同一个命令
- 按顺序执行多个命令(模拟业务流程)
- 随时接收服务器的广播推送
支持复杂业务编排
你可以编排复杂的请求序列:先登录,再创建房间,再邀请玩家,再开始游戏......整个流程都可以用模拟客户端自动完成。
压测能力
除了功能测试,模拟客户端还支持压测场景:模拟大量并发请求,测试服务器在高负载下的表现。
与前端联调的正确姿势
有了模拟客户端,你和前端同事的联调流程变成:
- 后端先自测:用模拟客户端验证所有接口,确保功能正常
- 前端直接对接:后端已经验证通过,前端不需要"再点一下"
这不仅节省了联调时间,更重要的是------后端的信心更足了。你知道你的接口是正确的,因为你已经用真实的网络环境测试过了。
小结
ionet 的模拟客户端不只是一个测试工具,它改变了后端开发者的工作流:
- 开发阶段:写完 Action 立即测试,不等前端
- 联调阶段:接口已经自测通过,联调效率翻倍
- 压测阶段:用同一个模块进行压力测试
"再点一下"的联调方式,从此成为过去式。
更多资源
下一篇预告:[一次编写到处对接 ------ 为 Godot/Unity/React 生成统一交互接口]