当前位置: 首页 > news >正文

【工具】二进制协议模拟测试工具(TcpEngine)使用简介

官网:http://www.gongfen100.com/tcp_engine/docs.html

功能介绍

  在有的网络开发需要走二进制流协议场景,比如网络游戏开发,在开发阶段,前端和后端协商好协议后就分别开发。在开发写代码的时候,有时需要对端发送一条完整的协议过来触发一下自己的代码,进行单步调试或单元测试,但对端现在也在开发,不能发完整的协议过来。这种情况下,我们可以使用TcpEngine工具模拟对端向我们发送完整的协议,实现触发我们的代码逻辑。

  TcpEngine是可以通过xml配置,模拟二进制流协议的工具,比如有一条协议的定义如下面四个部分

1. 1~4共四个字节是整型,存放消息体长度。

  1. 5~6共两个字节是短整型,存放命令ID。
  2. 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}&quot;hello&quot;"/>
            <!--发送字符串 &quot;转义"号-->
        </send>
        <trigger>
            <data id="trig_1" value="{short:local:const}10"/>
            <!-- 字符串数据类型 -->
        </trigger>
    </process>
</engine>

相关文章:

  • 【队列】Kafka和Rabbitmq的最大区别
  • 【Linux】Linux的五个查找命令:find,locate,whereis,which,type 及其区别
  • 【工具】开发工具红黑榜 (TCP测试/HTTP测试/SHELL工具/串口工具……)
  • 【QT】QT学习-Qt第一个小程序(使用vs2017开发)-研读
  • Qt5.7 + VS2015 环境搭建
  • 【Modbus 】Modbus 协议
  • 【QT】QT学习:Qt和其它GUI库的对比
  • 【代码格式化】linux代码格式化(Astyle)+wind格式转unix格式(Doc2Unix)----git提交代码前的处理...
  • gitlab-ci 持续集成完整实践---待学习
  • 【服务器】身份认证系统(三)什么是OAuth2 + oauth的权限系统(鉴权系统)
  • 【Vue.js】Vue 学习笔记
  • 【粘包和拆包】数据帧粘包和拆包处理方式
  • 【网关】什么是网关、网桥和交换机(集线器、网桥、交换机、路由器、网关大解析)...
  • 【软件设计】架构设计 分析组件化与模块化之间的区别
  • 【word】word 笔记
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • Cookie 在前端中的实践
  • Facebook AccountKit 接入的坑点
  • HTTP 简介
  • Java Agent 学习笔记
  • Javascript设计模式学习之Observer(观察者)模式
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Python实现BT种子转化为磁力链接【实战】
  • Spring Cloud Feign的两种使用姿势
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Vue小说阅读器(仿追书神器)
  • webgl (原生)基础入门指南【一】
  • yii2权限控制rbac之rule详细讲解
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 马上搞懂 GeoJSON
  • 前端之Sass/Scss实战笔记
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • FaaS 的简单实践
  • MPAndroidChart 教程:Y轴 YAxis
  • 阿里云ACE认证之理解CDN技术
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (九)信息融合方式简介
  • (篇九)MySQL常用内置函数
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (原創) 未来三学期想要修的课 (日記)
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NetCore 如何动态路由
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [AIGC] Redis基础命令集详细介绍
  • [APIO2015]巴厘岛的雕塑
  • [AutoSAR系列] 1.3 AutoSar 架构