一种测试方法、装置、设备和存储介质与流程

文档序号:16918191发布日期:2019-02-19 19:08阅读:173来源:国知局
一种测试方法、装置、设备和存储介质与流程

本发明实施例涉及测试技术领域,尤其涉及一种测试方法、装置、设备和存储介质。



背景技术:

为了测试软件质量及其可靠性,在软件开发过程中会通过性能测试平台对软件进行压力测试。

现有技术中通常通过脚本模拟用户行为,并通过性能测试平台的压力引擎产生大规模的并发线程调用,进而达到模拟千万用户行为的目的。但是用户同样的行为相应的数据可能是变化的,例如登录时的用户名和密码不同,因此性能测试平台需要在施压时对脚本的参数进行不同的设置。

但是,由于现有技术中对性能测试平台中的脚本的参数化一般都是通过人工来完成的,增加了测试周期和测试难度,同时提高了测试人员的测试门槛。



技术实现要素:

本发明实施例提供了一种测试方法、装置、设备和存储介质,以实现对脚本的参数化,减小测试周期和测试难度,同时降低了测试人员的测试门槛。

第一方面,本发明实施例提供了一种测试方法,该方法包括:

获取用户输入的压测链接和待参数化变量;

将所述压测链接和所述待参数化变量进行拼接得到初始关键字符串,将所述初始关键字符串输入至预先构建的初始测试脚本中得到初始脚本代码;

对所述初始脚本代码中的参数化占位符进行识别,并将识别出的参数化占位符进行滤除,得到目标脚本代码。

第二方面,本发明实施例还提供了一种测试装置,该装置包括:

用户输入数据获取模块,用于获取用户输入的压测链接和待参数化变量;

初始脚本代码生成模块,用于将所述压测链接和所述待参数化变量进行拼接得到初始关键字符串,将所述初始关键字符串输入至预先构建的初始测试脚本中得到初始脚本代码;

目标脚本代码生成模块,用于对所述初始脚本代码中的参数化占位符进行识别,并将识别出的参数化占位符进行滤除,得到目标脚本代码。

第三方面,本发明实施例还提供了一种电子设备,该电子设备包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序;

所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面实施例所提供的一种测试方法。

第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面实施例所提供的一种测试方法。

本发明实施例通过获取用户输入的压测链接和待参数化变量;将压测链接和待参数化变量进行拼接得到初始关键字符串,并将初始关键字符串输入至预先构建的初始测试脚本中得到初始脚本代码;对初始脚本代码中的参数化占位符进行识别,并将识别出的参数化占位符进行滤除,得到目标脚本代码。采用上述技术方案,实现了对脚本的参数化,无需测试人员手动修改脚本代码即可进行测试,降低了测试人员的测试门槛,减小了测试难度;同时通过在脚本代码生成过程中进行参数化占位符的滤除,减少了测试时代码运行时间,缩短了测试周期。

附图说明

图1是本发明实施例一提供的一种测试方法的流程示意图;

图2是本发明实施例二提供的一种测试方法的流程示意图;

图3是本发明实施例三提供的一种测试方法的流程示意图;

图4是本发明实施例四提供的一种测试装置的结构示意图;

图5是本发明实施例五提供的一种电子设备的硬件结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

实施例一

图1是本发明实施例一中的一种测试方法的流程示意图。本实施例可适用于通过性能测试平台对服务器或其他电子设备进行压力测试的情况,该方法由测试装置执行,该装置由软件和/或硬件实现,并具体配置于电子设备中。

其中,性能测试平台是通过脚本代码模拟用户行为,通过性能测试平台的压力引擎产生大规模的并发线程调用,进而达到模拟千万用户行为的效果。其中,性能测试平台可以是基于开源ngrinder压测平台的二次开发平台。

如图1所示的测试方法,包括:

s110、获取用户输入的压测链接和待参数化变量。

其中,压测链接可以理解为需要进行压力测试的网址链接。其中,待参数化变量可以是函数变量、用户自定义的全局变量以及上下文关联变量中的至少一种。其中,待参数化变量包括待参数化变量的变量标识和/或变量值。其中,待参数化变量的变量标识可以理解为需要进行参数化的变量名称。

在性能测试平台的用户界面上会包含压测链接输入区域以及待参数化变量输入区域。示例性地,当用户具备测试需求时,将会在对应的输入区域输入压测链接和待参数化变量的变量标识和/或变量值,在用户提交所输入的压测链接和待参数化变量时,即可产生相应的测试请求。当检测到用户发送的测试请求时,电子设备将会获取相应的压测链接和待参数化变量。

其中,输入方式可以是手动输入,还可以是选择输入等。

s120、将所述压测链接和所述待参数化变量进行拼接得到初始关键字符串,将所述初始关键字符串输入至预先构建的初始测试脚本中得到初始脚本代码。

将获取的压测链接和待参数化变量按照设定规则进行拼接,得到初始关键字符串。由于孤立的初始关键字符串无法实现测试功能,因此,需要将初始关键字符串输入至预先构建的初始测试脚本中,得到初始脚本代码。

示例性地,获取的压测链接和待参数化变量按照设定规则进行拼接,得到初始关键字符串,包括:直接将压测链接与待参数化变量顺次拼接,得到初始关键字符串;其中,待参数化变量的变量标识与变量值可顺次连接;或者,

将待参数化变量标识按照用户的输入顺序拼接得到变量拼接字符串,将压测链接和变量拼接字符串顺次拼接,得到初始关键字符串。

s130、对所述初始脚本代码中的参数化占位符进行识别,并将识别出的参数化占位符进行滤除,得到目标脚本代码。

为了将待参数化变量与压测链接进行有效区分,所获取的待参数化变量中均会添加有参数化占位符。但是,在执行脚本代码时,会对初始脚本代码中的参数化占位符进行剔除。传统做法是运行时刻将根据占位符内容过滤占位符,并执行占位符中的函数得到结果,这一做法虽然简单,但是压测过程中每次都需要过滤占位符,需要反复执行同一操作,效率较低。本发明实施例的方法在式编译代码时候就识别参数化占位符,并过滤生成脚本代码,在运行时候无需参数化过滤,大大提供了参数化运行效率。其中,参数化占位符由开发人员自行设定,例如可以是“${}”,其中,在“{}”中添加待参数化变量。

具体的,将初始脚本代码中的各字符与参数化占位符中的各字符进行比对识别,将比对结果一致的各字符串识别为目标字符,并滤除初始脚本代码中的各目标字符得到目标脚本代码。

本发明实施例通过获取用户输入的压测链接和待参数化变量;将压测链接和待参数化变量进行拼接得到初始关键字符串,并将初始关键字符串输入至预先构建的初始测试脚本中得到初始脚本代码;对初始脚本代码中的参数化占位符进行识别,并将识别出的参数化占位符进行滤除,得到目标脚本代码。采用上述技术方案,实现了对脚本的参数化,无需测试人员手动修改脚本代码即可进行测试,降低了测试人员的测试门槛,减小了测试难度;同时通过在脚本代码生成过程中进行参数化占位符的滤除,减少了测试时代码运行时间,缩短了测试周期。

在上述各实施例的技术方案的基础上,进一步地,在得到目标脚本代码之后,还包括:执行所述目标脚本代码生成用户行为模拟数据,并基于所述用户行为模拟数据对目标对象进行压力测试。

本技术方案能够通过执行目标脚本代码来模拟用户行为,能够通过压力引擎产生大规模的并发线程调用,进而达到模拟千万用户行为的目的,而且通过对脚本进行参数化设置,即使是模拟用户同样的行为数据,也可以得到动态变化的结果,更加贴合用户实际使用数据。为压力测试的准确性提供保证。

实施例二

图2是本发明实施例二中的一种测试方法的流程示意图。本发明实施例在上述各实施例的技术方案的基础上,进行了优化。

进一步地,待参数化变量包括自定义变量和/或上下文关联变量,相应的,在操作“获取用户输入的压测链接和待参数化变量”之后,追加“将所述待参数化变量的变量标识以及与所述变量标识相对应的变量值存储至当前线程所对应的线程容器中”,以实现待参数化变量的隔离存储,降低参数化的耦合。

进一步地,在操作“将所述待参数化变量的变量标识以及与所述变量标识相对应的变量值存储至当前线程所对应的线程容器中”之后,追加“根据所述变量标识从所述线程容器中查询并获取与所述待参数化变量的变量标识相对应的变量值”,以实现待参数化变量的获取,降低参数化的耦合。

如图2所示的测试方法,包括:

s210、获取用户输入的压测链接和待参数化变量。

其中,待参数化变量包括自定义变量和/或上下文关联变量。

其中,自定义变量可以理解为用户自定义的全局变量;上下文关联变量可以理解为与用户的行为数据相关联的变量数据,例如可以是用户其他请求的返回值。

s220、将所述待参数化变量的变量标识以及与所述变量标识相对应的变量值存储至当前线程所对应的线程容器中。

具体的,当待参数化变量为自定义变量时,直接将自定义变量的变量标识以及自定义变量对应的变量值一并存储至当前线程所对应的线程容器中;当待参数化变量为上下文关联变量时,将上下文关联变量以及所关联变量的变量标识存储至线程容器中,并在所关联变量产生变量值后,将所关联变量的变量值与所关联变量的变量标识对应存储,同时基于所关联变量的变量值确定该上下文关联变量的变量值,并将上下文关联变量的变量值与上下文关联变量的变量标识对应存储。

示例性地,当待参数化变量为上下文关联变量“comvalue.name”时,将上下文关联变量存储至当前线程对应的线程容器中,也即“putvariable(${comvalue.name},value)”,其中,putvariable(a,a)可以理解为将变量a以及变量a对应的变量值a存储至当前线程对应的线程容器中。其中,value为上下文关联变量“comvalue.name”对应的变量值。其中“${}”为参数化占位符。

示例性地,当待参数化变量为循环区域全局变量“constant”时,由于循环区域全局变量为自定义变量,因此会将循环区域全局变量存储至当前线程对应的线程容器中,也即“putvariable(${constant},value)”,其中,putvariable(a,a)可以理解为将变量a以及变量a对应的变量值a存储至当前线程对应的线程容器中。其中,value为循环区域全局变量“constant”对应的变量值。其中“${}”为参数化占位符。

s230、根据所述变量标识从所述线程容器中查询并获取与所述待参数化变量的变量标识相对应的变量值。

示例性地,当用户输入的压测链接为“http://www.baidu.com”,待参数化变量的变量标识为id,变量值为“getvariable('comvalue.name')”时,得到的初始关键字符串为:“self.request.url='http://www.baidu.com?id=${getvariable('comvalue.name')}”。其中,getvariable()函数为从变量容器中获取待参数化变量的变量标识对应的变量值。

示例性地,当用户输入的压测链接为“http://www.baidu.com”,待参数化变量的变量标识为id以及id对应的全局变量“constant”的具体变量值时,相应的通过“getvariable('constant')”获取变量值,最终得到的初始关键字符串为:“self.request.url='http://www.baidu.com?id=${getvariable('constant')}”。

s240、将所述压测链接和所述待参数化变量进行拼接得到初始关键字符串,将所述初始关键字符串输入至预先构建的初始测试脚本中得到初始脚本代码。

s250、对所述初始脚本代码中的参数化占位符进行识别,并将识别出的参数化占位符进行滤除,得到目标脚本代码。

当识别并滤除参数化占位符“${}”之后,与初始关键字符串对应的目标脚本代码为:“putvariable(comvalue.name,value)”以及“self.request.url='http://www.baidu.com?id='+getvariable('comvalue.name')”。

相应的,在运行目标脚本代码时,会将待参数化变量存储至当前运行线程的线程容器中,然后从线程容器中获取与待参数化变量的变量标识对应的变量值,用以通过获取的数据进行测试。

本发明实施例通过将线程容器作为待参数化变量的变量存储和获取的数据源,并结合线程容器的线程隔离特性,实现了各个线程中的待参数化变量的隔离存储,降低了参数化过程中的耦合,同时兼顾了同一线程中变量上下文关联的情况,并简化了待参数化变量获取过程。

实施例三

图3是本发明实施例三中的一种测试方法的流程示意图。本实施例在上述各实施例的技术方案的基础上,进行了追加优化。

进一步地,待参数化变量包括函数变量,相应的,追加“基于所述待参数化变量的变量标识确定出至少一个目标函数,并将所述至少一个目标函数抽象为通用函数组件”;相应的,将操作“将所述压测链接和所述待参数化变量进行拼接得到初始关键字符串”替换为“将所述压测链接和所述至少一个目标函数进行拼接得到初始关键字符串”,以丰富待参数化变量的种类,扩大参数化的使用场景。

s310、获取用户输入的压测链接和待参数化变量。

其中,待参数化变量包括函数变量。

s320、基于所述待参数化变量的变量标识确定出至少一个目标函数,并将所述至少一个目标函数抽象为通用函数组件。

其中,所述通用函数组件包括函数名称、函数描述、函数代码和参数列表中的至少一个。其中,参数列表中包括参数名称、参数描述、参数类型、填写类型以及样例值中的至少一个。

本发明实施例将参数化抽象为函数组件,每种对应的参数化需要变化为一种函数,因此可能会有一个或者多个与所述待参数化变量的变量标识对应的目标函数。这种抽象参数化方式,将所有函数参数化抽象为函数名、描述、参数、参数类型、参数描述、样例值等部分,技术实现上将一个函数的相关属性形成的schema后,给前端的交互是一个函数列表,而不再是函数由前端进行定义,后续参数化增加,仅仅是配置下即可,相关实现代码无需改动,十分有利于后期代码维护,提高代码复用率。

s330、将所述压测链接和所述至少一个目标函数进行拼接得到初始关键字符串,将所述初始关键字符串输入至预先构建的初始测试脚本中得到初始脚本代码。

s340、对所述初始脚本代码中的参数化占位符进行识别,并将识别出的参数化占位符进行滤除,得到目标脚本代码。

示例性地,当压测链接为“http://www.baidu.com”,目标函数为“count(1,100)”时,相应的初始关键字符串为“http://www.baidu.com?id=${__count(1,100)}”,对包含初始关键字符串的初始脚本代码中的参数化占位符“${}”进行识别并过滤后,得到的目标脚本代码如下:“self.request.url='http://www.baidu.com?id='+str(count(1,100))”。

本发明实施例通过待参数化变量的变量标识中确定至少一个目标函数,并将至少一个目标函数抽象为通用函数组件,进而实现函数变量的参数化,丰富待参数化变量的种类,扩大参数化的使用场景。同时,在进一步增加参数化时可直接进行配置,无需测试人员进行代码改动,降低了测试人员的测试门槛。

在上述各实施例的技术方案的基础上,目标函数中包括至少一个子函数,例如嵌套函数,以对函数组件中所包含的子函数组件进一步进行参数化,进而增加参数化层级,扩大参数化对象的类型和使用场景。

实施例四

图4是本发明实施例四中的一种测试装置的结构示意图。本实施例可适用于通过性能测试平台对服务器或其他电子设备进行压力测试的情况,该装置由软件和/或硬件实现,并具体配置于电子设备中。如图4所示的测试装置,包括:用户输入数据获取模块410,初始脚本代码生成模块420以及目标脚本代码生成模块430。其中,

用户输入数据获取模块410,用于获取用户输入的压测链接和待参数化变量;

初始脚本代码生成模块420,用于将所述压测链接和所述待参数化变量进行拼接得到初始关键字符串,将所述初始关键字符串输入至预先构建的初始测试脚本中得到初始脚本代码;

目标脚本代码生成模块430,用于对所述初始脚本代码中的参数化占位符进行识别,并将识别出的参数化占位符进行滤除,得到目标脚本代码。

本发明实施例通过用户输入数据获取模块获取用户输入的压测链接和待参数化变量;通过初始脚本代码生成模块将压测链接和待参数化变量进行拼接得到初始关键字符串,并将初始关键字符串输入至预先构建的初始测试脚本中得到初始脚本代码;通过目标脚本代码生成模块对初始脚本代码中的参数化占位符进行识别,并将识别出的参数化占位符进行滤除,得到目标脚本代码。采用上述技术方案,实现了对脚本的参数化,无需测试人员手动修改脚本代码即可进行测试,降低了测试人员的测试门槛,减小了测试难度;同时通过在脚本代码生成过程中进行参数化占位符的滤除,减少了测试时代码运行时间,缩短了测试周期。

所述待参数化变量包括自定义变量和/或上下文关联变量;所述装置还包括:

待参数化变量存储模块,用于将所述待参数化变量的变量标识以及与所述变量标识相对应的变量值存储至当前线程所对应的线程容器中。

进一步地,该装置,还包括:

待参数化变量获取模块,用于根据所述变量标识从所述线程容器中查询并获取与所述待参数化变量的变量标识相对应的变量值。

进一步地,该装置,还包括压力测试模块,用于在所述得到目标脚本代码之后,执行所述目标脚本代码生成用户行为模拟数据,并基于所述用户行为模拟数据对目标对象进行压力测试。

进一步地,所述待参数化变量包括函数变量;相应的该装置还包括:

目标函数确定模块,用于基于所述待参数化变量的变量标识确定出至少一个目标函数,并将所述至少一个目标函数抽象为通用函数组件,其中,所述通用函数组件包括函数名称、函数描述、函数代码和参数列表中的至少一个;

相应地,所述初始脚本代码生成模块,在执行所述将所述压测链接和所述待参数化变量进行拼接得到初始关键字符串时,具体用于:

将所述压测链接和所述至少一个目标函数进行拼接得到初始关键字符串。

进一步地,所述目标函数中包括至少一个子函数。

上述测试装置可执行本发明任意实施例所提供的测试方法,具备执行测试方法相应的功能模块和有益效果。

实施例五

图5是本发明实施例五提供的一种电子设备的硬件结构示意图,该电子设备包括输入装置510、处理器520以及存储装置530。

其中,输入装置510,用于获取用户输入的压测链接和待参数化变量;

一个或多个处理器520;

存储装置530,用于存储一个或多个程序。

图5中以一个处理器520为例,该电子设备中的输入装置510可以通过总线或其他方式与处理器520以及存储装置530相连,且处理器520和存储装置530也通过总线或其他方式连接,图5中以通过总线连接为例。

在本实施例中,电子设备中的处理器520可以将从输入装置510中获取的所述压测链接和所述待参数化变量进行拼接得到初始关键字符串;还可以将所述初始关键字符串输入至预先构建的初始测试脚本中得到初始脚本代码;还可以对所述初始脚本代码中的参数化占位符进行识别,并将识别出的参数化占位符进行滤除,得到目标脚本代码。

该电子设备中的存储装置530作为一种计算机可读存储介质,可用于存储一个或多个程序,所述程序可以是软件程序、计算机可执行程序以及模块,如本发明实施例中测试方法对应的程序指令/模块(例如,附图4所示的用户输入数据获取模块410,初始脚本代码生成模块420以及目标脚本代码生成模块430)。处理器520通过运行存储在存储装置530中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现上述方法实施例中的测试方法。

存储装置530可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储数据等(如上述实施例中的压测链接、待参数化变量、初始关键字符串、初始测试脚本、初始脚本代码以及目标脚本代码等)。此外,存储装置530可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置530可进一步包括相对于处理器520远程设置的存储器,这些远程存储器可以通过网络连接至服务器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

此外,本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被测试装置执行时实现本发明实施提供的测试方法,该方法包括:获取用户输入的压测链接和待参数化变量;将所述压测链接和所述待参数化变量进行拼接得到初始关键字符串,将所述初始关键字符串输入至预先构建的初始测试脚本中得到初始脚本代码;对所述初始脚本代码中的参数化占位符进行识别,并将识别出的参数化占位符进行滤除,得到目标脚本代码。

通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的测试方法。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1