发明内容
本发明提供了一种生成客户端性能测试脚本方法及装置,解决了移动终端APP客户端性能测试脚本开发困难,测试工作难度大的问题。
依据本发明的一个方面,提供了一种生成客户端性能测试脚本方法,包括:
创建待测试客户端与对应服务器之间的数据通信链路;
通过数据通信链路获取待测试客户端与对应服务器之间的业务报文数据;
解析业务报文数据,得到业务报文数据的原子化参数并保存至对应的原子化参数库中;
将原子化参数库中的原子化参数填入对应的脚本模板,生成待测试客户端的测试脚本。
其中,创建待测试客户端与对应服务器之间的数据通信链路的步骤包括:
通过配置热点,使待测试客户端通过无线网卡与对应的服务器进行数据通信,得到待测试客户端与对应服务器之间的数据通信链路。
其中,通过数据通信链路获取待测试客户端与对应服务器之间的业务报文数据的步骤包括:
监听无线网卡中的通信数据;
对通信数据进行筛选过滤,得到待测试客户端与对应服务器之间的业务报文数据。
其中,对通信数据进行筛选过滤,得到待测试客户端与对应服务器之间的业务报文数据的步骤包括:
采用过滤算法中的过滤规则表达式,对通信数据进行筛选过滤;
将未过滤掉的数据包确定为待测试客户端与对应服务器之间的业务报文数据,并存储至预设缓冲区。
其中,解析业务报文数据,得到业务报文数据的原子化参数并保存至对应的原子化参数库中的步骤包括:
采用字符串算法,对业务报文数据进行遍历截取,得到多个原子化参数;
将同一业务的原子化参数存储至相同的原子化参数库中;其中,一个业务具有单条或多条业务报文数据,一个业务对应一个原子化参数库。
其中,将原子化参数库中的原子化参数填入对应的脚本模板,生成待测试客户端的测试脚本的步骤包括:
根据待测试性能需求,选择对应的脚本模板,脚本模板中包括多个参数项;
检测原子化参数库中是否存在与脚本模板的参数项相对应的原子化参数;
若存在,则将对应的原子化参数填入脚本模板中;若不存在,则采用脚本模板的默认数据;
当脚本模板中的所有参数项均不为空时,生成待测试客户端的测试脚本。
依据本发明的再一个方面,还提供了一种生成客户端性能测试脚本装置,包括:
创建模块,用于创建待测试客户端与对应服务器之间的数据通信链路;
获取模块,用于通过数据通信链路获取待测试客户端与对应服务器之间的业务报文数据;
解析模块,用于解析业务报文数据,得到业务报文数据的原子化参数并保存至对应的原子化参数库中;
生成模块,用于将原子化参数库中的原子化参数填入对应的脚本模板,生成待测试客户端的测试脚本。
其中,创建模块包括:
创建单元,用于通过配置热点,使待测试客户端通过无线网卡与对应的服务器进行数据通信,得到待测试客户端与对应服务器之间的数据通信链路。
其中,获取模块包括:
监听单元,用于监听无线网卡中的通信数据;
过滤单元,用于对通信数据进行筛选过滤,得到待测试客户端与对应服务器之间的业务报文数据。
其中,过滤单元包括:
筛选子单元,用于采用过滤算法中的过滤规则表达式,对通信数据进行筛选过滤;
处理子单元,用于将未过滤掉的数据包确定为待测试客户端与对应服务器之间的业务报文数据,并存储至预设缓冲区。
其中,解析模块包括:
遍历单元,用于采用字符串算法,对业务报文数据进行遍历截取,得到多个原子化参数;
存储单元,用于将同一业务的原子化参数存储至相同的原子化参数库中;其中,一个业务具有单条或多条业务报文数据,一个业务对应一个原子化参数库。
其中,生成模块包括:
选取单元,用于根据待测试性能需求,选择对应的脚本模板,脚本模板中包括多个参数项;
检测单元,用于检测原子化参数库中是否存在与脚本模板的参数项相对应的原子化参数;
处理单元,用于当原子化参数库中存在与脚本模板的参数项相对应的原子化参数时,则将对应的原子化参数填入脚本模板中;当不存在时,则采用脚本模板的默认数据;
生成单元,用于当脚本模板中的所有参数项均不为空时,生成待测试客户端的测试脚本。
本发明的实施例的有益效果是:
通过监听客户端与服务器端之间传输的业务报文数据,并对其进行解析得到对应的原子化参数,根据测试需要选择对应的脚本模板,自动生成测试脚本,无需人工干预,适用于各类移动终端的APP性能测试脚本开发,降低了测试难度,此外,参数原子化降低了个参数之间的耦合状态,降低了各参数间的干扰,保证了测试脚本的准确性。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
实施例一
如图1所示,本发明的实施例提供了一种生成客户端性能测试脚本方法,具体包括以下步骤:
步骤S101:创建待测试客户端与对应服务器之间的数据通信链路。
这里所说的数据通信链路与通常情况下的通信链路不同,通常情况下移动终端的APP客户端通过运营商数据通信网络或其他无线网络与访问的服务器进行数据通信,但难以对通信的业务报文数据进行截获和监听,为了对APP客户端性能进行测试,需要通过对其业务请求和数据进行脚本分析,这就需要截获其业务报文数据。因此,在测试APP客户端的性能时,需要创建一条特殊的数据通信链路,采用该数据通信链路能够对待测试客户端与对应访问的服务器之间的业务报文数据进行截获和监听;也就是说该数据通信链路除了用于传输待测试客户端与对应服务器之间的通信数据,还是截获和监听业务报文数据的媒介。
步骤S102:通过数据通信链路获取待测试客户端与对应服务器之间的业务报文数据。
通过该特殊的数据通信链路,采用截获或监听的方式得到待测试客户端与对应服务器之间的业务报文数据。
步骤S103:解析业务报文数据,得到业务报文数据的原子化参数并保存至对应的原子化参数库中。
解析业务报文数据的过程,具体是将每条业务请求中的每项参数作为一个原子属性,每条请求则为一个包含多个原子属性的元组,并通过不同的标识对每条业务请求进行区分。其中,一条业务报文数据具有唯一标识,一条业务报文数据中包括多项原子化参数,一条业务报文数据的多项原子化参数形成一个原子化参数库,其中,原子化参数库的库名可由用户自定义,亦可采用业务报文数据的标识来表示,只要保证其唯一性即可。参数的原子化降低了个参数之间的耦合状态,降低了各参数间的干扰,保证了后续生成的测试脚本的准确性。
步骤S104:将原子化参数库中的原子化参数填入对应的脚本模板,生成待测试客户端的测试脚本。
其中,预先创建一个脚本模板库,该脚本模板库中存储有各个客户端不同性能测试所对应的测试脚本模板,即,将对应APP客户端的业务数据填入对应的脚本模板即可自动生成测试脚本,无需人工干预。
综上,通过监听客户端与服务器端之间传输的业务报文数据,并对其进行解析得到对应的原子化参数,根据测试需要选择对应的脚本模板,自动生成测试脚本,无需人工干预,适用于各类移动终端的APP性能测试脚本开发,降低了测试难度,此外,参数原子化降低了个参数之间的耦合状态,降低了各参数间的干扰,保证了测试脚本的准确性。
实施例二
基于以上实施例一下面将结合具体应用场景和实现方式,对本发明的生成客户端性能测试脚本方法做进一步的说明。
具体地,步骤S101具体为:通过配置热点,使待测试客户端通过无线网卡与对应的服务器进行数据通信,得到待测试客户端与对应服务器之间的数据通信链路。
通过配置PC(个人计算机,Personal Computer)热点,使待测试客户端所在的移动终端连接至PC热点,是APP客户端与服务器之间的数据通信通过电脑无线网卡,即待测试客户端与对应服务器之间的数据通信链路为无线网卡。由于容易实现对无线网卡中的通信数据进行监听和捕获,因此,该方式不仅可以传输待测试客户端与对应服务器之间的通信数据,还可以作为截获和监听业务报文数据的媒介。
进一步地,如图2所示,步骤S102具体包括:
步骤S201:监听无线网卡中的通信数据。
通过监听无线网卡中的通信数据,对其数据包进行捕获。
步骤S202:对通信数据进行筛选过滤,得到待测试客户端与对应服务器之间的业务报文数据。
由于无线网卡的数据包通常包含移动终端其他APP请求数据包,因为为了保证数据有效性,需要对捕获到的无线网卡中的通信数据进行筛选过滤,得到待测试客户端与对应服务器之间的业务报文数据。
参照如图3所示的网络结构示意图以及如图4所示的数据包捕获原理图,具体地捕获原理如下所述:
首先,通过回调函数Network Tap在得到监听命令,然后从网络设备驱动程序处收集数据包把监听到的数据包负责传送给过滤程序。
当数据包过滤(Packet filter)监听到有数据包到达时,NDIS(网络驱动接口规范,Network Driver Interface Specification)中间驱动程序首先调用分组驱动程序,该程序将数据传递给每一个参与进程的分组过滤程序,过滤程序对到达的数据包进行过滤。
通过分组过滤器后,将数据未过滤掉的数据包提交给核心缓冲区。然后等待系统缓冲区满后,再将数据包拷贝到用户缓冲区。监听程序可以直接从用户缓冲区中读取捕获的数据包。
具体地,如图5所示,步骤S202的具体实现包括以下步骤:
步骤S501:采用过滤算法中的过滤规则表达式,对通信数据进行筛选过滤。
根据过滤算法,使用过滤规则表达式等方式进行报文过滤,自动筛选出被测APP的业务数据包。其中,过滤规则表达式可采用以下表达式:
Comparison Logical Other
Protocol String 1 String 2 Value
operator Operations expression
其中,Protocol表示:协议,若未指明是什么协议,则默认所有支持的协议,默认“Protocol”关键字;
Comparison operator表示:比较运算符,具体表示如下表1所示:
英文写法 |
C语言写法 |
含义 |
eq |
== |
等于 |
ne |
!= |
不等于 |
gt |
> |
大于 |
lt |
< |
小于 |
ge |
>= |
大于等于 |
le |
<= |
小于等于 |
Logical Operations表示:逻辑运算符,具体表示如下表2所示:
Other expression表示:其他表达式。
例如:过滤http协议url中包含”10086”、Method为POST的请求的过滤规则表达式为:
http.request.url==(eq)”10086”&&(and)http.request.method==(eq)”POST”。
步骤S502:将未过滤掉的数据包确定为待测试客户端与对应服务器之间的业务报文数据,并存储至预设缓冲区。
通过以上配置PC热点,使待测试客户端通过无线网卡与对应的服务器进行数据通信,得到待测试客户端与对应服务器之间的数据通信链路的配置简单,易于实现;针对无线网卡的数据捕获可捕获所有网络协议下的业务数据,可保证其数据全面性,为性能测试的全面性提供数据基础;根据过滤算法,使用过滤规则表达式等方式进行报文过滤,可筛选出针对性数据包,避免其他数据包的干扰,保证其数据的准确性。
以上对步骤S101和步骤S102做出了详细介绍,进一步地,下面将结合附图和具体实现方式对步骤S103和步骤S104做进一步介绍。
具体地,如图6所示,步骤S103包括以下步骤:
步骤S601:采用字符串算法,对业务报文数据进行遍历截取,得到多个原子化参数。
报文解析方法采用字符串算法,先对报文进行遍历,对报文进行分析截取,形成独立的原子化参数。请求解析后成为以下格式:[元组名称]{参数1,参数2……}(Tag),以手机营业厅积分查询业务为例,请求报文如下:
“POST http://clientaccesss.10086.cn:9043/tcpbus/mobile HTTP/1.1
Host:clientaccesss.10086.cn:9043
Accept:*/*
Accept-Encoding:gzip
Cookie:JSESSIONID=0000q4HE7-WVKOFauNyrj-CASzD:-1
Code:801
Content-Type:text/xml;charset=utf-8
User-agent:GreenPoint.Inc
Connection:close
Content-Length:44
<ROOT>
<TEL_NO>13510006039</TEL_NO>
</ROOT>”
采用字符串算法解析后,得到如下数据:
[getBalance]{
Method:POST,
Url:http://clientaccesss.10086.cn:9043,
Host:clientaccesss.10086.cn:9043,
Accept:*/*,
Accept-Encoding:gzip,
Cookie:JSESSIONID=0000q4HE7-WVKOFauNyrj-CASzD:-1,
Code:801,
Content-Type:text/xml;charset=utf-8,
User-agent:GreenPoint.Inc,
Connection:close,
Content-Length:44,
Body:<ROOT><TEL_NO>13510006039</TEL_NO></ROOT>
}(1)
参数原子化降低了个参数之间的耦合状态,降低了各参数间的干扰,保证了测试脚本的准确性。
步骤S602:将同一业务的原子化参数存储至相同的原子化参数库中。
其中,一个业务具有单条或多条业务报文数据,一个业务对应一个原子化参数库。其中,一条业务报文数据具有唯一标识,一条业务报文数据中包括多项原子化参数,一条业务报文数据的多项原子化参数形成一个原子化参数库,其中,原子化参数库的库名可由用户自定义,亦可采用业务报文数据的标识来表示,只要保证其唯一性即可。参数的原子化降低了个参数之间的耦合状态,降低了各参数间的干扰,保证了后续生成的测试脚本的准确性。
进一步地,如图7所示,步骤S104具体包括:
步骤S701:根据待测试性能需求,选择对应的脚本模板,脚本模板中包括多个参数项。
其中,预先创建一个脚本模板库,该脚本模板库中存储有各个客户端不同性能测试所对应的测试脚本模板;即,分析目前主流性能测试工具的脚本语言,将脚本模板化,建立脚本模板库。值得指出的是,该脚本模板库中的脚本模板为动态的,可根据需要增加、删除或修改不同的脚本模板,以保证脚本模板的准确性和全面性。
步骤S702:检测原子化参数库中是否存在与脚本模板的参数项相对应的原子化参数。
步骤S703:若存在,则将对应的原子化参数填入脚本模板中;若不存在,则采用脚本模板的默认数据。
如果原子化参数库中存在与脚本模板的参数项相对应的原子化参数,则获取苦衷数据填入脚本模板中,如果原子化参数库中不存在与脚本模板的参数项相对应的原子化参数,则采用脚本模板的默认数据。
步骤S704:当脚本模板中的所有参数项均不为空时,生成待测试客户端的测试脚本。
即,将脚本模板中的各个参数项均填满,脚本模块匹配完成,即可自动生成待测试客户端的测试脚本。以LoadRunner某个请求函数模板为例,首先选择LoadRunner的脚本模板,选择积分查询业务,具体如下所示:
Web_custom_request(“业务名称”,
“URL=”,
“Method=”,
“Resource=0”,
“Referer=”,
“Snapshot=t2.inf”,
“Mode=HTTP”,
“EncType=”,
“RecContentType=”,
“UserAgent=”,
“Body=”,
LAST);
对应选择积分查询原子化参数库,库名则为事先定义,依次对函数中的URL、Method……等参数从库表中进行匹配,再获取数据,生成如下所示的脚本数据(业务名称参数为元组名称):
Web_custom_request(“getBalance”,
“URL=http://clientaccesss.10086.cn:9043/tcpbus/mobile”,
“Method=POST”,
“Resource=0”,
“Referer=”,
“Snapshot=t2.inf”,
“Mode=HTTP”,
“EncType=text/xml;charset=utf-8”,
“RecContentType=text/xml;charset=utf-8”,
“UserAgent=GreenPoint.Inc”,
“Body=<ROOT><TEL_NO>13510006039</TEL_NO></ROOT>”,
LAST);
若一个业务模块存在多个请求,则根据Tag标记依次生成,填入脚本中。
采用脚本模型化的方式,将主流测试工具脚本模型化,测试则不局限于特定工具,具有较高的通用性;依据模板自动生成脚本,无需人工干预,一定程度上降低了脚本开发难度,降低了技术人员测试门槛;脚本模板的可扩展性,根据需要增加、删除或修改不同的脚本模板,保证了脚本模板的准确性和全面性。
实施例三
以上实施例分别从不同应用场景对本发明的生成客户端性能测试脚本方法进行了详细介绍和说明,下面本实施例三将结合附图对其对应的装置做进一步地介绍。
如图8所示,该生成客户端性能测试脚本装置,具体包括:
创建模块81,用于创建待测试客户端与对应服务器之间的数据通信链路;
获取模块82,用于通过数据通信链路获取待测试客户端与对应服务器之间的业务报文数据;
解析模块83,用于解析业务报文数据,得到业务报文数据的原子化参数并保存至对应的原子化参数库中;
生成模块84,用于将原子化参数库中的原子化参数填入对应的脚本模板,生成待测试客户端的测试脚本。
其中,创建模块包括:
创建单元,用于通过配置热点,使待测试客户端通过无线网卡与对应的服务器进行数据通信,得到待测试客户端与对应服务器之间的数据通信链路。
其中,获取模块包括:
监听单元,用于监听无线网卡中的通信数据;
过滤单元,用于对通信数据进行筛选过滤,得到待测试客户端与对应服务器之间的业务报文数据。
其中,过滤单元包括:
筛选子单元,用于采用过滤算法中的过滤规则表达式,对通信数据进行筛选过滤;
处理子单元,用于将未过滤掉的数据包确定为待测试客户端与对应服务器之间的业务报文数据,并存储至预设缓冲区。
其中,解析模块包括:
遍历单元,用于采用字符串算法,对业务报文数据进行遍历截取,得到多个原子化参数;
存储单元,用于将同一业务的原子化参数存储至相同的原子化参数库中;其中,一个业务具有单条或多条业务报文数据,一个业务对应一个原子化参数库。
其中,生成模块包括:
选取单元,用于根据待测试性能需求,选择对应的脚本模板,脚本模板中包括多个参数项;
检测单元,用于检测原子化参数库中是否存在与脚本模板的参数项相对应的原子化参数;
处理单元,用于当原子化参数库中存在与脚本模板的参数项相对应的原子化参数时,则将对应的原子化参数填入脚本模板中;当不存在时,则采用脚本模板的默认数据;
生成单元,用于当脚本模板中的所有参数项均不为空时,生成待测试客户端的测试脚本。
需要说明的是,该装置是与上述生成客户端性能测试脚本方法对应的装置,上述方法实施例中所有实现方式均适用于该装置的实施例中,也能达到相同的技术效果。
以上所述的是本发明的优选实施方式,应当指出对于本技术领域的普通人员来说,在不脱离本发明所述的原理前提下还可以作出若干改进和润饰,这些改进和润饰也在本发明的保护范围内。