一种压力测试调度方法、装置、调度服务器及计算设备
技术领域
本发明涉及软件测试领域,特别涉及一种压力测试调度方法、装置、调度服务器及计算设备。
背景技术
随着互联网技术的不断发展,越来越多的网络软件开始投入到使用中。而在软件的开发过程中,测试工作在其整个开发的生命周期中占有举足轻重的地位。软件测试是指通过测试软件的各项功能以发现其中存在的缺陷的过程,软件自动化测试作为软件测试技术的一个分支,是在传统的代码调试和黑盒手工测试的基础上新兴的一种测试技术。而压力测试作为软件自动化测试的一种,是指模拟实际应用的软硬件环境及用户使用过程的***负荷,长时间或超大负荷地运行被测软件,来测试被测软件的性能、可靠性、稳定性。
换言之,压力测试是根据用户需要来发起的、模拟真实用户数在规定的运行时间上操作被测***或软件的行为。在压力测试时,通常会设置一个用户动态曲线图,根据曲线图的走势进行压测,但由于各种因素的限制,一般是基于预设数据执行完压测周期后才可以进行曲线调整,无法随时获取数据随时修改以满足用户需求,且多脚本、多区域的测试需求都会增加用户曲线保持的难度。因此,需要一种新的压力测试调度方案来改进上述处理过程。
发明内容
为此,本发明提供一种压力测试调度的技术方案,以力图解决或者至少缓解上面存在的问题。
根据本发明的一个方面,提供一种压力测试调度方法,适于在调度服务器中执行,调度服务器中存储有多个测试脚本,调度服务器分别与多个客户端和负载机通信连接,客户端适于接受压力测试的测试参数的选定,该方法包括如下步骤:首先,接收多个客户端中任一个客户端所发出的测试参数,测试参数包括脚本参数、用户曲线参数和执行区域参数;分别对脚本参数、用户曲线参数和执行区域参数进行转换,以生成相应的脚本字段、用户曲线字段和执行区域字段;根据执行区域字段,获取可执行压力测试的区域中可用的负载机;根据脚本字段和执行区域字段,对各可用的负载机中的空闲进程进行测试脚本分配,以调度对应的负载机按照用户曲线字段执行相应的压力测试;将压力测试的执行结果实时反馈给发出测试参数的客户端以进行呈现。
可选地,在根据本发明的压力测试调度方法中,执行区域字段包括区域代码、区域名称、运营商编码、运营商名称、分配用户数量、分配用户占比和区域状态中的一个或多个。
可选地,在根据本发明的压力测试调度方法中,根据执行区域字段,获取可执行压力测试的区域中可用的负载机的步骤包括:根据区域状态判断执行区域字段对应的区域是否可执行压力测试;若该区域可执行压力测试,则根据区域代码和运营商编码获取该区域中可用的负载机。
可选地,在根据本发明的压力测试调度方法中,脚本字段包括脚本名称及其对应的测试脚本比例,根据脚本字段和执行区域字段,对各可用的负载机中的空闲进程进行测试脚本分配的步骤包括:对各可执行压力测试的区域,根据脚本名称及其对应的测试脚本比例、该区域的分配用户数量,获取该区域应分配的测试脚本;获取各可用的负载机中空闲进程的数量,并根据该数量计算出可用线程的数量;对每一个可执行压力测试的区域,根据该区域应分配的测试脚本和可用的负载机中可用线程的数量,向该可用的负载机中的空闲进程分配测试脚本。
可选地,在根据本发明的压力测试调度方法中,用户曲线字段包括爬升期、平台期和下降期的用户数量以及执行时间,调度对应的负载机按照用户曲线字段执行相应的压力测试的步骤包括:根据爬升期的用户数量以及执行时间,调度对应的负载机在该执行时间里,将可用线程的数量以从0到该用户数量的增长趋势来执行对应的测试脚本;根据平台期的用户数量以及执行时间,调度对应的负载机在该执行时间里,将可用线程的数量维持在该用户数量执行对应的测试脚本;根据下降期的用户数量以及执行时间,调度对应的负载机在该执行时间里,将可用线程的数量以从该用户数量到0的减少趋势执行对应的测试脚本。
可选地,在根据本发明的压力测试调度方法中,在分别对脚本参数、用户曲线参数和执行区域参数进行转换的步骤之前,还包括:获取发出测试参数的客户端所关联的测试版本信息;若该测试版本信息为企业版,则验证该客户端对应的版本序列号,若验证失败则向该客户端发送错误消息。
根据本发明的又一个方面,提供一种压力测试调度装置,适于驻留在调度服务器中,调度服务器中存储有多个测试脚本,调度服务器分别与多个客户端和负载机通信连接,客户端适于接受压力测试的测试参数的选定,该装置包括接收模块、转换模块、获取模块、分配模块和反馈模块。其中,接收模块适于接收多个客户端中任一个客户端所发出的测试参数,测试参数包括脚本参数、用户曲线参数和执行区域参数;转换模块适于分别对脚本参数、用户曲线参数和执行区域参数进行转换,以生成相应的脚本字段、用户曲线字段和执行区域字段;获取模块适于根据执行区域字段,获取可执行压力测试的区域中可用的负载机;分配模块适于根据脚本字段和执行区域字段,对各可用的负载机中的空闲进程进行测试脚本分配,以调度对应的负载机按照用户曲线字段执行相应的压力测试;反馈模块适于将压力测试的执行结果实时反馈给发出测试参数的客户端以进行呈现。
根据本发明的又一个方面,提供一种计算设备,包括根据本发明的压力测试调度装置。
根据本发明的又一个方面,提供一种计算设备,包括一个或多个处理器、存储器以及一个或多个程序,其中一个或多个程序存储在存储器中并被配置为由一个或多个处理器执行,一个或多个程序包括用于执行根据本发明的压力测试调度方法的指令。
根据本发明的又一个方面,还提供一种存储一个或多个程序的计算机可读存储介质,一个或多个程序包括指令,指令当由计算设备执行时,使得计算设备执行根据本发明的压力测试调度方法。
根据本发明的压力测试调度的技术方案,首先对接收到的测试参数进行转换处理,生成相应的脚本字段、用户曲线字段和执行区域字段,根据执行区域字段获取可执行压力测试的区域中可用的负载机,再根据脚本字段和执行区域字段,对各可用的负载机中的空闲进程进行测试脚本分配,以调度对应的负载机按照用户曲线字段执行相应的压力测试,最后将压力测试的执行结果实时反馈给发出测试参数的客户端以进行呈现。在上述方案中,获取可执行压力测试的区域中可用的负载机时,先根据执行区域字段里的区域状态判断其对应的区域是否可执行压力测试,若可以则再根据区域代码和运营商编码来获取该区域中可用的负载机。在分配测试脚本时,对每一个可执行压力测试的区域,根据该区域应分配的测试脚本和可用的负载机中可用线程的数量,向该可用的负载机中的空闲进程分配测试脚本。进一步的,根据用户曲线字段所包括的爬升期、平台期和下降期的用户数量以及执行时间,基于可用线程的数量,在各个阶段调度相应的负载机执行对应的测试脚本来发起并完成压力测试。整个曲线趋势的保持,既真实模拟了用户实际访问被测服务的场景,又便于用户实时调整曲线的走势,即使是在多脚本和多区域的情况下也能修改曲线数据,满足了用户对压力测试的多样化需求,使得测试场景更加灵活。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明的一个实施例的压力测试调度***100的示意图;
图2示出了根据本发明的一个实施例的计算设备200的结构框图;
图3示出了根据本发明的一个实施例的压力测试调度方法300的流程图;
图4示出了根据本发明的一个实施例的压力测试调度装置400的示意图;以及
图5示出了根据本发明的又一个实施例的压力测试调度装置500的示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的压力测试调度***100的示意图。应当指出,图1中的压力测试调度***100仅是示例性的,在具体的实践情况中,压力测试调度***100中可以有不同数量的调度服务器、客户端和负载机,本发明对压力测试调度***100中所包括的调度服务器、客户端和负载机的数量不做限制。如图1所示,压力测试调度***100包括调度服务器600、客户端700和负载机800。其中,调度服务器600中存储有多个测试脚本,并分别与客户端700和负载机800通信连接。客户端700可以是如智能手机、平板电脑一类的移动终端,也可以如PC机一类的计算设备,但均不限于此。在客户端700中,一般安装有向调度服务器600发起压力测试的测试工具,例如一个用于压力测试的应用,用户在客户端700所提供的上述测试工具中选定测试参数,测试参数包括脚本参数、用户曲线参数和执行区域参数,进而发起压力测试,换言之,客户端700适于接受压力测试的测试参数的选定。而负载机800则是响应调度服务器600的调度,来执行相应的压力测试,以便调度服务器600获取压力测试的执行结果来向用户反馈。
具体来说,客户端700在接受用户对压力测试的测试参数的选定后,会将该测试参数发送至调度服务器600,而调度服务器600接收客户端700所发出的测试参数,分别对测试参数所包括的脚本参数、用户曲线参数和执行区域参数进行转换,以生成相应的脚本字段、用户曲线字段和执行区域字段,根据执行区域字段,获取可执行压力测试的区域中可用的负载机,比如图1所示的负载机800,根据脚本字段和执行区域字段,对负载机800中的空闲进程进行测试脚本分配,以调度负载机800按照用户曲线字段执行相应的压力测试,将压力测试的执行结果实时反馈给发出测试参数的客户端以进行呈现。
图2是根据本发明的一个实施例的计算设备200的结构框图。在基本的配置202中,计算设备200典型地包括***存储器206和一个或者多个处理器204。存储器总线208可以用于在处理器204和***存储器206之间的通信。
取决于期望的配置,处理器204可以是任何类型的处理,包括但不限于:微处理器(μP)、微控制器(μC)、数字信息处理器(DSP)或者它们的任何组合。处理器204可以包括诸如一级高速缓存210和二级高速缓存212之类的一个或者多个级别的高速缓存、处理器核心214和寄存器216。示例的处理器核心214可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器218可以与处理器204一起使用,或者在一些实现中,存储器控制器218可以是处理器204的一个内部部分。
取决于期望的配置,***存储器206可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。***存储器206可以包括操作***220、一个或者多个程序222以及程序数据224。在一些实施方式中,程序222可以布置为在操作***上由一个或多个处理器204利用程序数据224执行指令。
计算设备200还可以包括有助于从各种接口设备(例如,输出设备242、外设接口244和通信设备246)到基本配置202经由总线/接口控制器230的通信的接口总线240。示例的输出设备242包括图形处理单元248和音频处理单元250。它们可以被配置为有助于经由一个或者多个A/V端口252与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口244可以包括串行接口控制器254和并行接口控制器256,它们可以被配置为有助于经由一个或者多个I/O端口258和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备246可以包括网络控制器260,其可以被布置为便于经由一个或者多个通信端口264与一个或者多个其他计算设备262通过网络通信链路的通信。
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
计算设备200可以实现为服务器,例如文件服务器、数据库服务器、应用程序服务器和WEB服务器等,也可以实现为小尺寸便携(或者移动)电子设备的一部分,这些电子设备可以是诸如蜂窝电话、个人数字助理(PDA)、个人媒体播放器设备、无线网络浏览设备、个人头戴设备、应用专用设备、或者可以包括上面任何功能的混合设备。计算设备200还可以实现为包括桌面计算机和笔记本计算机配置的个人计算机。在一些实施例中,计算设备200实现为调度服务器,例如图1所示的调度服务器600,并被配置为执行根据本发明的压力测试调度方法300。程序222包括根据本发明的压力测试调度装置400。
图3示出了根据本发明一个实施例的压力测试调度方法300的流程图。压力测试调度方法300适于在调度服务器600中执行。如图3所示,方法300始于步骤S310。在步骤S310中,接收多个客户端中任一个客户端所发出的测试参数,测试参数包括脚本参数、用户曲线参数和执行区域参数。由于调度服务器600一般是与多个客户端通信连接,此处是以接收到多个客户端中任一个客户端所发出的测试参数为例,进行后续处理的说明。根据本发明的一个实施例,调度服务器600接收客户端700所发出的测试参数。
随后,进入步骤S320,分别对脚本参数、用户曲线参数和执行区域参数进行转换,以生成相应的脚本字段、用户曲线字段和执行区域字段。需要说明的是,上述转换处理只是针对脚本参数、用户曲线参数和执行区域参数的表现类型,但并未改变各参数所包含的具体信息。
此外,考虑到每个客户端上所安装的测试工具可能具有不同的版本,而版本不同对于客户端验证的要求也并不相同,则根据本发明的又一个实施例,在步骤S320之前,先获取发出测试参数的客户端所关联的测试版本信息,若该测试版本信息为企业版,则验证该客户端对应的版本序列号,若验证失败则向该客户端发送错误消息,而若该测试版本信息为SaaS(Software-as-a-Service,软件即服务)版,则无需执行验证处理。在该实施方式中,客户端700所关联的测试版本信息为企业版,则验证客户端700的版本序列号,在验证成功后,则可执行步骤S320以完成测试参数的转换处理。
接下来,在步骤S330中,根据执行区域字段,获取可执行压力测试的区域中可用的负载机。根据本发明的一个实施例,执行区域字段包括区域代码、区域名称、运营商编码、运营商名称、分配用户数量、分配用户占比和区域状态中的一个或多个。下面将给出了一个执行区域字段的示例,具体如下所示:
regionArr:[4]
0:Object
key:"GD"
name:"广东"
cKey:"BAIDUYUN"
cName:"百度云"
userNum:"1000"
bfbNum:"25"
status:"0"
1:Object
key:"BJ"
name:"北京"
cKey:"BAIDUYUN"
cName:"百度云"
userNum:"1000"
bfbNum:"25"
status:"0"
2:Object
key:"BJ"
name:"成都"
cKey:"UCloud"
cName:"优刻得"
userNum:"1000"
bfbNum:"25"
status:"0"
3:Object
key:"SH"
name:"上海"
cKey:"UCloud"
cName:"优刻得"
userNum:"1000"
bfbNum:"25"
status:"0"
从上述执行区域字段所包括的信息中可知,regionArr表示执行区域字段,regionArr:[4]表示该执行区域字段中包括4个区域的相关信息,分别以0:Object、1:Object、2:Object和3:Object进行表示。其中,key表示区域代码,name表示区域名称,cKey表示运营商编码,cName表示运营商名称,userNum表示分配用户数量,bfbNum表示分配用户占比,status表示区域状态。从该执行区域字段可知,第1个区域为广东地区,关联的运营商为百度云,第2个区域为北京地区,关联的运营商为百度云,第3个区域为成都地区,关联的运营商为优刻得,第4个区域为上海地区,关联的运营商为优刻得,各个区域所分配到的用户数量均为1000,占总用户数量的25%,可知总用户数量为4000,区域状态均为0。
在获取可执行压力测试的区域中可用的负载机时,先根据区域状态判断执行区域字段对应的区域是否可执行压力测试,若该区域可执行压力测试,则根据区域代码和运营商编码获取该区域中可用的负载机。在该实施方式中,若区域状态为0,则表示当前区域可用,若区域状态为1,则表示当前区域不可用。此处以0:Object表示的区域为例,由于该区域对应于执行区域字段中的区域状态正是为0,由此判定该执行区域字段对应的区域可执行压力测试。根据区域代码和运营商编码可确定,所需要获取负载机是位于广东地区且由百度云运营的负载机,进而从中选出可用的负载机,最终得到4台可用的负载机,分别是负载机S1、S2、S3和S4。这里需要说明一下,负载机的可用一般是指该负载机处于空闲状态下,可以用于发起压力测试请求,执行测试脚本和响应数据等。
在步骤S340中,根据脚本字段和执行区域字段,对各可用的负载机中的空闲进程进行测试脚本分配,以调度对应的负载机按照用户曲线字段执行相应的压力测试。根据本发明的一个实施例,脚本字段包括脚本名称及其对应的测试脚本比例。下面将给出了一个脚本字段的示例,具体如下所示:
code:1
sName:"GKtest"
percent:"70%"
code:2
sName:"scedu"
percent:"30%"
从上述脚本字段所包括的信息中可知,code表示测试脚本的编号,sName表示脚本名称,percent表示对应的测试脚本比例。从该脚本字段可知,用户欲发起的压力测试包括2种测试脚本,第1种测试脚本的脚本名称为GKtest,该测试脚本所占总测试脚本的比例为70%,而第2种测试脚本的脚本名称为scedu,该测试脚本所占总测试脚本的比例为30%。
对各可用的负载机中的空闲进程进行测试脚本分配时,首先对各可执行压力测试的区域,根据脚本名称及其对应的测试脚本比例、该区域的分配用户数量,获取该区域应分配的测试脚本,再获取各可用的负载机中空闲进程的数量,并根据该数量计算出可用线程的数量,最后对每一个可执行压力测试的区域,根据该区域应分配的测试脚本和可用的负载机中可用线程的数量,向该可用的负载机中的空闲进程分配测试脚本。在该实施方式中,可执行压力测试的区域包括广东地区、北京地区、成都地区和上海地区,为便于描述,以广东地区为例进行测试脚本分配的说明。广东地区的分配用户数量为1000,脚本名称包括GKtest和scedu,对应的测试脚本比例分别是70%和30%,则可知对于GKtest测试脚本来说,需要在广东地区分配的数量为1000×70%=700,而对于scedu测试脚本来说,需要在广东地区分配的数量同样为1000×30%=300。从步骤S330可知,广东区域中可用的负载机为S1、S2、S3和S4,则获取负载机S1~S4中空闲进程的数量,由于1个空闲进程对应于200个可用线程,依据这一对于关系即可根据空闲进程的数量计算出负载机S1~S4中可用线程的数量。表1示出了根据本发明一个实施例的可用的负载机中空闲进程与可用线程的关系示例,具体如下所示:
表1
如表1所示,负载机S1中包括1个空闲进程P1,对应T1~T200共计200个可用线程,负载机S2中包括2个空闲进程,分别是P2和P3,空闲进程P2对应T201~T400共计200个可用线程,空闲进程P3对应T401~T600共计200个可用线程,则负载机S2中包括400个可用线程,而负载机S3中包括1个空闲进程P4,对应T601~T800共计200个可用线程,负载机S4中包括1个空闲进程P5,对应T801~T1000共计200个可用线程。
最后,对广东地区,根据该区域应分配的测试脚本和可用的负载机中可用线程的数量,向该可用的负载机中的空闲进程分配测试脚本。由于广东地区应分配500个GKtest测试脚本以及500个scedu测试脚本,而1个测试脚本对应分配给一个可用线程,则对可用的负载机S1、S2、S3和S4应分配的测试脚本数量依次为200、400、200和200,即空闲进程P1、P2、P3、P4和P5应分配的测试脚本的数量均为200。考虑GKtest测试脚本和scedu测试脚本的比例,则空闲进程P1、P2、P3、P4和P5应分配的GKtest测试脚本的数量为200×70%=140,scedu测试脚本的数量为200×30%=60。表2示出了根据本发明一个实施例的测试脚本的分配示例,具体如下所示:
表2
值得注意的是,在对空闲进程进行测试脚本分配时,为增加压力测试发起方的随机性,在具体到对各可用线程分配测试脚本时,可以不按照测试脚本比例来分配,而只需不同的测试脚本在整体上满足数量比例即可。此外,上述可用的负载机中的空闲进程刚好全部都分配了测试脚本,但在一般情况下,常常是空闲进程还有多余,此时即可考虑将测试脚本尽量分配给某一个负载机中的全部空闲进程,也可以将测试脚本分散分配,避免某一个负载机中运行压力过大,具体如何操作视实际情况而定。
在完成测试脚本分配后,开始调度对应的负载机按照用户曲线字段执行相应的压力测试。根据本发明的一个实施例,用户曲线字段包括爬升期、平台期和下降期的用户数量以及执行时间。下面将给出了一个用户曲线字段的示例,具体如下所示:
userTrend:"4000,4;4000,7;0,1"
从上述用户曲线字段所包括的信息中可知,userTrend表示用户曲线字段,第1个4000为爬升期的用户数量,对应的执行时间为4分钟,表示在4分钟内用户数量由0增至4000发起压力测试,第2个4000为平台期的用户数量,对应的执行时间为7分钟,表示在7分钟内用户数量维持4000不变执行压力测试,0为下降期的用户数量,对应的执行时间为1分钟,表示在1分钟内用户数量由4000减至0完成压力测试。
在对负载机进行调度以按照用户曲线字段执行压力测试时,先根据爬升期的用户数量以及执行时间,调度对应的负载机在该执行时间里,将可用线程的数量以从0到该用户数量的增长趋势来执行对应的测试脚本,再根据平台期的用户数量以及执行时间,调度对应的负载机在该执行时间里,将可用线程的数量维持在该用户数量执行对应的测试脚本,最后根据下降期的用户数量以及执行时间,调度对应的负载机在该执行时间里,将可用线程的数量以从该用户数量到0的减少趋势执行对应的测试脚本。在该实施方式中,压力测试的整体执行时间为12分钟,在前4分钟内,调度负载机S1~S4将可用线程的数量以从0到4000的增长趋势来执行对应的GKtest测试脚本和scedu测试脚本,在中间7分钟内,调度负载机S1~S4将可用线程的数量维持在4000执行对应的GKtest测试脚本和scedu测试脚本,在后1分钟内,调度负载机S1~S4将可用线程的数量以从4000到0的减少趋势执行对应的GKtest测试脚本和scedu测试脚本,从而获取对应的压力测试的执行结果。
在步骤S350中,将压力测试的执行结果实时反馈给发出测试参数的客户端700以进行呈现。根据本发明的一个实施例,在步骤S340中调度负载机执行压力测试时,可同步执行步骤S350,将压力测试的执行结果实时反馈给发出测试参数的客户端700以进行呈现。
为了便于用户实时调整压力测试的用户曲线,测试参数的用户曲线参数可实时接受用户的修改,客户端700会将变动后的用户曲线参数发送给调度服务器600进行动态调整,进一步方便用户参考压力测试的执行结果来随时调节用户曲线。
图4示出了根据本发明的一个实施例的压力测试调度装置400的示意图。如图4所示,压力测试调度装置400包括接收模块410、转换模块420、获取模块430、分配模块440和反馈模块450。
接收模块410适于接收多个客户端中任一个客户端所发出的测试参数,测试参数包括脚本参数、用户曲线参数和执行区域参数。其中,客户端适于接受压力测试的测试参数的选定。接收模块410执行上述操作的具体细节可参见方法300中的步骤S310,此处不予以赘述。
转换模块420与接收模块410相连,适于分别对脚本参数、用户曲线参数和执行区域参数进行转换,以生成相应的脚本字段、用户曲线字段和执行区域字段。转换模块420执行上述操作的具体细节可参见方法300中的步骤S320,此处不予以赘述。
获取模块430与转换模块420相连,适于根据执行区域字段,获取可执行压力测试的区域中可用的负载机。其中,执行区域字段包括区域代码、区域名称、运营商编码、运营商名称、分配用户数量、分配用户占比和区域状态中的一个或多个。获取模块430进一步适于根据区域状态判断执行区域字段对应的区域是否可执行压力测试;若该区域可执行压力测试,则根据区域代码和运营商编码获取该区域中可用的负载机。获取模块430执行上述操作的具体细节可参见方法300中的步骤S330,此处不予以赘述。
分配模块440分别与转换模块420和获取模块430相连,适于根据脚本字段和执行区域字段,对各可用的负载机中的空闲进程进行测试脚本分配,以调度对应的负载机按照用户曲线字段执行相应的压力测试。脚本字段包括脚本名称及其对应的测试脚本比例,分配模块440进一步适于对各可执行压力测试的区域,根据脚本名称及其对应的测试脚本比例、该区域的分配用户数量,获取该区域应分配的测试脚本;获取各可用的负载机中空闲进程的数量,并根据该数量计算出可用线程的数量;对每一个可执行压力测试的区域,根据该区域应分配的测试脚本和可用的负载机中可用线程的数量,向该可用的负载机中的空闲进程分配测试脚本。用户曲线字段包括爬升期、平台期和下降期的用户数量以及执行时间,分配模块440进一步适于根据爬升期的用户数量以及执行时间,调度对应的负载机在该执行时间里,将可用线程的数量以从0到该用户数量的增长趋势来执行对应的测试脚本;根据平台期的用户数量以及执行时间,调度对应的负载机在该执行时间里,将可用线程的数量维持在该用户数量执行对应的测试脚本;根据下降期的用户数量以及执行时间,调度对应的负载机在该执行时间里,将可用线程的数量以从该用户数量到0的减少趋势执行对应的测试脚本。分配模块440执行上述操作的具体细节可参见方法300中的步骤S340,此处不予以赘述。
反馈模块450与分配模块440相连,适于将压力测试的执行结果实时反馈给发出测试参数的客户端以进行呈现。反馈模块450执行上述操作的具体细节可参见方法300中的步骤S350,此处不予以赘述。
图5示出了根据本发明的又一个实施例的压力测试调度装置500的示意图。如图5所示,压力测试调度装置500的接收模块510、转换模块520、获取模块530、分配模块540和反馈模块550,分别与图4中压力测试调度装置400的接收模块410、转换模块420、获取模块430、分配模块440和反馈模块450一一对应,是一致的,并新增了与接收模块510和转换模块520相连的验证模块560。
验证模块560分别与接收模块510和转换模块520相连,适于获取发出测试参数的客户端所关联的测试版本信息;当该测试版本信息为企业版时,验证该客户端对应的版本序列号,若验证失败则向该客户端发送错误消息。验证模块560执行上述操作的具体细节可参见方法300中的步骤S320执行前关于客户端验证的处理,此处不予以赘述。
现有的压力测试方案,通常会设置一个用户动态曲线图,根据曲线图的走势进行压测,但由于各种因素的限制,一般是基于预设数据执行完压测周期后才可以进行曲线调整,无法随时获取数据随时修改以满足用户需求,且多脚本、多区域的测试需求都会增加用户曲线保持的难度,难以调度负载机来执行压力测试。根据本发明实施例的压力测试调度的技术方案,首先对接收到的测试参数进行转换处理,生成相应的脚本字段、用户曲线字段和执行区域字段,根据执行区域字段获取可执行压力测试的区域中可用的负载机,再根据脚本字段和执行区域字段,对各可用的负载机中的空闲进程进行测试脚本分配,以调度对应的负载机按照用户曲线字段执行相应的压力测试,最后将压力测试的执行结果实时反馈给发出测试参数的客户端以进行呈现。在上述方案中,获取可执行压力测试的区域中可用的负载机时,先根据执行区域字段里的区域状态判断其对应的区域是否可执行压力测试,若可以则再根据区域代码和运营商编码来获取该区域中可用的负载机。在分配测试脚本时,对每一个可执行压力测试的区域,根据该区域应分配的测试脚本和可用的负载机中可用线程的数量,向该可用的负载机中的空闲进程分配测试脚本。进一步的,根据用户曲线字段所包括的爬升期、平台期和下降期的用户数量以及执行时间,基于可用线程的数量,在各个阶段调度相应的负载机执行对应的测试脚本来发起并完成压力测试。整个曲线趋势的保持,既真实模拟了用户实际访问被测服务的场景,又便于用户实时调整曲线的走势,即使是在多脚本和多区域的情况下也能修改曲线数据,满足了用户对压力测试的多样化需求,使得测试场景更加灵活。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组间可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组间组合成一个模块或单元或组间,以及此外可以把它们分成多个子模块或子单元或子组间。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
此外,所述实施例中的一些在此被描述成可以由计算机***的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如软盘、CD-ROM、硬盘驱动器或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的压力测试调度方法。
以示例而非限制的方式,计算机可读介质包括计算机存储介质和通信介质。计算机可读介质包括计算机存储介质和通信介质。计算机存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在计算机可读介质的范围之内。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。