TCP接口测试方法、介质、设备及装置转让专利
申请号 : CN202110395169.1
文献号 : CN113190388B
文献日 : 2022-04-22
发明人 : 谢婷婷 , 李秀源 , 庄建青 , 韩科敏
申请人 : 厦门路桥信息股份有限公司
摘要 :
权利要求 :
1.一种TCP接口测试方法,其特征在于,包括以下步骤:根据测试需求创建不同业务处理逻辑的测试类,并根据jmeter取样器Sampler中的java请求格式完成代码编写,以及创建线程组,并在所述线程组中添加取样器java请求;
获取携带测试信息的接口测试请求,其中,所述测试信息包括测试参数、并发线程数和执行策略,所述测试参数包括服务端的标识信息和对应的客户端的标识信息;
根据所述测试信息启动所述客户端,以及调用心跳保活以建立所述客户端与所述服务端的长连接;
将所述测试信息写入java对象,并通过netty封装的TCP协议处理模块根据TCP协议规范将所述测试信息协议编码成编码数据以发送给所述服务端,以便所述服务端对所述编码数据进行解码及相关业务处理,并将处理结果编码成TCP数据包以响应给所述客户端,所述客户端根据TCP协议规范接收所述TCP数据包,并对所述TCP数据包进行解码及相关业务处理以断言响应结果。
2.如权利要求1所述的TCP接口测试方法,其特征在于,采用jmeter GUI工具创建线程组,还在所述线程组中添加测试相关组件,以便测试结束后通过所述测试相关组件对测试结果进行分析。
3.如权利要求1‑2中任一项所述的TCP接口测试方法,其特征在于,在根据TCP协议规范对所述测试信息进行协议编码时,根据不同数据类型进行编码,并产生数据安全校验码,以便根据所述数据安全校验码在发送及接收的过程中进行数据安全校验。
4.如权利要求1所述的TCP接口测试方法,其特征在于,在调用心跳保活以建立所述客户端与所述服务端的长连接时,还对所述客户端的标识信息和一一对应的TCP连接通道进行存储,以便通过所述TCP连接通道进行数据传输。
5.一种计算机可读存储介质,其特征在于,其上存储有TCP接口测试程序,该TCP接口测试程序被处理器执行时实现如权利要求1‑4中任一项所述的TCP接口测试方法。
6.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时,实现如权利要求1‑4中任一项所述的TCP接口测试方法。
7.一种TCP接口测试装置,其特征在于,包括:创建模块,所述创建模块用于根据测试需求创建不同业务处理逻辑的测试类,并根据jmeter取样器Sampler中的java请求格式完成代码编写,以及创建线程组,并在所述线程组中添加取样器java请求;
获取模块,所述获取模块用于获取携带测试信息的接口测试请求,其中,所述测试信息包括测试参数、并发线程数和执行策略,所述测试参数包括服务端的标识信息和对应的客户端的标识信息;
通讯连接模块,所述通讯连接模块用于根据所述测试信息启动所述客户端,以及调用心跳保活以建立所述客户端与所述服务端的长连接;
测试模块,所述测试模块用于将所述测试信息写入java对象,并通过netty封装的TCP协议处理模块根据TCP协议规范将所述测试信息协议编码成编码数据以发送给所述服务端,以便所述服务端对所述编码数据进行解码及相关业务处理,并将处理结果编码成TCP数据包以响应给所述客户端;所述客户端根据TCP协议规范接收所述TCP数据包,并对所述TCP数据包进行解码及相关业务处理以断言响应结果。
8.如权利要求7所述的TCP接口测试装置,其特征在于,采用jmeter GUI工具创建线程组,还在所述线程组中添加测试相关组件,以便测试结束后通过所述测试相关组件对测试结果进行分析。
9.如权利要求7所述的TCP接口测试装置,其特征在于,在根据TCP协议规范对所述测试信息进行协议编码时,根据不同数据类型进行编码,并产生数据安全校验码,以便根据所述数据安全校验码在发送及接收的过程中进行数据安全校验。
10.如权利要求7所述的TCP接口测试装置,其特征在于,在调用心跳保活以建立所述客户端与所述服务端的长连接时,还对所述客户端的标识信息和一一对应的TCP连接通道进行存储,以便通过所述TCP连接通道进行数据传输。
说明书 :
TCP接口测试方法、介质、设备及装置
技术领域
背景技术
efixedBinaryTCPClientImpl等取样器用于模拟TCP协议发送和接收TCP字节流数据,但是,
使用的上述取样器要么容易造成TCP粘包,要么最终输出的数据不可读,且均没有TCP连接
保活的功能,从而容易导致接口测试执行失败。
发明内容
包,然后发送该数据包;而在读取数据包时,直到碰到结束符EOl byte才会结束,否则的话
一直读到字节流结束,容易造成TCP粘包;该取样器最终输出的是一串可读字符串;然后再
使用jmeter的其它断言模块解析该字符串进行断言,完成一次接口请求测试;
转成字节流B,完成TCP组包,然后发送该数据包;而在读取数据包时,直到碰到设定结束符
才会结束,否则的话一直读到字节流结束,同样容易造成TCP粘包;该取样器最终输出的是
一串16进制字符串,不可读,还需要进一步解码才能变成可读的字符串;然后再使用jmeter
的其它断言模块解析该字符串进行断言,完成一次接口请求测试;
流A的长度X1,将X1转成长度为Y的字节流B,并将B合并在字节流A的前面,完成最终的TCP组
包,将数据包A发送;而在读取数据时,先读取长度为Y的字节流C,解码成整型X2,接下来再
读取的长度为X2的字节流D,然后将字节流D转成16进制字符串;使用该采用器不会发生TCP
粘包,最终输出的是一串16进制字符串,不可读,还需要进一步解码才能变成可读的字符
串;然后再使用jmeter的其它断言模块解析该字符串进行断言,完成一次接口请求测试。
列这些数据;须严格按照协议规范的这些定义进行编码完成TCP组包;其中数据类型有很多
种,例如long,String,int,byte,BCD,Word,Timestamp等;另外关于接口测试需求方面,在
测试TCP服务端接口时要求覆盖复杂的业务场景,还要能判断响应是否包含了协议规范中
定义必须要有的值,且这些值是否正确;总之要能判断响应是否正常的,如果是则通过测
试,否则就是不能通过测试;使用现有的jmeter中的TCPClientImpl只能使用
String.getBytes进行编码,不能根据具体的数据类型进行编码,故该取样器不适用;而使
用LengthPrefixedBinaryTCPClientImpl时不适用于数据长度定义不在数据包前面的情
况;该取样器输入和输出都是16进制字符串,使用该取样器,依然无法满足覆盖复杂的业务
场景和进行响应断言;最后BinaryTCPClientImpl需要指定数据包结束符,才能正确读取数
据包,但是该数据结束符对于大多数的TCP服务端和客户端TCP协议规范中并没有定义,传
递给TCP服务端的数据包服务端无法解码;若不指定数据包结束符,就会造成TCP粘包;虽然
TCP服务端可以修改代码取消TCP连接保活,不主动断开连接,也可以修改代码取消数据包
校验,但是现有技术依然无法完善的解决TCP粘包问题,无法根据不同的数据类型进行编解
码,无法满足覆盖复杂的业务场景,无法满足进行响应断言的测试要求。
规范定义的数据组包规则完成协议编解码,实现java对象与TCP字节流之间的转换;TCP协
议处理模块根据数据组包规则按需读取数据包,避免TCP粘包;从而能够保证高效、稳定的
对TCP接口进行测试。
java请求格式完成代码编写,以及创建线程组,并在所述线程组中添加取样器java请求;获
取携带测试信息的接口测试请求,其中,所述测试信息包括测试参数、并发线程数和执行策
略,所述测试参数包括服务端的标识信息和对应的客户端的标识信息;根据所述测试信息
启动所述客户端,以及调用心跳保活以建立所述客户端与所述服务端的长连接;将所述测
试信息写入java对象,并通过netty封装的TCP协议处理模块根据TCP协议规范将所述测试
信息协议编码成编码数据以发送给所述服务端,以便所述服务端对所述编码数据进行解码
及相关业务处理,并将处理结果编码成TCP数据包以响应给所述客户端;所述客户端根据
TCP协议规范接收所述TCP数据包,并对所述TCP数据包进行解码及相关业务处理以断言响
应结果。
组,并在所述线程组中添加取样器java请求;然后,获取携带测试信息的接口测试请求,其
中,测试信息包括测试参数、并发线程数和执行策略,测试参数包括服务端的标识信息和对
应的客户端的标识信息;接着,根据测试信息启动所述客户端,以及调用心跳保活以建立客
户端与服务端的长连接;最后,将测试信息写入java对象,并通过netty封装的TCP协议处理
模块根据TCP协议规范将测试信息协议编码成编码数据以发送给服务端,以便服务端对编
码数据进行解码及相关业务处理,并将处理结果编码成TCP数据包以响应给客户端,客户端
根据TCP协议规范接收TCP数据包,并对TCP数据包进行解码及相关业务处理以断言响应结
果;由此,通过netty封装TCP协议处理模块,按照TCP协议规范定义的数据组包规则完成协
议编解码,实现java对象与TCP字节流之间的转换;TCP协议处理模块根据数据组包规则按
需读取数据包,避免TCP粘包;从而能够保证高效、稳定的对TCP接口进行测试。
进行数据安全校验。
据传输。
方法。
定的对TCP接口进行测试。
所述程序时,实现如上述的TCP接口测试方法。
效、稳定的对TCP接口进行测试。
取样器Sampler中的java请求格式完成代码编写,以及创建线程组,并在所述线程组中添加
取样器java请求;获取模块,所述获取模块用于获取携带测试信息的接口测试请求,其中,
所述测试信息包括测试参数、并发线程数和执行策略,所述测试参数包括服务端的标识信
息和对应的客户端的标识信息;通讯连接模块,所述通讯连接模块用于根据所述测试信息
启动所述客户端,以及调用心跳保活以建立所述客户端与所述服务端的长连接;测试模块,
所述测试模块用于将所述测试信息写入java对象,并通过netty封装的TCP协议处理模块根
据TCP协议规范将所述测试信息协议编码成编码数据以发送给所述服务端,以便所述服务
端对所述编码数据进行解码及相关业务处理,并将处理结果编码成TCP数据包以响应给所
述客户端;所述客户端根据TCP协议规范接收所述TCP数据包,并对所述TCP数据包进行解码
及相关业务处理以断言响应结果。
创建线程组,并在所述线程组中添加取样器java请求;获取模块获取携带测试信息的接口
测试请求,其中,测试信息包括测试参数、并发线程数和执行策略,测试参数包括服务端的
标识信息和对应的客户端的标识信息;通讯连接模块用于根据测试信息启动客户端,以及
调用心跳保活以建立客户端与服务端的长连接;测试模块用于将测试信息写入java对象,
并通过netty封装的TCP协议处理模块根据TCP协议规范将测试信息协议编码成编码数据以
发送给服务端,以便服务端对编码数据进行解码及相关业务处理,并将处理结果编码成TCP
数据包以响应给所述客户端;客户端根据TCP协议规范接收所述TCP数据包,并对TCP数据包
进行解码及相关业务处理以断言响应结果;由此,通过netty封装TCP协议处理模块,按照
TCP协议规范定义的数据组包规则完成协议编解码,实现java对象与TCP字节流之间的转
换;TCP协议处理模块根据数据组包规则按需读取数据包,避免TCP粘包;从而能够保证高
效、稳定的对TCP接口进行测试。
进行数据安全校验。
据传输。
附图说明
具体实施方式
图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本
发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
java请求。
务处理过程中的规则等。
测试脚本时,保证TCP连接不会断开,避免造成测试执行失败。
及相关业务处理,并将处理结果编码成TCP数据包以响应给客户端,客户端根据TCP协议规
范接收TCP数据包,并对TCP数据包进行解码及相关业务处理以断言响应结果。
进行数据安全校验。
与TCP字节流之间的转换;TCP协议处理模块实现数据包的数据校验码,完成数据安全校验,
防止数据在传输时被篡改,保证数据的完整性;TCP协议处理模块根据数据组包规则按需读
取数据包,解决TCP粘包问题;同时结合jmeter的java请求,并根据各业务场景,抽出关键参
数,作为接口测试输入参数,再根据TCP协议处理模块解码后java对象进行断言,完成接口
功能和/或性能测试。
处理模块、本地缓存;在TCP服务端的接口测试中,TCP协议处理模块首先,启动TCP客户端,
建立TCP客户端与TCP服务端的通讯连接,并调用心跳保活维护TCP客户端与TCP服务端的长
连接;并将TCP客户端唯一Id与TCP连接通道存入本地缓存中;在心跳保活模块中,启动一个
定时任务,按照设置的心跳保活间隔,调用报文发送控制器发送协议规范定义保活数据包,
维持TCP客户端与TCP服务端的长连接;若心跳保活失败,不会进行重连,抛出异常,断言本
次测试结论为不通过;然后,通过报文发送控制器接收请求体,即java对象根据请求体中的
TCP终端唯一ID从本地缓存中获取TCP的连接通道;将TCP连接通道和数据请求体发送给协
议编码器;同时监听本地缓存中的是否有收到本次请求的响应;接着,协议编码器会根据
TCP协议规范完成协议编码,实现数据安全校验码,一并转成字节流,完成TCP组包,传递到
发送模块;再接着,发送模块将报文发送到TCP服务端,TCP服务端收到请求后,先提取数据
安全校验码进行数据包校验,校验通过后再解码进行业务处理,并将处理结果编码成TCP数
据包响应给TCP客户端;再然后,接收模块接收TCP服务端下发的数据包,根据协议规范定义
实现按需接收数据包数据,并传递给协议解码器;最后,协议解码器收到一串字节流后先校
验数据安全验证码,检验通过后根据TCP协议规范进行解码,解码后传递给接收业务处理模
块,业务处理根据解析结果进行业务处理,若是响应类型的数据包则将解析结果Java对象
存入本地缓存;若数据安全验证码检验不通过,则丢弃本次接收到的数据包;报文发送控制
器在发送请求后一直监听本地缓存,在超时时间内确认是否收到响应,确认收到后返回给
请求者。
及创建线程组,并在所述线程组中添加取样器java请求;然后,获取携带测试信息的接口测
试请求,其中,测试信息包括测试参数、并发线程数和执行策略,测试参数包括服务端的标
识信息和对应的客户端的标识信息;接着,根据测试信息启动所述客户端,以及调用心跳保
活以建立客户端与服务端的长连接;最后,将测试信息写入java对象,并通过netty封装的
TCP协议处理模块根据TCP协议规范将测试信息协议编码成编码数据以发送给服务端,以便
服务端对编码数据进行解码及相关业务处理,并将处理结果编码成TCP数据包以响应给客
户端,客户端根据TCP协议规范接收TCP数据包,并对TCP数据包进行解码及相关业务处理以
断言响应结果;由此,通过netty封装TCP协议处理模块,按照TCP协议规范定义的数据组包
规则完成协议编解码,实现java对象与TCP字节流之间的转换;TCP协议处理模块根据数据
组包规则按需读取数据包,避免TCP粘包;从而能够保证高效、稳定的对TCP接口进行测试。
所在的工程通过maven打成jar包,放置在jmeter的lib/ext目录下,然后通过jmeter GUI工
具创建线程组,在线程组中添加java请求以及其它测试相关的组件,例如聚合报告,查看结
果树等;在java请求中选择测试类,GUI界面显示输入参数;填写参数,设置并发线程数以及
执行策略;然后运行脚本,开始测试;进入启动线程setupTest阶段,在该阶段先获取输入参
数,例如TCP服务端地址,TCP客户端唯一Id等;启动TCP客户端,建立与TCP服务端的连接;线
程启动完毕后,进入runTest阶段,在该阶段完成并发TCP请求测试:首先获取输入参数,将
参数写入java对象,在调用TCP协议处理模块中的报文发送控制器,完成发送并接收响应结
果,根据实际业务测试场景,断言响应结果,给出单次测试结论,然后jmeter工具会进行统
计;并发测试完成后,进入结束线程teardownTest阶段,在该阶段是测试结束要做的工作,
会结束每个终端设备的保活进程,关闭TCP长连接;结束测试,整理jmeter工具提供的测试
报告,完成测试。
跳保活模块,保持了TCP客户端与TCP服务端之间的TCP长连接;TCP协议处理模块中的协议
编码器,实现按照不同数据类型进行编码,统一增加了数据包安全校验码,传递给TCP服务
端时才能通过安全验证,同时协议解码器会对TCP下发的数据包做安全校验,同时验证了服
务端的生成的安全验证码是否有效;TCP协议处理模块中接收模块,接收TCP服务端下发的
数据包,根据协议规范定义的按需接收数据包数据,有效地避免了TCP粘包;TCP协议处理模
块中的协议解码器,将字节流转成可读的java对象,通过解析后的结果,就可以对其根据实
际业务逻辑做复杂的断言,满足能进行响应断言的测试要求。
定的对TCP接口进行测试。
程序时,实现如上述的TCP接口测试方法。
效、稳定的对TCP接口进行测试。
中添加取样器java请求;获取模块20用于获取携带测试信息的接口测试请求,其中,测试信
息包括测试参数、并发线程数和执行策略,测试参数包括服务端的标识信息和对应的客户
端的标识信息;通讯连接模块30用于根据测试信息启动客户端,以及调用心跳保活以建立
客户端与服务端的长连接;测试模块40用于将测试信息写入java对象,并通过netty封装的
TCP协议处理模块根据TCP协议规范将测试信息协议编码成编码数据以发送给服务端,以便
服务端对编码数据进行解码及相关业务处理,并将处理结果编码成TCP数据包以响应给客
户端;客户端根据TCP协议规范接收TCP数据包,并对TCP数据包进行解码及相关业务处理以
断言响应结果。
进行数据安全校验。
编写,以及创建线程组,并在所述线程组中添加取样器java请求;获取模块获取携带测试信
息的接口测试请求,其中,测试信息包括测试参数、并发线程数和执行策略,测试参数包括
服务端的标识信息和对应的客户端的标识信息;通讯连接模块用于根据测试信息启动客户
端,以及调用心跳保活以建立客户端与服务端的长连接;测试模块用于将测试信息写入
java对象,并通过netty封装的TCP协议处理模块根据TCP协议规范将测试信息协议编码成
编码数据以发送给服务端,以便服务端对编码数据进行解码及相关业务处理,并将处理结
果编码成TCP数据包以响应给所述客户端;客户端根据TCP协议规范接收所述TCP数据包,并
对TCP数据包进行解码及相关业务处理以断言响应结果;由此,通过netty封装TCP协议处理
模块,按照TCP协议规范定义的数据组包规则完成协议编解码,实现java对象与TCP字节流
之间的转换;TCP协议处理模块根据数据组包规则按需读取数据包,避免TCP粘包;从而能够
保证高效、稳定的对TCP接口进行测试。
施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机
可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产
品的形式。
程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序
指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产
生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实
现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或
多个方框中指定的功能。
其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一
个方框或多个方框中指定的功能的步骤。
单词“一”或“一个”不排除存在多个这样的部件。本发明可以借助于包括有若干不同部件的
硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装
置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不
表示任何顺序。可将这些单词解释为名称。
选实施例以及落入本发明范围的所有变更和修改。
之内,则本发明也意图包含这些改动和变型在内。
一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,
“多个”的含义是两个或两个以上,除非另有明确具体的限定。
接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内
部的连通或两个元件的相互作用关系。对于本领域的普通技术人员而言,可以根据具体情
况理解上述术语在本发明中的具体含义。
第二特征“之上”、“上方”和“上面”可是第一特征在第二特征正上方或斜上方,或仅仅表示
第一特征水平高度高于第二特征。第一特征在第二特征“之下”、“下方”和“下面”可以是第
一特征在第二特征正下方或斜下方,或仅仅表示第一特征水平高度小于第二特征。
点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不
应理解为必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点
可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本
领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特
征进行结合和组合。
实施例进行变化、修改、替换和变型。