【工具】二进制协议模拟测试工具(TcpEngine)使用简介
官网:http://www.gongfen100.com/tcp_engine/docs.html
功能介绍
在有的网络开发需要走二进制流协议场景,比如网络游戏开发,在开发阶段,前端和后端协商好协议后就分别开发。在开发写代码的时候,有时需要对端发送一条完整的协议过来触发一下自己的代码,进行单步调试或单元测试,但对端现在也在开发,不能发完整的协议过来。这种情况下,我们可以使用TcpEngine工具模拟对端向我们发送完整的协议,实现触发我们的代码逻辑。
TcpEngine是可以通过xml配置,模拟二进制流协议的工具,比如有一条协议的定义如下面四个部分
1. 1~4共四个字节是整型,存放消息体长度。
- 5~6共两个字节是短整型,存放命令ID。
- 7~8共两个字节是短整型,存放固定值123。
4. 最后是消息体,长度由首四个字节指定。
那么TcpEngine对象的xml配置如下面所示。
<!-- 用<data>变量体接收协议配置过程示例,排序位置表示在协议中的位置 -->
<data id="msg_len" value="{int:net}"></data> <!-- 1~4共四个字节整型,从网络接收数据 -->
<data value="{short:net}"></data> <!-- 5~6共两个字节短整型,从网络接收数据 -->
<data value="{short:local:const}123"></data><!-- 7~8共两个字节短整型,填本地固定值123 -->
<data value="{string:net:calc}$msg_len"></data> <!-- 后面是消息体,从网络接收,接收长度由变量id=msg_len变量体指定 -->
这个工具的主要功能有
1. 通过xml配置二进制协议。
2. 支持模拟前端和后端(模拟后端时,只允许一个前端连接)
3. 支持byte(一个字节);short(两个字节短整型);int(四个字节整型);long(八个字节长整型);float(四个字节浮点型);double(八个字节浮点型);json字符串。
4. 支持Tcp和WebSocket两种网络协议。
5. 保存关键数据,在下一条协议中继续使用。
6. 日志显示测试过程数据变化,可保存日志到文件,下次打开日志文件可恢复测试现场。
7. 支持常用的运算符。
8. 支持延迟或暂停测试过程。
工具主界面
运行界面
工具地址: https://pan.baidu.com/s/1P0yPWWiEj8lUvN-a7GwIWw
实例:按“恢复”一次,发送一条( <send sleep="pause">)/每5秒发送一次(<send sleep="5000">)
<?xml version='1.0' encoding='UTF-8'?>
<engine>
<net>
<desc>网络配置</desc>
<type>client</type>
<!-- 本工具摸拟类型:server/client -->
<ip>127.0.0.1</ip>
<!-- 网络地址:如果type=server,这条忽略 -->
<port>7787</port>
<!-- 网络端口:type=server 监听端口;type=client 连接端口 -->
<nettype>tcp</nettype>
<!-- 协议类型:tcp/websocket -->
</net>
<process>
<desc>死循环发送</desc>
<monitor>
<!-- 触发器 -->
<desc>执行入口</desc>
<elem>startup</elem>
</monitor>
<trigger>
<desc>触发下次执行逻辑</desc>
<data id="trig_1" value="{short:local:const}10"/>
<!-- 字符串数据类型 -->
</trigger>
</process>
<process>
<desc>循环执行过程示例</desc>
<monitor>
<!-- 触发器 -->
<desc>通过triger触发</desc>
<elem>{short:local:const}10=={short:calc}$trig_1</elem>
<!-- 如果是变量名,先从全局recv找,再到gold找 -->
</monitor>
<send sleep="pause">
<desc>发送的数据定义</desc>
<data value="{byte:const}c"/>
<data id="send_int" value="{int:const}10086"/>
<data id="send_short" value="{short:calc}size($send_string)"/>
<!--动态计算变量值-->
<data id="send_long" value="{long:calc}10001+$send_int-10"/>
<!--有算术运算-->
<data id="send_float" value="{float:const}1.22"/>
<!--常量赋值-->
<data id="send_double" value="{double:const}5.66"/>
<data id="send_string" value="{string:const}"hello""/>
<!--发送字符串 "转义"号-->
</send>
<trigger>
<data id="trig_1" value="{short:local:const}10"/>
<!-- 字符串数据类型 -->
</trigger>
</process>
</engine>