摘 要:在计算机通信技术飞速发展的时代,计算机网络变得越来越重要。网络间实现信息共享和交换,主要是依靠网络协议,因此网络协议是各种网络类设备及系统级软件产品的重要组成部分。协议测试也是产品测试的重点。当前协议测试主要覆盖协议一致性测试,测试方法多采用静态解析的方式进行。这种测试方法存在协议异常分支难以覆盖,测试自动化程度低,且测试方法和测试工具都难以满足通用性,可移植性要求的问题。本文提供一种基于XML的协议动态测试工具设计方法,目的在于解决协议的动态测试自动化需求,该工具可完整覆盖协议一致性测试,协议级别的性能测试,具有测试用例易于维护,自动化程度高的优点,可有效提高测试质量和效率。
关键词:XML;协议测试;性能测试;通用性;扩展性
中图分类号:TN39 文献标识码:A DOI:10.3969/j.issn.1003-6970.2021.02.033
本文著录格式:何舒.基于XML的协议动态测试工具设计[J].软件,2021,42(02):108-111
Research on Dynamic Protocol Testing Method Based on XML
HE Shu
(The 30th Research Institute of China Electronics Technology Group Corporation, Chengdu Sichuan 610041)
【Abstract】:With the rapid development of computer communication technology, computer network becomes more and more important. The realization of information sharing and exchange between networks mainly depends on network protocol, so network protocol is an important part of various network devices and system level software products. Protocol testing is also the focus of product testing. At present, protocol testing mainly covers protocol conformance testing, and most of the testing methods are static analysis. This test method has the problems of protocol exception branch, which is difficult to cover, low degree of test automation, and test methods and tools are difficult to meet the requirements of generality and portability. This paper provides a design method of protocol dynamic testing tool based on XML, which aims to solve the requirement of protocol dynamic testing automation. The tool can completely cover protocol conformance testing and protocol level performance testing. It has the advantage of easy maintenance of test cases and high degree of automation, and can effectively improve the quality and efficiency of testing.
【Key words】:XML;protocol testing;performance testing;scalability
0引言
当今时代,各种网络通信设备以及系统级别的大型软件产品通过网络通信协议与外界交互。协议的稳定性是产品稳定的基础,因此协议测试是产品测试的重点之一。当今部分产品由于其本身使用场景的特性导致其通信协议不是常见的通用协议,而是根据产品需要设计的自定义协议。这类产品往往由于种类繁多,版本迭代快,导致协议测试的工作量较大,通过手工测试的方式难以满足测试效率和质量的要求。被测协议的不确定性对协议测试工具也提出了更高的要求,即需要满足通用性和可扩展性的要求。本文在充分了解設备通信协议格式特点的基础上,结合XML文件跨平台适用性及扩展性好的优点提出了基于XML的协议动态测试工具设计方法[1]。
1协议动态测试概述
当前协议测试主要包含协议一致性测试,协议级别的性能测试等。其中,协议一致性测试是指,根据协议设计文档的描述,确认协议的设计及实现与文档描述的一致性。测试方法可分为静态测试和动态测试两种。
(1)静态测试方法:通过在网络上抓包获取协议交互的完整数据包,再根据协议文档的描述手动比对各个协议字段与预期结果是否一致,或通过定义协议模板,调用传统的协议静态解析工具进行自动比对,从而确认协议实现一致性的方法。该方法可以覆盖协议正常分支,但协议异常分支需要手动构造异常数据包来实现。该方法的局限性在于,部分协议分支由于数据构造困难无法覆盖,测试过程大部分依靠手工操作,测试效率低,且测试质量难以保证。
(2)动态测试方法:通过模拟与被测设备进行协议交互的过程,完整覆盖协议的所有正常和异常分支。与静态测试的区别在于,静态测试不需要运行程序,而动态测试是需要工具模拟与被测设备交互的对象,与被测设备进行真实的协议交互,协议交互的数据均与真实数据一致。其优点在于,完整覆盖协议的正常和异常分支,相比静态测试,测试结果更接近真实,更准确可靠,测试覆盖度更高。
协议级别的性能测试则是指通过模拟与被测设备的真实协议交互过程,对被测设备进行并发测试,性能指标测试,稳定性测试等。
2协议动态测试工具设计原理
协议动态测试工具的设计原理是,定义一种XML格式的协议模板描述语言,该语言通过XML文件可以将协议交互过程的数据及操作信息表示出来。测试人员根据协议描述文档以及协议模板编写的语法,编写被测协议模板。工具通过对XML协议模板的解析,获取协议交互的过程信息及默认数据信息,动态组装数据包并发送给被测设备,被测设备按照正常协议流程回复响应包后,工具接收并根据协议模板定义解析响应包,对解析数据进行正确性断言并实时做出符合协议描述的响应(如:继续组装另一个协议数据包并发送),如此循环,直到完成协议交互的全过程[2]。
3工具架构
协议动态测试工具的总体架构图如图1所示。外部测试驱动程序模拟真实设备与被测设备或软件进行协议交互。协议数据包通过由测试驱动程序调用协议动态测试工具提供的对外接口完成协议动态组包和静态解析操作,输出协议交互的数据包。其中组包和解析所需的各种数据信息是通过读取各种外部数据,并调用外部函数库进行运算得到的。关于各个组成部分的说明如下:
3.1协议动态组包工具的核心模块
(1)动态组包模块:读取协议模板和用例数据,调用外部函数库进行相关运算得到组装的协议数据包。
(2)解析模块:读取协议模板和用例数据,调用外部函数库进行运算,得到协议数据的实际值与预期值,并对其进行一致性断言。
(3)报文收发模块:主要包括TCP和UDP两种常见网络协议的发送和接收,后续可根据需要扩展其他类型网络协议。
(4)外部函数处理:该模块起一个中间件的作用,用于屏蔽外部函数中部分不必要的参数,实现协议模板中定义的函数的动态调用。
(5)对外接口封装:协议动态测试工具以动态链接库的形式提供一系列简单有效的接口供外部测试驱动程序调用。可根据测试需要选择功能测试自动化框架或性能测试工具(如LoadRunner)作为测试驱动程序。对外接口也可根据实际需要扩展。
(6)日志报表处理:将工具运行产生的两类日志输出到测试驱动程序或日志文件。其中,运行流程日志通过接口输出给测试驱动程序,由上层程序调用自身的日志模块进行打印输出,协议组包和解析的字段数据值则通过生成XML格式的协议交互数据文件输出给测试人员查看。
(7)配置信息管理:各种运行时配置信息通过XML格式的配置文件定义,工具通过解析配置文件获取相关配置信息。
3.2外部输入数据
(1)测试用例:以Excel文件形式存在。每个用例为Excel中的一行数据,通过工具接口的调用进行协议业务流程的定义,同时指定该条用例的预期结果等。
(2)协议模板:以XML文件形式存在。协议模板的语法定义参见4.1章节所述。
(3)配置信息:以XML文件形式存在。包含配置项名-配置项值的键值对。
(4)预准备数据:部分需要从文件中读取的输入数据。工具会在测试执行初期将其一并读入,减少文件的反复读取,提高执行性能。
(5)性能测试脚本:需要通过性能测试工具Load
Runner作为测试驱动程序进行性能测试时,通过Load
Runner脚本定义协议的业务交互流程,用例仅包含需要修改的协议字段信息。
3.3测试驱动程序
(1)功能测试驱动程序:本工具使用自研的功能自动化测试框架作为功能测试驱动程序。也可选择其他测试框架,工具通过动态链接库的方式提供接口给测试驱动程序,测试驱动程序自定义业务流程,调用工具接口进行组包,解析和报文收发,完成协议交互过程。
(2)性能测试驱动程序:本工具选用通用性能测试工具LoadRunner作为性能测试驱动程序。通过Load
Runner脚本调用工具接口进行协议流程定义。再通过LoadRunner多线程或多进程运行脚本实现协议级别的性能测试,包括并发测试,压力测试和稳定性测试等。
3.4外部函数库
(1)基础函数库:包含通用协议运算所需的基础函数,如:字符串拼接,异或运算,base64编码等,可根据需要不断扩展。
(2)业务函数库:工具模拟真实设备,有可能涉及部分业务相关的处理或运算,所有这些操作需要定义成业務函数,在协议模板中定义,工具才能正常执行相关操作。该函数库可按不同产品进行管理扩充。
4关键技术实现
4.1 XML协议模板设计
XML协议模板的设计关系到协议流程描述是否能被工具有效识别。因此,协议模板的设计是协议动态测试工具的关键。设计总原则为既能描述各种协议复杂的流程,动作,数据依赖关系,又不能晦涩难懂,冗余。设计的关键点如下[3]:
(1)一个XML协议模板定义一个完整协议交互的所有数据包字段格式及字段产生方式。
(2)针对每个数据包,分别对应一套组包模板和解析模板,两个模板的字段名一致,内容定义各不相同,组包模板用于定义数据的产生方式,解析模板用于给出字段的预期值及实际值的获取方式,以便对解析结果断言。
(3)通过定义不同的XML关键字,描述协议交互过程的各种关键动作或要素。
(4)单个字段或区域实体,通过定义其不同属性,指明数据产生方式等;常用属性如表1所示。
(5)定义多个“区域”关键字,用于描述不同的协议交互场景中对数据的不同处理,如表2所示。
4.2接口设计
接口设计遵循简单,通用的原则,提供以下接口给外部驱动程序调用,如表3所示。
5结语
通过协议动态测试工具提供的接口进行业务流程组装,可以灵活地自定义协议交互过程;通过不同的测试驱动程序调用工具的接口,可以进行功能测试和性能测试等不同类型的协议测试;通过自定义协议模板,可以灵活适配各种被测协议;通过函数库扩展,可进行常用的基础运算以及根据不同业务定制业务处理函数;通过编写用例文件,可高效执行并维护测试用例,提高测试的效率和质量。更多的用法有待扩充,但都需要解决工具与外部程序的接口衔接等问题。
参考文献
[1] 葛泽文.基于自定义通信协议的动态测试技术研究[J].数字技术与应用,2019(9):90-92.
[2] 严军.基于XML的智能设备协议测试方法的研究[J].工业控制计算机,2019(8):55-57.
[3] 吴建平,尹霞.基于形式化方法的协议测试理论[J].清华大学学报:自然科学版,2001(4):203-208.