CN103312551B - 通用网关接口的测试方法及测试装置 - Google Patents

通用网关接口的测试方法及测试装置 Download PDF

Info

Publication number
CN103312551B
CN103312551B CN201210063513.8A CN201210063513A CN103312551B CN 103312551 B CN103312551 B CN 103312551B CN 201210063513 A CN201210063513 A CN 201210063513A CN 103312551 B CN103312551 B CN 103312551B
Authority
CN
China
Prior art keywords
data
request
response packet
type
reply data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201210063513.8A
Other languages
English (en)
Other versions
CN103312551A (zh
Inventor
夏凡
陈振坤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Tencent Cloud Computing Beijing Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201210063513.8A priority Critical patent/CN103312551B/zh
Publication of CN103312551A publication Critical patent/CN103312551A/zh
Application granted granted Critical
Publication of CN103312551B publication Critical patent/CN103312551B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种通用网关接口(CGI)的测试方法和测试装置,包括:收集客户端发出的请求包和服务器针对该请求响应的应答包,对所述请求包和应答包进行解析,生成包括请求数据和应答数据的用例文件;根据CGI的处理逻辑修改所述用例文件,其中包括将请求数据修改为构造的请求数据,以及将对应的应答数据修改为预期应答数据;将所述修改后的请求数据封装成测试请求包发送给服务器;接收服务器返回的应答包,对所述应答包进行解析得到实际应答数据,与所述预期应答数据进行对比,输出对比结果。利用本发明,可以减少测试工作量,提高测试精确度。

Description

通用网关接口的测试方法及测试装置
技术领域
本发明涉及软件测试技术领域,尤其涉及一种通用网关接口(CGI,CommonGatewayInterface)的测试方法及测试装置。
背景技术
CGI是一种运行在服务器上的程序,用于提供同客户端交互的接口。CGI内包括具体的逻辑处理模块,其中包括不同的逻辑分支,用于对请求数据进行相对应的处理并返回处理结果。CGI处理请求包的具体过程包括:客户端通过网络将用户的请求包送到服务器;服务器接收客户端的请求包并交给CGI处理;CGI根据该请求包的类型采用对应的处理逻辑进行处理,把处理结果传送给服务器;服务器通过应答包把处理结果送回到客户端。
目前,对于CGI的功能测试,大多数测试方法都是通过人工去验证功能是否正常的方法,每次更新CGI的时候,测试人员都需要人工对整个系统进行功能测试,从而保障系统质量。这样不仅需要较长的测试时间,并且也有很多重复性的工作。
目前也出现了一些测试工具,如iCAF工具,其主要功能是通过抓取客户端用户界面(UI,UserInterface)控件,修改UI控件的取值,然后自动发送测试包进行测试。
但是,现有的这种UI测试方法有两个主要缺点:
(1)客户端系统的UI更新一般是很敏捷的,界面经常出现变化,导致自动化脚本需要很大的维护量,就算CGI本身没有变化,但界面一发生变化就需要大量地修改测试代码和测试用例,测试工作量非常巨大,在实际中开展起来比较吃力,需要花费很多人力在维护上面,并且一旦有新的界面,还需编写新的用例去支持,而且跟CGI本身也没有直接的关系。
(2)另外,客户端界面通常有一些保护机制,利用UI控件无法任意修改请求的数据,因此现有的这种方法只能验证部分的正常功能,无法模拟各种请求情况,无法验证CGI对于异常请求的逻辑处理以及容错能力,而且发现问题的时候也很难准确定位到CGI出错的位置。例如黑客可以绕过客户端对请求数据进行篡改,在这种情况下需要检测CGI对应的容错能力,但是由于现有的这种测试方法无法模拟这种黑客篡改的情况,因此无法检测到CGI应对的这种情况的能力。因此,现有这种测试方法发现和解决CGI逻辑错误的能力较低,测试的准确度不高。
发明内容
有鉴于此,本发明的主要目的在于提供一种CGI的测试方法及其测试装置,减少测试工作量,提高测试精确度。
本发明的技术方案是这样实现的:
一种通用网关接口CGI的测试方法,包括:
收集客户端发出的请求包和服务器针对该请求响应的应答包,对所述请求包和应答包进行解析,生成包括请求数据和应答数据的用例文件;
根据CGI的处理逻辑修改所述用例文件,其中包括将请求数据修改为构造的请求数据,以及将对应的应答数据修改为预期应答数据;
将所述修改后的请求数据封装成测试请求包发送给服务器;
接收服务器返回的相应应答包,对所述应答包进行解析得到实际应答数据,与所述预期应答数据进行对比,输出对比结果。
一种CGI的测试装置,包括:
收集解包模块,用于收集客户端发出的请求包和服务器针对该请求响应的应答包,对所述请求包和应答包进行解析,得到对应的请求数据和应答数据;
用例生成模块,用于生成包括所述请求数据和应答数据的用例文件;
用例修改模块,用于根据测试人员指令修改所述用例文件,其中包括将请求数据修改为构造的请求数据,以及将对应的应答数据修改为预期应答数据;
封包模块,用于将所述修改后的请求数据封装成测试请求包发送给服务器;
解包对比模块,用于接收服务器返回的应答包,对所述应答包进行解析得到实际应答数据,与所述预期应答数据进行对比,将对比结果发送给输出模块输出;
输出模块,用于输出展示所述对比结果。
与现有技术相比,本发明不需要关心UI控件的变化,而是直接收集请求包生成一个基本的用例文件,并对用例中的数据进行修改生成测试用请求包,不必根据界面的变化修改测试代码和测试用例,减少了测试的工作量。
本发明不需要UI控件的帮助,不受客户端界面的保护机制的影响,而是可以对请求包中的数据进行任意修改,因此本发明中,测试人员可以根据CGI逻辑分支修改所生成的基本的用例文件,从而构造出测试人员希望构造出的任意的测试用例,用来模拟各种对应的请求情况,从而提高发现和解决CGI逻辑错误的能力,提高测试的准确度。
附图说明
图1为本发明所述CGI测试方法的主要流程图;
图2为本发明所述的CGI测试装置的一种组成示意图;
图3为本发明所述CGI测试装置包含存取控制模块的一种组成示意图;
图4为本发明所述CGI测试装置包含解包/封包代码生成模块的一种组成示意图;
图5a所示为请求包/应答包收集解析过程的一种流程图;
图5b所示为测试请求包的构造发送过程的一种流程图;
图5c所示为应答包收取比对过程的一种流程图。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
图1为本发明所述CGI测试方法的主要流程图。参见图1,该方法主要包括:
步骤101、收集客户端发出的请求包和服务器针对该请求响应的应答包,对所述请求包和应答包进行解析,得到对应的请求数据和应答数据。
由于客户端和服务器之间的数据包(包括请求包和应答包)是二进制的超文本传送协议(HTTP)数据包,因此需要对收集的请求包和应答包进行解析得到测试人员可以识别理解的数据。本步骤中,所述对请求包和应答包进行解析的一种具体方式为:
对所述二进制的请求包和应答包进行解析得到对应的字段名称及其具体数据;当然,也可以进一步解析得到字段的类型,以提供给测试人员更为详细的信息。在CGI的处理逻辑中,每一种数据包都对应一种数据结构类型,每一种数据结构类型中包括对应的数据结构,具体包括至少一个字段、每个字段对应的数据类型。在具体数据包中需要包括数据类型对应的字段、每个字段对应的数据类型及每个字段的具体数值。例如对于登录请求包对应包括的字段包括:用户名、密码等数据。
步骤102、生成包括步骤101所解析得到的请求数据和应答数据的用例文件。
本步骤生成的该用例文件是一种基本的用例文件,每一种请求包都至少对应一种基本的用例文件,测试人员可以在后续过程中在该用例文件的基础上修改得到任意的测试用例。本步骤中生成包括请求数据和应答数据的用例文件的一种具体方式为:
根据步骤101解析得到的所述字段名称及其具体数据生成用例文件,该用例文件中包括两部分内容:一部分为请求包部分,即请求数据,包括请求包的数据结构类型名称和各字段的名称及其具体数据,其中每一字段名称及其具体数据可以看作是一项请求数据;另一部分为对应的应答包部分,即应答数据,包括应答包的数据结构类型名称和各字段的名称及其具体数据,同理,其中每一字段名称及其具体数据可以看作是一项应答数据。
步骤103、根据测试人员的指令修改所述用例文件,其中包括将请求数据修改为构造的请求数据,以及将对应的应答数据修改为预期应答数据。
本步骤中,所述测试人员可以根据CGI逻辑分支发出修改指令,从而构造出测试人员希望构造出的任意的测试用例,用来模拟各种对应的请求情况,从而提高发现和解决CGI逻辑错误的能力,提高测试的准确度。
本步骤中,修改所述用例文件具体为:测试人员根据CGI逻辑分支,将用例文件中的请求数据中的至少一项字段名称对应的值修改为构造值,所谓构造值就是测试人员根据对CGI的测试需求人工编造的值,并将该请求数据对应的应答数据中对应的字段名称的对应值改为预期应答值,所谓预期应答值就是测试人员根据所述构造值按照正常的CGI处理逻辑确定出的应答值,该应答值代表了所述构造值对应的正常的CGI处理结果。修改完毕后,修改后的请求数据和预期应答数据则构成了一个新的用于测试的用例。此外,还可以进一步为该修改后的用例分配标识(ID)、以及输入该用例的描述信息,例如该用例是用于测试CGI逻辑中的哪个分支内容等,更方便测试人员在看到对比结果后更加准确地定位CGI的出错位置。
步骤104、将所述修改后的请求数据封装成测试请求包发送给服务器。
步骤105、接收服务器返回的针对所述测试请求包的应答包,对所述应答包进行解析得到实际应答数据,与所述预期应答数据进行对比。
本步骤中的一种具体的处理方法包括:将所收到的所述二进制的应答包进行解析得到实际应答数据,其中包括字段名称及其实际值;读取步骤103所述预期应答数据中的各字段名称及其预期值;将所述实际应答数据和预期应答数据中的各具有相同字段名称的实际值和预期值进行对比,判断是否满足预设的对比规则,将不满足所述对比规则的字段名称及其实际值和预期值交给步骤106输出。
步骤106、输出所述对比结果。
为了更好更加直观地将所述不满足对比规则的对比结果呈现给测试人员,本发明可以将所述对比结果的内容包含在邮件中,将该邮件发送给测试人员的目标邮箱。如果测试人员在修改用例文件时进一步记录了修改后用例的标识和用例描述信息,则在输出该用例对应的对比结果时,进一步输出该用例的标识和用例描述信息。
对应的,本发明还公开了一种CGI的测试装置,用于执行本发明所述的方法步骤。图2为本发明所述的CGI测试装置的一种组成示意图。参见图2,该测试装置为一种测试程序,主要包括:
收集解包模块201,用于收集客户端发出的请求包和服务器针对该请求响应的应答包,对所述请求包和应答包进行解析,得到对应的请求数据和应答数据。
用例生成模块202,用于生成包括所述请求数据和应答数据的用例文件。
用例修改模块203,用于根据测试人员指令修改所述用例文件,其中包括将请求数据修改为构造的请求数据,以及将对应的应答数据修改为预期应答数据。
该用例修改模块203可以提供用例修改界面,其中可以显示所述基本的用例文件的请求数据和应答数据,用户可以对其中的数据进行修改。
封包模块204,用于将所述修改后的请求数据封装成测试请求包发送给服务器。
解包对比模块205,用于接收服务器返回的应答包,对所述应答包进行解析得到实际应答数据,与所述预期应答数据进行对比,将对比结果发送给输出模块206输出。
输出模块206,用于输出展示所述对比结果。
通过本发明的方案,请求的数据是从真实的正常的客户数据中提取的,通过修改请求包里面的一两个特定字段,就可以使得测试人员能够更加容易地确保该构造出来的请求应当进入CGI处理逻辑的哪一条逻辑分支里面,从而更方便测试人员发现问题和定位问题,减少测试工作量。
在本发明的一种实施例中,本发明步骤101中,在解析得到所述字段名称及其具体数据之后,进一步保存所述解析得到的字段名称及其具体数据到数据库中;步骤102中,在生成所述用例文件时,从数据库中读取对应的字段名称及其具体的数据用于生成所述用例文件。
将所述字段名称及其具体数据保存到数据库的原因是:请求包及其对应的应答包不能同时收集到,应答包往往要迟后请求包一段时间,因此在解析请求包后不能立刻生成用例文件,需要等到解析完对应的应答包之后才能生成用例文件,如果不保存到数据库虽然也可以实现本发明的发明目的,但是生成用例文件的时间和占用的资源比较多,因此,在解析出的请求数据后,将请求数据保存到数据库,例如此处以可扩展标记语言(XML,ExtensibleMarkupLanguage)格式保存请求数据到数据库中;当收集到所述请求包对应的应答包并解析出应答数据之后,再将应答数据以XML格式保存到数据库中。这样的好处是生成用例文件的进程不必等待数据解析,在需要生成用例文件时读取数据库即可,可以提高效率和降低资源占用。在需要生成用例文件时,直接从数据库中读取请求包的XML数据串以及对应的应答包的XML数据串,对取出的XML数据串进行解析获取各个字段所对应的取值,生成一个用例文件,在该用例文件中,把相应的请求包的请求数据和对应应答包的应答数据集成在一起,这样请求包和应答包各个字段的内容就一目了然了。
同理,在步骤103中,在修改完所述用例文件后,进一步将该用例文件的请求数据和应答数据保存到数据库中,即将修改后的用例文件的全部请求数据(包括修改的字段值及其字段名称,以及没有修改的字段值及其字段名称)和全部应答数据(包括修改的字段预期应答值及其字段名称,以及没有修改的字段值及其字段名称)保存到数据库中,此处也以XML的格式保存。
在步骤104封装测试请求包时,从数据库中读取对应的请求数据用于封装成测试请求包;在步骤105中得到实际应答数据后,从数据库中读取对应的预期应答值进行对比。
所述XML是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML是标准通用标记语言(SGML)的子集,非常适合Web传输。由于XML有标准的格式并且已有许多开源的解析程序可供使用,所以本发明的优选实施例中采用XML格式来保存所述数据,当然本发明对具体的数据保存格式并不限定于XML格式,在其他实施例中也可以采用其它格式保存所述数据。
对应的,在所述CGI测试装置的一种具体实施例中,如图3所示,还进一步包括存取控制模块207,用于进一步将解析到的所述请求数据和应答数据存储到数据库208中,并在生成用例文件时从数据库208读取对应的请求数据和应答数据;还用于将修改后的请求数据和应答数据存储到数据库208中,并在构造测试请求包时,从数据库208中读取对应的请求数据,在对比时从数据库208中读取对应的预期应答数据。
在CGI中,每一种数据包有一一对应的数据结构类型,每一种数据结构类型中包括对应的数据结构,具体包括至少一个字段、每个字段对应的数据类型及每个字段的具体数值。这些数据结构类型的信息被记录在CGI的数据结构定义文件中。由于数据结构类型不同,因此不同数据包(包括请求包和应答包)的解析和封装操作会有所不同,因此需要由不同的程序代码执行所述解析和封装操作。本发明中的方法中,所述对请求包或应答包进行解析的操作由该请求包数据结构类型或应答包数据结构类型对应的解包代码执行;所述将请求数据封装成测试请求包的操作由该请求数据结构类型对应的封包代码执行。在本发明的所述测试装置中,所述收集解包模块和解包对比模块中具体包括解包代码,或可以调用解包代码,所述对请求包或应答包进行解析的操作由该请求包数据结构类型或应答包数据结构类型对应的解包代码执行;所述封包模块中具体包括封包代码,或可以调用封包代码,所述将请求数据封装成测试请求包的操作由该请求数据结构类型对应的封包代码执行。所述封包代码和解包代码可以直接调用CGI开发过程中已有的代码,详细的封包和解包过程在后文中介绍。
如果CGI的数据结构相对固定,在一种实施例中,可以将所述解包代码和封包代码直接写入所述测试装置的程序中。如果某一数据包对应的数据结构有变化,则其对应的封包和解包操作也要随之变化,这时需要对所述解包代码和封包代码进行修改,在一种实施例中,可以人工修改所述解包代码和封包代码以实现本发明的目的。
但是,为了进一步降低人员的工作量,在本发明的一种优选实施例中,可以进一步包括封包/解包代码的自动生成过程,即:通过扫描开发人员的数据结构定义文件,然后进行分析处理,从而自动生成各个数据结构类型对应的封包/解包代码,将这些程序代码更新到测试装置的测试程序中,从而可以使测试程序自动适应CGI的新的数据结构,保证测试过程的正常运行。这个过程可以在第一次测试时以及每次CGI进行变更同步之后自动执行,从而得到适应性的测试程序,以适应CGI的修改。
对应的,所述CGI测试装置中,如图4所示,进一步包括解包/封包代码生成模块209,用于根据CGI的数据结构定义文件生成与各数据结构类型对应的解包代码和封包代码,将所述解包代码提供给所述收集解包模块201和解包对比模块205,将所述封包代码提供给所述封包模块204。
所述具体的封包/解包代码的自动生成过程如下步骤41至步骤43:
步骤41:对所述CGI的数据结构定义文件进行解析,得到各数据结构类型名称以及各数据结构类型包含的字段名称和类型,并生成各字段的初始化数据。
所述生成各字段的初始化数据的目的在于:在构造测试请求包时,对于测试人员不修改的、且取值不确定的字段附上所述初始值,由于该初始值是一种正常数据,因此可以避免不确定的字段对测试结果造成干扰。
步骤42:为所述每一数据结构类型对应生成二进制转换函数和封装函数,该二进制转换函数和封装函数组成了该数据结构类型对应的封包代码。所述二进制转换函数可以直接调用CGI开发时的现有函数,但该函数必须与数据结构类型对应,专用于将该数据结构类型内的字段名称、类型及其数据转换为二进制流。在构造测试请求包时,根据请求数据中的数据结构类型名称调用该数据结构类型对应的二进制转换函数,由该二进制转换函数将该数据结构类型内的字段名称、类型及其数据转换为二进制流的包体。所述封装函数用于对所述二进制流包体进行封装得到对应的请求包,其中封装信息(主要是包头)包括该请求包对应的数据结构类型名称,所述封装操作主要是为包体打上包头,进行加密、加压等操作,制作成二进制流的请求包。所述封装函数也可以直接调用CGI开发时的现有函数。所述进行转换的原因是客户端与服务器之间采用超文本传送协议(HTTP)传输,而HTTP所需要的是二进制流文件。
步骤43:为所述每一数据结构类型对应生成字段转换函数和解封装函数,由该字段转换函数和解封装函数组成了该数据结构类型对应的解包代码;其中所述解封装函数可以直接调用CGI开发时的现有函数,用于解封装请求包或应答包,所述解封装操作主要包括解压、解密、解包头等操作,得到包头中的数据结构类型名称和二进制流的包体,再调用该数据结构类型名称对应的字段转换函数。该字段转换函数也可以直接调用CGI开发时的现有函数,但是该函数必须与该数据结构类型对应,专用于将所述二进制流的包体转换成对应数据结构类型的字段名称、类型及其数据。
当然上述步骤42和43之间没有严格的先后顺序,也可以先步骤43后步骤42,或同时执行。
下面举例说明上述的处理过程:
例如:在开发人员的数据结构定义文件中,数据结构SpecialStruct的结构定义如下:
经过解析,可以得到字段tA的数据类型是SomeStruct,字段iB的数据类型是unsignedint,字段pcC的数据类型是char*,进而可以得到数据结构类型SpecialStruct的数据初始化函数:
通过上述初始化函数可以生成各字段的初始化数据,之后调用该数据结构类型SpecialStruct对应的二进制转换函数以及对应的封装函数,组成封包代码。当进行封包操作时,利用二进制转换函数把该数据结构类型的字段及其取值转换成二进制流,并通过所述封装函数封装成一个二进制流文件,在跟服务器端完成短链接之后就可以顺利地进行数据包的收发操作了。
由上所述,本发明数据包的数据结构及其解包封包的代码是通过对开发人员的数据结构定义文件进行分析处理直接自动生成的,并且这些代码会定时更新,因此,即使CGI开发过程中的数据结构经常修改,也不需要人工修改对应的测试程序,这样就大大减少了人力在这方面上的维护,进一步减少了测试工作量。
下面以自动检测微信CGI为例,再次介绍本发明所述方法的一具体实施例。所述微信是一种支持跨通信运营商、跨操作系统平台通过网络快速发送免费(需消耗少量网络流量)语音短信、视频、图片和文字,支持多人群聊的手机聊天软件。当然,本发明并不仅仅限于自动检测微信CGI的功能正常性和异常处理的容错能力,还可以用于进行压力测试、内存泄漏测试和性能测试等测试用途。
自动检测微信CGI的过程主要包括如下步骤:
步骤501、请求包/应答包的封包/解包代码自动生成过程。即CGI测试装置根据微信CGI的数据结构定义文件,自动生成各数据结构类型对应的(即各数据包对应的)封包代码和解包代码。主要过程如上述步骤41至步骤43。
步骤502、请求包/应答包的收集解析。
如图5a所示为请求包/应答包收集解析过程的一种流程图。参见图5a,该过程包括:
步骤521、客户端接收测试人员发出的一个请求操作,向服务器发出一个请求包。
步骤522、服务器端在接收到所述请求包后会对请求包进行解包和解压解密处理,然后根据服务器本身制定的CGI逻辑生成并返回一个应答包。
步骤523、CGI测试装置收集上述请求包和对应的应答包,所述请求包和应答包均为二进制流,CGI测试装置需要将这种二进制流转换(通常采用业界常用的Dump操作进行转换)为对应的二进制请求包文件和二进制应答包文件并保存。
步骤524、CGI测试装置调用所述解包代码对所述二进制的请求包文件和相应的应答包文件进行解析,即:先用解封装函数解压、解密、解包头得到包头中的数据结构类型名称和二进制流的包体,再调用该数据结构类型名称对应的字段转换函数将所述二进制流的包体转换成对应数据结构类型的字段名称及其取值。解析之后得到请求数据和对应的应答数据,所述请求数据包括请求包的数据结构类型名称和数据结构中所包含的字段名称及其具体值;所述应答数据包括应答包的数据结构类型名称和数据结构中所包含的字段名称及其具体值。
步骤525、CGI测试装置把所述请求数据和相应的应答数据合成XML的格式并保存到数据库中。这里注意,所述请求包的请求数据和对应的应答包的应答数据要关联存储,在生成用例文件时需要关联读取。在向数据库中保存所述数据时,如果某些字段的值为音视频等二进制数据,则需要采用Base64编码转换之后再保存,当从数据库读取这些数据时,同样用Base64编码转换回二进制数据。
步骤526、在生成用例文件时,CGI测试装置首先从数据库中取出请求数据和相应的应答数据的XML数据串,对取出的XML数据串进行解析得到请求包的数据结构类型名称及各个字段及其对应的取值,以及解析得到对应应答包的数据结构类型名称及各个字段及其对应取值,生成一个用例文件,把解析得到的请求包的所述数据和相应应答包的所述数据分别写入这个用例文件,从而在该用例文件中集成了请求包部分和应答包部分两部分内容,即请求包的请求数据和相应应答包的应答数据,这样请求包和应答包各个字段的内容就一目了然了。
对于不同类型的请求包及其对应的应答包,可以分别生成不同的用例文件。当测试人员进行测试时,可以修改不同的用例文件从而构造出不同类型的测试请求包。
步骤503、测试请求包的构造发送。
如图5b所示为测试请求包的构造发送过程的一种流程图。参见图5b,该过程包括:
步骤531、测试人员根据CGI的逻辑分支在用例修改界面上修改某一请求包的用例文件,在用例文件的请求包的请求数据中,把请求包原来的一些字段的值修改为测试人员希望的构造值,在对应的应答包的应答数据中,把原来的应答值修改成测试人员预期会得到的预期应答值,修改之后的用例就变成了新的测试用例,也可以称之为目标用例文件。除此之外,测试人员还可以输入该新的测试用例的描述信息,例如该用例是用于测试CGI逻辑中的哪个分支内容等,以更方便测试人员在看到对比结果后更加准确地定位CGI的出错位置。CGI测试装置还可以自动为该新用例分别标识。
步骤532、CGI测试装置把修改后的目标用例文件中的请求包部分和应答包部分保存到数据库中,保存的时候以XML格式来保存,以达到可以快速通用地解析这些数据包的效果,而且也便于保存。
步骤533、当需要构造测试请求包时,CGI测试装置从数据库中取出所述目标用例的请求包数据(XML格式),解析出其中数据结构类型名称以及各个字段名称及其取值,其中包括修改后的字段和没有修改的字段,用于构造一个测试请求包。
步骤534、CGI测试装置调用步骤533所解析出的数据结构类型名称对应的封包代码,用该封包代码中的二进制转换函数将所述解析出请求包的字段名称及其取值转换成二进制流的包体,再用封装函数进行打包头、加密、加压等操作,制作成HTTP二进制流的请求包,该请求包就是构造出的测试请求包,最后将该测试请求包发送给服务器端进行处理。
步骤504、应答包收取比对。
如图5c所示为应答包收取比对过程的流程图。参见图5c,该过程包括:
步骤541、接收服务器返回的针对所述测试请求包的实际应答包,调用解包代码对所述应答包进行解析处理,即:先用解封装函数解压、解密、解包头得到包头中的数据结构类型名称和二进制流的包体,再调用该数据结构类型名称对应的字段转换函数将所述二进制流的包体转换成对应数据结构类型的字段名称及其取值。解析之后得到实际应答数据,即应答包的数据结构类型名称和数据结构中所包含的字段名称及其具体值,这些具体值为实际值。
步骤542、根据所述数据结构类型名称(与所述应答包对应)从数据库中查询对应用例中的预期应答数据的XML数据串,将该XML数据串解析成预期应答数据,即包括对应的字段名称及其具体值,其中的具体值就包括测试人员在修改用例时保存的预期值。
由于得到的应答包是二进制流文件,而预期结果又是以XML的形式保存在数据库中的,测试人员很难直接比对这两个结果来判断出得到的结果是否符合预期。因此需要执行上述步骤541和542对得到的二进制结果和预期结果分别进行解析,把各个字段的取值还原出来,这样比对就直观许多了。
步骤543、调用所述对比模块将所述步骤542得到的和步骤541得到的各个具有相同字段名称的预期值和实际值进行对比,判断是否满足预设的对比规则。所述预设的对比规则可以根据不同的字段名称进行有针对性的设定,主要的对比规则有如下几条:
(1)字段的预期值和实际值是否相等,如果是则满足对比规则,否则不满足对比规则。
(2)字段的预期值是否大于实际值,如果是则满足对比规则,否则不满足对比规则。
(3)字段的预期值是否小于实际值,如果是则满足对比规则,否则不满足对比规则。
(4)当字段值为索引时,判断字段的预期值索引到的二进制流和实际值索引到的二进制流是否相同,如果是则满足对比规则,否则不满足对比规则。
(5)字段的预期值和实际值可以是任意值,都认为满足对比规则。
当然,本发明不限定于上述几种对比规则,测试人员可以根据CGI的逻辑测试需要,自行规定更为有针对性的对比规则,此处不再赘述。
步骤544、将不满足所述对比规则的字段名称及其实际值和预期值输出给输出模块进行输出。例如把不满足比对预期的结果以字段和相应取值的方式显示出来,并会向测试人员明确显示该字段的预期值和实际得到的值分别是什么,而其他比对正常的字段和用例则不会有任何的显示。
步骤505、输出模块将对比结果的输出显示。
所述对比结果可以是以邮件和网页前端页面展示的方式反馈给测试人员。输出模块用于把CGI测试装置需要输出的有问题的比对结果以更好的、更加直观的方式呈现给测试人员。当出现比对的实际结果跟预期结果不一致的时候,输出模块会向测试人员和开发人员发送一份包含有结果比对的一些概要信息的邮件,其中包含有问题的用例ID、用例描述信息、预期结果和实际结果内容等概要信息;另外该邮件中还可以进一步包含有一个链接,测试人员通过该链接可以进入查看此次测试比对的详细信息说明,其中除了比对的概要信息外,还会包括出问题的是应答包里的哪一个字段、数据类型是什么、重试了多少次等详细的比对信息。如此一来,测试人员和开发人员就可以通过用例的描述信息和结果比对不一致的问题点出在哪一个地方等信息来确定出现潜在问题的逻辑分支。当CGI出现问题的时候,可以通过出现异常的请求的用例ID出发,很迅速地定位到问题点,从而减少受到影响和需要查找的范围,使得测试人员能够更快捷地发现和定位问题,也为开发人员能够快速地定位和解决问题提供了便利条件。
经过本发明,在对微信CGI进行测试时,整个操作过程中的大部分都是自动完成的,测试人员可以在点击运行测试装置后直接看到比对结果,而不用去了解结果的来源和结果比对的过程,大大提高了效率,减少了测试工作量。
本发明的上述流程不断重复自动执行,可以很有效地监控整个微信CGI系统的功能使用情况和异常处理情况,包括成功数和失败数,从而知道系统当前的运行情况,使得整个微信CGI更加稳定可靠,达到更全面的监控,当每次有微信CGI进行变更同步的时候,都会自动执行该测试装置,如果出现有实际得到的结果跟预期结果比对不一致的情况就会反馈给测试人员,查看微信CGI是否出现了问题,迅速定位出现问题的位置,提高了发现和解决CGI逻辑错误或故障的能力。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

Claims (12)

1.一种通用网关接口CGI的测试方法,其特征在于,包括:
收集客户端发出的请求包和服务器针对该请求响应的应答包,对所述请求包和应答包进行解析,生成包括请求数据和应答数据的用例文件;
根据CGI的处理逻辑修改所述用例文件,其中包括将请求数据修改为构造的请求数据,以及将对应的应答数据修改为预期应答数据;
将所述修改后的请求数据封装成测试请求包发送给服务器;
接收服务器返回的相应应答包,对所述应答包进行解析得到实际应答数据,与所述预期应答数据进行对比,输出对比结果。
2.根据权利要求1所述的方法,其特征在于,所述对请求包和应答包进行解析,生成包括请求数据和应答数据的用例文件的具体方式为:
对所述二进制的请求包和应答包进行解析得到所包含的字段名称及其具体数据;
根据解析得到的所述字段名称及其具体数据生成用例文件,该用例文件中包括两部分内容:一部分为请求数据,包括请求包的各字段的名称及其具体数据;另一部分为应答数据,包括应答包的各字段的名称及其具体数据。
3.根据权利要求2所述的方法,其特征在于,
在解析得到所述各字段名称及其具体数据之后,进一步保存所述解析得到的各字段的名称及其具体数据到数据库中;
在生成所述用例文件时,从数据库中读取对应的字段名称及其具体的数据用于生成所述用例文件。
4.根据权利要求2所述的方法,其特征在于,所述将请求数据修改为构造的请求数据,以及将对应的应答数据修改为预期应答数据具体为:将请求数据中的至少一项字段名称对应的值修改为构造值,并将该请求数据对应的应答数据中对应的字段名称的对应值改为预期应答值。
5.根据权利要求4所述的方法,其特征在于,
在修改完所述用例文件后,进一步将该用例文件的请求数据和应答数据保存到数据库中;在封装测试请求包时,从数据库中读取对应的请求数据用于封装成测试请求包;在得到实际应答数据后,从数据库中读取对应的预期应答值进行对比。
6.根据权利要求1所述的方法,其特征在于,所述对应答包进行解析得到实际应答数据,与所述预期应答数据进行对比输出对比结果的具体方式为:
将二进制的应答包进行解析得到实际应答数据,其中包括字段名称及其实际值;读取所述预期应答数据中的各字段名称及其预期值;
将所述实际应答数据和预期应答数据中的各具有相同字段名称的实际值和预期值进行对比,判断是否满足预设的对比规则,将不满足所述对比规则的字段名称及其实际值和预期值输出。
7.根据权利要求1所述的方法,其特征在于,在修改所述用例文件后,进一步记录修改后用例的标识和用例描述信息,在输出该用例对应的对比结果时,进一步输出该用例的标识和用例描述信息。
8.根据权利要求1至7任一项所述的方法,其特征在于,
所述对请求包或应答包进行解析的操作由该请求包数据结构类型或应答包数据结构类型对应的解包代码执行;
所述将修改后的请求数据封装成测试请求包的操作由该请求数据结构类型对应的封包代码执行;
在所述收集客户端发出的请求包和服务器针对该请求响应的应答包之前,进一步包括:根据CGI的数据结构定义文件生成与各数据结构类型对应的解包代码和封包代码。
9.根据权利要求8所述的方法,其特征在于,所述根据CGI的数据结构定义文件生成与各数据结构类型对应的封包代码和解包代码的具体方式为:
对所述CGI的数据结构定义文件进行解析,得到各数据结构类型名称以及各数据结构类型包含的字段名称和类型,并生成各字段的初始化数据;
为所述每一数据结构类型对应生成二进制转换函数和封装函数,该二进制转换函数和封装函数组成了该数据结构类型对应的封包代码;其中所述二进制转换函数用于将该数据结构类型内的字段名称、类型及其数据转换为二进制流的包体,所述封装函数用于对所述二进制流包体进行封装得到对应的请求包,其中封装信息包括该请求包对应的数据结构类型名称;
为所述每一数据结构类型对应生成字段转换函数和解封装函数,由该字段转换函数和解封装函数组成了该数据结构类型对应的解包代码;其中所述解封装函数用于解封装请求包或应答包,得到数据结构类型名称和二进制流的包体,再调用该数据结构类型名称对应的字段转换函数,该字段转换函数用于将所述二进制流的包体转换成对应的字段名称及其数据。
10.一种CGI的测试装置,其特征在于,包括:
收集解包模块,用于收集客户端发出的请求包和服务器针对该请求响应的应答包,对所述请求包和应答包进行解析,得到对应的请求数据和应答数据;
用例生成模块,用于生成包括所述请求数据和应答数据的用例文件;
用例修改模块,用于根据测试人员指令修改所述用例文件,其中包括将请求数据修改为构造的请求数据,以及将对应的应答数据修改为预期应答数据;
封包模块,用于将所述修改后的请求数据封装成测试请求包发送给服务器;
解包对比模块,用于接收服务器返回的应答包,对所述应答包进行解析得到实际应答数据,与所述预期应答数据进行对比,将对比结果发送给输出模块输出;
输出模块,用于输出展示所述对比结果。
11.根据权利要求10所述的装置,其特征在于,该装置进一步包括存取控制模块,用于进一步将解析到的所述请求数据和应答数据存储到数据库中,并在生成用例文件时从数据库读取对应的请求数据和应答数据;还用于将修改后的请求数据和应答数据存储到数据库中,并在构造测试请求包时,从数据库中读取对应的请求数据,在对比时从数据库中读取对应的预期应答数据。
12.根据权利要求10至11任一项所述的装置,其特征在于,
所述收集解包模块和解包对比模块中具体包括或调用解包代码,所述对请求包或应答包进行解析的操作由该请求包数据结构类型或应答包数据结构类型对应的解包代码执行;
所述封包模块中具体包括或调用封包代码,所述将修改后的请求数据封装成测试请求包的操作由该请求数据结构类型对应的封包代码执行;
该装置进一步包括解包/封包代码生成模块,用于根据CGI的数据结构定义文件生成与各数据结构类型对应的解包代码和封包代码,将所述解包代码提供给所述收集解包模块和解包对比模块,将所述封包代码提供给所述封包模块。
CN201210063513.8A 2012-03-12 2012-03-12 通用网关接口的测试方法及测试装置 Active CN103312551B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210063513.8A CN103312551B (zh) 2012-03-12 2012-03-12 通用网关接口的测试方法及测试装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210063513.8A CN103312551B (zh) 2012-03-12 2012-03-12 通用网关接口的测试方法及测试装置

Publications (2)

Publication Number Publication Date
CN103312551A CN103312551A (zh) 2013-09-18
CN103312551B true CN103312551B (zh) 2016-02-17

Family

ID=49137352

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210063513.8A Active CN103312551B (zh) 2012-03-12 2012-03-12 通用网关接口的测试方法及测试装置

Country Status (1)

Country Link
CN (1) CN103312551B (zh)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105446867B (zh) * 2014-08-22 2019-05-28 阿里巴巴集团控股有限公司 一种测试数据的生成方法及装置
CN106155891B (zh) * 2015-04-02 2019-07-05 阿里巴巴集团控股有限公司 接口测试方法、接口描述数据库生成方法及装置
CN106302349B (zh) * 2015-05-29 2020-06-05 北京京东尚科信息技术有限公司 基于libpcap的HTTP包分析方法及装置
CN106407099B (zh) * 2015-07-28 2019-10-22 阿里巴巴集团控股有限公司 一种测试方法和客户端
CN105306478A (zh) * 2015-11-11 2016-02-03 上海熙菱信息技术有限公司 Http协议数据规格化的系统及方法
CN105429982B (zh) * 2015-11-20 2019-11-08 北京畅游天下网络技术有限公司 一种客户端与服务器端通信内容的解析方法及装置
CN106802859A (zh) * 2015-11-25 2017-06-06 北京京东尚科信息技术有限公司 一种客户端软件测试的方法及装置
CN107203466B (zh) * 2016-03-17 2020-12-04 美的集团股份有限公司 Api测试方法和装置
CN105975396A (zh) * 2016-06-28 2016-09-28 腾讯科技(深圳)有限公司 一种自动化测试用例生成方法与系统
CN106201643B (zh) * 2016-07-14 2019-11-05 北京邮电大学 数据解析方法及装置
CN106569951B (zh) * 2016-11-04 2019-05-07 杭州顺网科技股份有限公司 一种脱离页面的Web测试方法
CN106407123B (zh) * 2016-11-09 2019-07-23 优酷网络技术(北京)有限公司 一种服务器接口的自动化测试方法及装置
CN106598851A (zh) * 2016-12-05 2017-04-26 广州唯品会信息科技有限公司 软件接口测试方法及系统
CN108241573B (zh) * 2016-12-23 2021-06-29 北京国双科技有限公司 一种集成测试代码生成方法及装置
CN109150643B (zh) * 2017-06-16 2022-09-23 创新先进技术有限公司 一种业务处理异常检测方法及装置
CN107294808B (zh) * 2017-07-05 2020-11-24 网易(杭州)网络有限公司 接口测试的方法、装置和系统
CN107783906A (zh) * 2017-09-28 2018-03-09 广州酷狗计算机科技有限公司 测试方法、装置及存储介质
CN108038125B (zh) * 2017-11-07 2021-06-01 平安科技(深圳)有限公司 基金系统测试值的自动对比方法、装置、设备及存储介质
CN109165130B (zh) * 2018-09-30 2022-01-25 福建星瑞格软件有限公司 一种验证解码数据库封包的测试方法及装置
CN109726128A (zh) * 2018-12-29 2019-05-07 亚信科技(中国)有限公司 一种测试用例生成方法、装置及服务器
CN112153079B (zh) * 2020-11-18 2021-07-13 福州大学 一种面向工业互联网网关测试的参考网关装置及方法
CN112988608B (zh) * 2021-05-19 2021-08-31 腾讯科技(深圳)有限公司 数据测试方法、装置、计算机设备及存储介质
CN114356785B (zh) * 2022-03-11 2022-05-20 中航信移动科技有限公司 一种数据处理方法、装置、电子设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1363887A (zh) * 2001-01-12 2002-08-14 三星电子株式会社 用于提供与软件包相关的信息的系统及其支持测试的系统
CN101447991A (zh) * 2008-11-19 2009-06-03 中国人民解放军信息安全测评认证中心 用于测试入侵检测系统的测试装置及测试方法
CN101916225A (zh) * 2010-09-02 2010-12-15 于秀山 图形用户界面软件功能覆盖测试方法
CN102184135A (zh) * 2011-04-19 2011-09-14 中国工商银行股份有限公司 在银行系统中基于指令脚本的测试方法及系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1363887A (zh) * 2001-01-12 2002-08-14 三星电子株式会社 用于提供与软件包相关的信息的系统及其支持测试的系统
CN101447991A (zh) * 2008-11-19 2009-06-03 中国人民解放军信息安全测评认证中心 用于测试入侵检测系统的测试装置及测试方法
CN101916225A (zh) * 2010-09-02 2010-12-15 于秀山 图形用户界面软件功能覆盖测试方法
CN102184135A (zh) * 2011-04-19 2011-09-14 中国工商银行股份有限公司 在银行系统中基于指令脚本的测试方法及系统

Also Published As

Publication number Publication date
CN103312551A (zh) 2013-09-18

Similar Documents

Publication Publication Date Title
CN103312551B (zh) 通用网关接口的测试方法及测试装置
US10528454B1 (en) Intelligent automation of computer software testing log aggregation, analysis, and error remediation
US10135936B1 (en) Systems and methods for web analytics testing and web development
CN107122297B (zh) 用于测试接口的请求消息生成的方法及设备
CN111083225A (zh) 在物联网平台中的数据处理方法、装置及物联网平台
CN103905258B (zh) 一种客户端数据上传功能的测试方法及装置
CN108628748B (zh) 自动化测试管理方法和自动化测试管理系统
CN104660617B (zh) 一种数据传输系统及方法
CN108920359B (zh) 应用程序的测试方法、装置、存储介质和电子装置
CN106331009A (zh) 一种应用程序下载方法、装置及系统
CN106851513A (zh) 一种电子产品的测试方法和系统
KR20140106857A (ko) 프로토콜 적합성 검증 방법, 이를 실행하는 장치 및 이를 실행하는 시스템
CN112540924A (zh) 接口自动化测试方法、装置、设备及存储介质
CN110297776A (zh) 检测报告生成、接收方法、装置、设备及存储介质
CN105808510A (zh) 一种调试数据校验方法及装置
CN112367680A (zh) 基于智能电表的外部通信测试方法、装置和计算机设备
CN111506305B (zh) 工具包生成方法、装置、计算机设备及可读存储介质
CN112379965B (zh) 沙盒文件映射系统、客户端装置、映射端装置、沙盒文件映射方法以及电子设备
CN107040613A (zh) 一种报文传输方法及系统
CN111882149B (zh) 一种预算申报系统
CN106302349A (zh) 基于libpcap的HTTP包分析方法及装置
CN116346660A (zh) 基于依赖替换服务的数据处理方法、装置、设备及介质
CN110825538A (zh) 一种基于mq可自定义数据类型动态进行数据交互的方法
CN110099033B (zh) 一种下位机架构
CN113438226B (zh) 基于混合传输协议的报文生成、解析方法、设备及系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20200821

Address after: 518057 Nanshan District science and technology zone, Guangdong, Zhejiang Province, science and technology in the Tencent Building on the 1st floor of the 35 layer

Co-patentee after: TENCENT CLOUD COMPUTING (BEIJING) Co.,Ltd.

Patentee after: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd.

Address before: Shenzhen Futian District City, Guangdong province 518044 Zhenxing Road, SEG Science Park 2 East Room 403

Patentee before: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd.