云压力测试数据分配的方法、装置、计算设备及压力测试系统与流程

文档序号:12464189阅读:595来源:国知局
本发明涉及软件测试领域,尤其涉及云压力测试数据分配的方法、装置、计算设备及压力测试系统。
背景技术
:压力测试就是在模拟网络环境或真实网络环境下,对被测软件系统发起线性增长负载测试或者梯形增长负载测试,并记录测试对被测软件系统的影响。例如,为了对各种服务平台(例如购物网站平台、订票平台等)进行压测,通常需要多个压测负载机并行地对服务平台进行访问。例如,压测系统被配置为模拟100万用户量级的压测。压测系统为分布式系统,可以包括调度服务器和多个负载服务器(负载机)等。取决于本身的硬件配置和调度服务器的指示,负载机可以启动一个或多个进程实例。每个进程实例可以包括至少一个用户线程。通常,一个用户线程可以执行模拟一个用户的访问操作。通常,每个用户线程执行一次测试任务所需要的数据包括多个用户线程通用的测试脚本数据和由本线程独立使用的信息(例如,用户名和密码等)。由于压测的用户量级较大,因此如何保证每个用户线程获取独立使用的数据是一个亟待解决的问题。技术实现要素:本发明提供一种新的测试数据分配的技术方案,有效的解决了上面至少一个问题。根据本发明的一个方面,提供一种测试数据分配的方法,适于在计算设备中执行测试任务的线程中执行。该计算设备包括来自调度服务器的测试配置信息。每个线程具有由该调度服务器所分配的线程编号。该方法包括下述步骤。根据线程编号,获取测试配置信息中对应本线程的配置信息子集。在每个测试请求的前置处理阶段,从相应的配置信息子集中提取该测试请求中每个待赋值的参数名称对应的参数值。可选地,在根据本发明的测试数据分配的方法中,测试请求包括下述中至少一种:http请求、https请求、ftp请求、Java对象请求、JDBC请求、LDAP请求和SOAP请求。线程编号包括计算设备标识字段、进程标识字段和线程标识字段。可选地,在根据本发明的测试数据分配的方法中,根据线程编号,获取测试配置信息中对应本线程的配置信息子集的步骤包括:根据下述公式确定所对应配置信息子集的开始地址和结束地址:StartLine=MaxDataRow/MaxUser*用户ID*EndLine=MaxDataRow/MaxUser*用户ID*+BlockSize其中,MaxDataRow表示测试配置信息的总行数,用户ID*表示线程编号,MaxUser表示调度服务器所分配的线程总数,BlockSize表示分配给每个线程的资源块大小,StartLine表示开始地址,EndLine表示结束地址;将StartLine和EndLine所指向的区间存储到缓冲区中并作为所对应的配置信息子集。可选地,在根据本发明的测试数据分配的方法中,配置信息子集包括每个待赋值的参数名称对应的取值列表。在每个测试请求的前置处理阶段,从相应的配置信息子集中提取该测试请求中每个待赋值的参数名称对应的参数值的步骤包括:对于每个待赋值的参数名称,从其所对应的取值列表中提取一个未被本线程提取过的值作为相应的参数值。可选地,在根据本发明的测试数据分配的方法中,从其所对应的取值列表中提取一个未被本线程提取过的值作为相应的参数值的操作包括:根据本线程从该取值列表中提取值的已有迭代次数,按存储顺序从该取值列表中取出一个值作为相应的参数值。可选地,在根据本发明的测试数据分配的方法中,参数名称包括第一参数名和与第一参数名关联的第二参数名。在每个测试请求的前置处理阶段,从相应的配置信息子集中提取该测试请求中每个待赋值的参数名称对应的参数值的步骤包括:按照位置顺序或者随机顺序提取第一参数名对应的第一参数值;提取与第一参数值关联的第二参数值并赋值给第二参数名。根据本发明又一个方面,提供一种测试数据分配的装置,适于驻留在计算设备中执行测试任务的线程中。该计算设备包括来自调度服务器的测试配置信息。每个线程具有由该调度服务器所分配的线程编号。该装置包括分配单元和提取单元。分配单元适于根据线程编号,获取测试配置信息中对应本线程的配置信息子集。提取单元适于在每个测试请求的前置处理阶段,从相应的配置信息子集中提取该测试请求中每个待赋值的参数名称对应的参数值。根据本发明又一个方面,提供一种计算设备,包括一个或多个执行测试任务的线程。其中每个线程驻留有根据本发明的测试数据分配的装置。根据本发明又一个方面,提供一种压力测试系统,包括调度服务器和根据本发明的计算设备。调度服务器适于解析测试任务,并确定执行测试任务的线程总数。综上,根据本发明的技术方案,可以获取执行测试任务的线程所要独立使用的配置信息子集。在此基础上,根据本发明的技术方案可以按照顺序(随机)方式对参数名称进行赋值,并且可以保证每次取值不重复。这样,本发明的技术方案可以在压力测试过程中,高实时性的参数化请求对象(例如,http请求或ftp请求等),并且能保证依次对不同请求对象中相同参数名赋以独立使用的参数值(即不同请求中所赋值不同)。特别说明的是,本发明的技术方案对于高并发(用户线程量级较大)的压力测试,可以保证每个请求对象(即请求事务)中参数值的唯一性,从而可以更真实地模拟高并发地访问被测系统的过程。附图说明为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。图1示出了根据本发明一些实施例的压力测试系统100的框图;图2示出了根据本发明一些实施例的测试数据分配分配测试数据的方法200的流程图;以及图3示出了根据本发明一些实施例的测试数据分配的装置300的示意图。具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。图1示出了根据本发明一些实施例的压力测试系统100的框图。如图1所示,压力测试系统100包括调度服务器110和多个执行测试任务的计算设备120-1、...、120-N,其中N≥2。这里,调度服务器110可以对测试脚本进行解析,以确定所需要所要虚拟的用户总数和执行压力测试的地理位置。取决于所确定的用户总数、地理位置和可选用计算设备的负载情况,调度服务器110可以在多个计算设备中启动对应用户总数的用户线程。这里,计算设备也可以被称为负载服务器。计算设备可以是物理独立的设备,也可以是分布式云主机,本发明对此不做限制。另外,压力测试系统100还适于向计算设备发送测试配置信息。这里,测试配置信息例如可以包括线程发送请求时所需要的用户名和密码等参数值。在根据本发明一个实施例中,压力测试的用户数量为1000万。调度服务器110可以在多个计算设备中启动1000万执行测试任务的用户线程。典型地,按照测试脚本的执行流程,压力测试系统100例如可以划分3个执行阶段,但不限于此。例如,3个执行阶段包括初始阶段、运行阶段和结束阶段。3个执行阶段例如均为5分钟。在初始阶段,执行测试任务的线程数从0线性增长为1000万。在运行阶段,执行测试任务的线程数保持在1000万。在结束阶段,执行测试任务的线程总数从1000万逐渐降低到0。需要说明的是,上述压力测试系统100的结构仅仅为示例性说明,但不限于此。通常而言,每个线程在执行测试期间,可以向被监测软件(例如为购物平台服务器等)发送请求和接收相应的响应。每个发送的请求可以称之为一个事务。这里,请求例如可以是http请求、https请求、ftp请求、Java对象请求、JDBC请求、LDAP请求和SOAP请求等,但不限于此。对于每个请求而言,线程可以执行前置处理操作、发送请求操作和后置处理操作。以http为例,前置处理操作可以对待发送的请求对象进行参数化。发送请求操作是将请求发送到被监测的软件系统。后置处理操作是对相应消息进行处理。例如,线程可以在后置处理操作阶段提取各种变量值,但不限于此。在前置处理操作阶段,线程可以调度测试配置信息,以便保证线程所获取的配置信息具有唯一性。下面结合图2对线程所执行的测试数据分配的方法进行示例性说明。图2示出了根据本发明一些实施例的测试数据分配的方法200的流程图。方法200适于在执行测试任务的计算设备(也可以称之为负载服务器)中执行。更具体而言,方法200适于在计算设备上每个执行测试任务的线程中执行。如图2所示,方法200始于步骤S210。在步骤S210中,根据线程编号,获取测试配置信息中对应本线程的配置信息子集。这里,线程编号例如是由调度服务器所分配的标识。测试配置信息为来自调度服务器的包含每个线程所需要的参数信息的资源文件。在根据本发明一个实施例中,线程编号可以包括计算设备标识字段、进程标识字段和线程标识字段。当然,本发明的实施例也可以采用其他公知方式对线程进行编号,这里不再赘述。步骤S210可以根据线程编号确定供本线程唯一性使用的配置信息子集。这里,配置信息子集可以包括一个或多个参数名称的取值。每个参数名称可以对应配置信息子集中一个取值列表。在根据本发明一个实施例中,步骤S210首先计算配置信息子集的开始地址和结束地址。具体地,步骤S210可以通过下述公式进行计算开始地址和结束地址。StartLine=MaxDataRow/MaxUser*用户ID*EndLine=MaxDataRow/MaxUser*用户ID*+BlockSize。其中,MaxDataRow表示测试配置信息的总行数,用户ID*表示线程编号,MaxUser表示调度服务器所分配的线程总数,BlockSize表示分配给每个线程的资源块大小,StartLine表示开始地址,EndLine表示结束地址。在上述计算的基础上,步骤S210可以将StartLine和EndLine所指向的区间存储到缓冲区(其为线程级缓冲)中并作为所对应的配置信息子集。需要说明的是,取决于配置信息子集的数据结构,每个地址(可以开始地址和结束地址所处区间的任一个)指向的存储单元可以被配置为包括一个参数名称(也可以称为一个参数项)的一个取值。另外,每个地址所指向的存储单元也可以包括多个参数名称的取值。这里,在每个地址被配置为存储一个参数名称的值时,该配置信息子集可以被认为是一个参数名称的取值列表。在每个地址包括多个参数名称的值时,该配置信息子集的每一列可以被认为是相应参数名称的取值列表。例如表1示出了根据本发明一个实施例的配置信息子集的至少一部分。表1用户名身份证号码办公电话密码问题答案张志峰1101011X101001002139777777笨蛋吴宇1101011X80010101174008305555小说席国柳1101011X80010102134008861888唱响世界李洪学1101011X800101031X1062782165BabyBaby杨志明1101011X80010103362134206500发现爱如表1所示,本实施例中配置信息子集包括4个参数名称(用户名、身份证号码、办公电话和密码发问题答案)的取值列表。在确定配置信息子集的基础上,方法200可以执行步骤S220。在每个测试请求的前置处理阶段,步骤S220从相应的配置信息子集中提取该测试请求中每个待赋值的参数名称对应的参数值。根据本发明一个实施例,在步骤S220中,对于每个带赋值的参数名称,从相应的配置信息子集中提取一个本线程未提取过的值作为相应的参数值。例如,执行方法200的线程依次执行对第一请求和第二请求的前置处理操作。在对第一请求的前置处理操作中,步骤S220提取第一参数名称对应取值列表中一个值作为本请求中第一参数名称的取值。在对第二请求的前置处理操作中,提取第一参数名称对应取值列表中另一个值(不同于第一请求中相应取值)作为第二请求中第二参数名称的取值。以表1为例,第一请求中用户名例如为“张志峰”,第二请求中用户名为“吴宇”。需要说明的是,步骤S220每次从一个参数名称对应取值列表中取值时,可以按照取值列表中值的存储顺序依次取值。根据本发明一个实施例,步骤S220对一个参数名称赋值时,可以根据从该参数名称的取值列表中取值的已有迭代次数,按存储顺序取值。例如,已有迭代次数为2,本次对参数名称赋值可以取第3个存储单元(也可以称为列表中第3行)中值。另外,步骤S220可以随机从取值列表中取值,但不限于此。在根据本发明一个实施例中,执行步骤S220的代码格式示例如下:${DataRandomColumn(paramname,oldvalue,key,getdatatype,finaltype,startline,col,isRef,blockFlag,blockSize,blockStep,custparam)}paramname:参数名Oldvalue:原值key:数据keygetdatatype:iteration,meet,once(获取数据方式:迭代,遇见,一次)finaltype:数据用尽处理方式,startline:起始行col:key对应数据中的列值isRef:是否为引用函数,默认为false,在TableRow中作为内嵌函数设为trueboolblockFlag是否分块intblockSize分块大小intblockStep步长custparam:用户参数在根据本发明又一个实施例中,至少一部分参数名称具有关联关系(例如登录用户名和密码)。通常而言,配置信息子集中关联参数的值也关联存放。相应地,相关联的参数名称(即关联变量)的取值过程也具有关联性。下面以相关联的第一参数名和第二参数名为例进行说明。在步骤S220中,首先按照位置顺序或者随机顺序提取第一参数名对应的第一参数值。然后提取与第一参数值关联的第二参数值,并赋值给第二参数名。根据本发明一个实施例,提取与第一参数值关联的第二参数值的代码示例如下:${DataRow(paramname,oldvalue,col,preParamName,${preFunctionName(paramname’,oldvalue’,key’,getdatatype’,finaltype’,startline’,col’,isRef’,custparam’)},custparam)}preParamName:被关联参数名preFunctionName将被关联的参数函数名称:顺序取值/随机取值TableColumn/TableRandomColumnparamname’:参数名Oldvalue’:原值Key’:数据keyGetdatatype’:替换方式:迭代,遇见,一次Finaltype’:数据用尽处理方式,(随机方式中默认送中断无实际意义,只是为了通用)Startline’:起始行Col’:key对应数据中的列值Custparam’:用户参数以上内嵌函数值军用被关联参数设定的原值。isRef’作为内嵌函数设为true综上,根据本发明的方法200可以确定执行测试任务的线程所独立使用的配置信息子集。在此基础上,方法200可以按照顺序(随机)方式对参数名称进行赋值,并且可以保证每次取值不重复。这样,本发明的方法200可以在压力测试过程中,高实时性地参数化请求对象(例如,http请求或ftp请求等),并且能保证依次对不同请求对象中相同参数名赋以唯一参数值(即不同请求中所赋值不同)。特别说明的是,本发明的方法200对于高并发(用户线程量级较大)的压力测试场景而言,可以保证请求对象(即请求事务)中参数值的唯一性,从而可以更真实地模拟高并发式访问被测系统的过程。图3示出了根据本发明一些实施例的测试数据分配的装置300的示意图。装置300适于驻留在计算设备中每个执行测试任务的线程中。该计算设备包括来自调度服务器的测试配置信息。每个线程具有由该调度服务器所分配的线程编号。这里,线程编号例如可以包括计算设备标识字段、进程标识字段和线程标识字段,但不限于此。如图3所示,装置300包括分配单元310和提取单元320。分配单元310,适于根据线程编号,获取测试配置信息中对应本线程的配置信息子集。在根据本发明一个实施例中,分配单元310根据下述公式来计算所要确定的配置信息子集的开始地址和结束地址。StartLine=MaxDataRow/MaxUser*用户ID*EndLine=MaxDataRow/MaxUser*用户ID*+BlockSize。其中,MaxDataRow表示测试配置信息的总行数,用户ID*表示线程编号,MaxUser表示调度服务器所分配的线程总数,BlockSize表示分配给每个线程的资源块大小,StartLine表示开始地址,EndLine表示结束地址。在上述计算的基础上,分配单元310可以将StartLine和EndLine所指向的区间存储到缓冲区311中并作为所对应的配置信息子集。这里,配置信息子集包括每个待赋值的参数名称对应的取值列表。提取单元320,适于在每个测试请求的前置处理阶段,从相应的配置信息子集中提取该测试请求中每个待赋值的参数名称对应的参数值。这里,测试请求可以是多种类型的请求事务,例如http请求、https请求、ftp请求、Java对象请求、JDBC请求、LDAP请求和SOAP请求等,但不限于此。在根据本发明一个实施例中,对于每个待赋值的参数名称,提取单元320从其所对应的取值列表中提取一个未被本线程提取过的值作为相应的参数值。例如,提取单元320可以根据本线程从该取值列表中提取值的已有迭代次数,按存储顺序从该取值列表中取出一个值作为相应的参数值。在根据本发明又一个实施例中,参数名称包括第一参数名和与第一参数名关联的第二参数名。提取单元320适于按照位置顺序或者随机顺序提取第一参数名对应的第一参数值。在此基础上,提取单元320提取与第一参数值关联的第二参数值并赋值给第二参数名。关于装置300更具体的实施方式请参见方法200,这里不再赘述。A9、如A8所述的装置,其中,所述测试请求包括下述中至少一种:http请求、https请求、ftp请求、Java对象请求、JDBC请求、LDAP请求和SOAP请求。A10、如A8或A9所述的装置,其中,所述分配单元适于根据下述方式来根据线程编号,获取测试配置信息中对应本线程的配置信息子集:根据下述公式确定所对应配置信息子集的开始地址和结束地址:StartLine=MaxDataRow/MaxUser*用户ID*EndLine=MaxDataRow/MaxUser*用户ID*+BlockSize其中,MaxDataRow表示测试配置信息的总行数,用户ID*表示线程编号,MaxUser表示调度服务器所分配的线程总数,BlockSize表示分配给每个线程的资源块大小,StartLine表示开始地址,EndLine表示结束地址;将StartLine和EndLine所指向的区间存储到缓冲区中并作为所对应的配置信息子集。A11、如A8-A10中任一项所述的装置,其中,所述线程编号包括计算设备标识字段、进程标识字段和线程标识字段。A12、如A8-A11中任一项所述的装置,其中,所述配置信息子集包括每个待赋值的参数名称对应的取值列表;所述提取单元适于根据下述方式在每个测试请求的前置处理阶段,从相应的配置信息子集中提取该测试请求中每个待赋值的参数名称对应的参数值:对于每个待赋值的参数名称,从其所对应的取值列表中提取一个未被本线程提取过的值作为相应的参数值。A13、如A12所述的装置,其中,所述提取单元适于根据下述方式执行从其所对应的取值列表中提取一个未被本线程提取过的值作为相应的参数值的操作:根据本线程从该取值列表中提取值的已有迭代次数,按存储顺序从该取值列表中取出一个值作为相应的参数值。A14、如A8-A11中任一项所述的装置,其中,所述参数名称包括第一参数名和与第一参数名关联的第二参数名,所述提取单元适于根据下述方式在每个测试请求的前置处理阶段,从相应的配置信息子集中提取该测试请求中每个待赋值的参数名称对应的参数值:按照位置顺序或者随机顺序提取第一参数名对应的第一参数值;提取与第一参数值关联的第二参数值并赋值给第二参数名。在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本
技术领域
内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本
技术领域
的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1