CN100520732C - 性能测试脚本生成方法 - Google Patents

性能测试脚本生成方法 Download PDF

Info

Publication number
CN100520732C
CN100520732C CNB2006101702859A CN200610170285A CN100520732C CN 100520732 C CN100520732 C CN 100520732C CN B2006101702859 A CNB2006101702859 A CN B2006101702859A CN 200610170285 A CN200610170285 A CN 200610170285A CN 100520732 C CN100520732 C CN 100520732C
Authority
CN
China
Prior art keywords
script
scripts
parametrization
parameter
performance test
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
CNB2006101702859A
Other languages
English (en)
Other versions
CN101211310A (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.)
China Telecom Corp Ltd
Original Assignee
China Telecom Corp 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 China Telecom Corp Ltd filed Critical China Telecom Corp Ltd
Priority to CNB2006101702859A priority Critical patent/CN100520732C/zh
Publication of CN101211310A publication Critical patent/CN101211310A/zh
Application granted granted Critical
Publication of CN100520732C publication Critical patent/CN100520732C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明提出了一种性能测试脚本自动生成方法。总的过程是先录制两个脚本,然后整理并建立两个脚本间的对应关系,在两个脚本的对应行之间比较差别,如果有差别就将差别的内容换成自定的参数名,再根据Log交互记录寻找产生该差别内容的交互操作,找到后于脚本中该交互操作后插入赋值代码,以将该调用操作产生的结果赋值为自定的参数。最终产生新的已参数化的脚本。

Description

性能测试脚本生成方法
技术领域
本发明涉及软件性能测试技术领域,尤其涉及一种性能测试脚本自动生成方法。
背景技术
现代的软件性能测试,大量地用到了压力测试工具,其原理是:截获客户端和服务端的交互内容并以此生成脚本,该脚本经整理(即开发)后,由工具虚拟出大量的客户端连接,同时与服务器进行交互,以此来达到黑盒压力测试目的。
现有技术中,目前主流的压力测试工具有LoadRunner(HP/Mercury),QAload(Compuware),WAS(Microsoft)。
压力测试工具在录制完客户端软件和服务器交互后一般会产生两类文件:
脚本文件(Scripts)和日志文件(ReplayLog)。
脚本文件里存放着软件操作录制时的客户端向服务端发送的交互序列和交互内容。
日志文件存放着软件操作录制时的客户端发送到服务端和从服务端收到的具体内容。
在软件性能的压力测试领域,目前自动化测试脚本开发一般都需要人工完成,其主要两种方法:
一种方法是:录制一个脚本,直接重放(即运行)该脚本,当出现脚本运行出错时,根据错误提示,定位到出错位置,不断尝试将出错位置的调用参数参数化。直到该处错误不再出现为至,再执行下一轮的错误修正,最后验证。
一种方法是:先录制两个脚本,在两个脚本之间比较差别,将差别的内容换成自定的参数名(如,Param1,Param2...),再通过阅读被测程序源代码(如果有的话)或者根据被测程序的开发者的描述,逐一找出各参数值的生成或获取方法,并在录制的脚本中手工编写赋值代码,最后验证。
这两种手工方法有共同存在着几大弊端:
1.有较为繁琐且需要对测试有相当工作经验的技术人员。
2.只要录制的原始脚本内容一多,参数化的成本和出错率也大大增加。
3.对于变更频率较快软件的性能测试,经常是由于软件的一点小变动而导致测试脚本要重新开发。
4.可能会存在参数化不周全问题,即在有些该参数化的地方未进行参数化,对软件正确运行带来困扰。
发明内容
针对目前手工参数化的成本和出错率,本发明的要解决的问题就是提供一种高效而又准确的测试脚本参数化方法,该方法要能由计算机软件自动实现,以解放自动化测试脚本开发中的手动劳动,提高自动化性能测试领域生产率,节省人力成本,加快脚本开发周期。
本发明提供了一种性能测试脚本自动生成方法,包括如下步骤:(1)录制步骤,包括录制至少两个脚本;(2)预处理步骤,包括对所述每个脚本分块,以及算出每一块的特征值,并且按特征值匹配所述至少两个脚本;(3)参数化步骤,包括比较所述至少两个脚本的对应行之间的差异变量,并且用自定义的参数替换所述差异变量;(4)关联步骤,包括在所述脚本中由所述被参数化的差异变量找到产生该差异变量的操作;(5)生成步骤,包括基于所述参数化步骤和关联步骤之后的脚本产生新的脚本。
此外,其中预处理步骤(2)之后还进行如下步骤:按脚本已被匹配的块数和总块数,算出脚本的匹配率;以及如果所述匹配率大于或等于90%时,则判断可以进行步骤(3);如果所述匹配率小于90%时,则判断为不可以进行步骤(3)。
此外,其中生成步骤(5)还包括,基于参数化步骤(3)的参数化脚本以及关联步骤(4)中找到产生该参数的操作,在脚本中该操作之后插入赋值代码,以将调用该操作产生的结果赋值为自定义的参数。
本发明相对现有技术而言,具有如下优点和技术效果。
1.使软件测试脚本的自动化开发变得易于实现,这将大大提高性能测试的生产力,
2.对性能测试人员的技术要求大为降低,使一般的测试领域的入门者即可完成以前专门技术人员才能完成的工作。
3.软件测试脚本的成本大大降低。
4.软件测试脚本的生成更为可靠。
5.对于变更频率较快软件的性能测试变为可能。
附图说明
这里所公开的系统和方法在其各种实施例中克服了上述现有技术的缺点,并且实现了这种系统和方法之前不可能存在的优点。
以下将参考附图更完整地描述本发明,附图中示出了本发明的优选实施例。但是本发明可体现在许多其他的形式中,而不应当被理解为限于这里所述的实施例;相反提供这些实施例是为了公开内容将会详尽和完整,并且将会完整地将本发明的范围传达给本领域的技术人员。从始至终类似的标号都表示类似的元件。
在前述描述和相关附图中给出的教导的帮助下,本发明所属领域的技术人员将会想到本发明的许多修改和其他实施例。因此,要理解本发明不限于所公开的特定实施例,修改和其他实施例想要被包括在所附权利要求书的范围内。虽然这里采用了特定术语,但是它们只是在一般的描述性意义上使用的,而不是用于限制目的。
图1是根据本发明的实施例的主流程图。图2是根据本发明的实施例的预处理流程图。
图3是块的特征值及其匹配。
图4是根据本发明的实施例的参数化流程图。
图5是根据本发明的实施例的参数化示例的示意图。
图6是根据本发明的实施例的关联流程图。
图7是根据本发明的实施例的关联示例的示意图。
图8根据本发明的实施例的新脚本生成流程图。
具体实施方式
以下参考根据本发明的一个实施例的方法的框图和流程图描述本发明。要理解框图和流程图的每个块以及框图和流程图中的块的组合分别可由计算机程序指令实现。这些计算机程序指令可被加载到通用计算机、专用计算机或其他可编程数据处理装置上,以产生机器指令,以便在计算机或其他可编程数据处理装置上执行的指令产生用于执行系统或流程图块中指定的框图的装置。
这些计算机程序指令也可被存储在计算机可读存储器中,该计算机可读存储器可指导计算机或其他可编程数据处理装置按特定方式工作,以便存储在计算机可读存储器中的指令产生一件产品,其中包含实现一个或多个流程图块中指定的功能的指令装置。计算机程序指令也可被加载到计算机或其他可编程数据处理装置上,以致使一系列操作步骤在计算机或其他可编程装置上被执行,以产生计算机实现的过程,以便在计算机或其他可编程装置上执行的指令提供用于实现一个或多个流程图块中指定的功能的步骤。
因此,框图和流程图的块支持用于执行指定功能的装置的组合、用于执行指定功能的步骤的组合以及用于执行指定功能的程序指令装置。还要理解,框图和流程图的每个块以及框图和流程图中的块的组合可由执行指定功能或步骤的基于硬件的专用计算机系统或专用硬件和计算机指令的组合实现。
如附图1所示,该图是根据本发明的实施例的主流程图。
本发明总的过程是先录制两个脚本,然后整理并建立两个脚本间的对应关系,在两个脚本的对应行之间比较差别,如果有差别就将差别的内容换成自定的参数名,再根据Log交互记录寻找产生该差别内容的交互操作,找到后于脚本中该交互操作后插入赋值代码,以将该调用操作产生的结果赋值为自定的参数。最终产生新的已参数化的脚本。
1)录制
参见图1,以同样的操作方法和操作流程,录制两个脚本A和B。这里,仅仅是示例性的录制两个脚本,还可以录制多个脚本。
2)预处理(分块及匹配)
再次参见图1,然后对脚本A和B进行预处理,所述预处理的具体流程如附图2所示。
脚本中记录的主要是客户端向服务端请求的调用和调用参数,但在实际情况下虽然两个脚本中的调用总数和调用类型是大致不变,但调用先后位置并不总是相同的,可就需要我们预先处理这个问题。
如图3所示,和脚本A相比,脚本B的调用的次序发生了“错位”,这种次序的变化往往不会影响脚本的正常运行,但给脚本间的比较从而自动参数化的工作带来很大麻烦。
通过脚本分块和块匹配可以解决这个问题:分块的依据是原子性,这里所谓原子性是指一个调用以及为该调用而进行的所有参数处理构成一个最小独立调用块,因为将调用和为该调用而进行的所有参数处理分开是没有意义的。一个调用块在功能和形式上类似一个函数调用,一个调用的调用名和调用参数的特征,本文称之为调用特征。
用脚本A的调用块逐一匹配脚本B中相似的调用块,匹配的标准即为调用特征相同,调用块的匹配只允许一一对应,两个脚本中匹配的对应调用块本文称之对应调用块。参数化所需要进行的文本比对正是在对应调用块之间进行。
如附图2所示,按照特征值匹配脚本A和B的块之后,按脚本A已被匹配的块数和总块数,算出脚本A的匹配率。
随后,进行匹配率检查,所述匹配率大于或等于90%(或其他比例)时,判断可以参数化,所述预处理完成。
如果所述匹配率小于90%时,判断为不可以参数化。
3)参数化
再次参见图1,预处理步骤之后进行参数化步骤。
参数化(Parameterize):将脚本中的固定常量替换成可变变量(参数)。
所述参数化步骤如附图4所示,对应调用块之前逐行进行比较。发现有不同的部分就将不同的部分换成自定的参数名(如:Param1,Param2...)。
图5是根据一个参数化示例的示意图。例如,比较脚本中的数值,发现不同的数值(88338563和88338559),然后将其替换成自定义的参数Param2。其中还示出了参数化列表,所述列表包括参数Param1,Param2。
4)关联
再次参见图1,参数化步骤之后是关联步骤。
关联(Correlative):在录制的脚本中,由待参数化的固定常量找到产生该常量的操作(交互)的过程称之为关联,换句话说关联是为解决参数的数据源头问题,即哪个调用产生该参数的内容。
关联的具体步骤如附图6所示,根据Log交互记录(ReplayLog)确定产生差别内容的相关位置。
具体而言,打开ReplayLog文件,取出ReplayLog文件的下一行,并判断ReplayLog文件是否结束。
如果没有结束,判断是否出现待参数化的常量内容。
如果没有出现待参数化的常量内容,返回并继续读取ReplayLog文件的下一行。
如果出现待参数化的常量内容,则设置关联。
图7是根据本发明的实施例的一个关联示例的示意图。如图7,脚本A的差异值(例子中的88339565),在Log文件A的某些行找到了,我们可以称这些为差异值的准关联源。
假设该准数据源属于Log文件A的Calln调用返回的第m个数据,这时为了验证该关联的可靠性,我们还需要在Log文件B中进行横向校验,这里的横向校验就是校验脚本B的差异值(例子中的88339559)是不是也可以在Log文件B对应位置(即Log文件B中Calln调用返回的第m个数据)找到,如果找到就验证了该关联的可靠性,反之则说明准关联源是无效的可能只是巧合而已,横向校验失败后应该继续在Log文件A中寻找下一个准关联源,如此反复,直到校验通过或没有找到真正关联源为止。
此外,如附图1所示,没有找到真正关联源的参数需要手动参数化(即人工赋予参数特定的值)。
5)新脚本生成
再次参见图1,关联步骤之后是新脚本生成步骤,如附图8所示。
第一步:以脚本A为基础,将差别的内容换成自定的各参数(如Param1)。
第二步:再逐一查看各参数,由于关联阶段中已分析到该参数的产生源头(关联源调用),所以只要在脚本中该参数源调用后写赋值代码,将该调用产生的内容存入该参数。
示例1
以下结合一个具体例子来说明上述的方法流程。
1)录制
设录得的脚本和Log文件分别简单表示如下:
 
脚本A 脚本B
ret=GetId(1,4)ret=Login(1234,”abc”,2)ret=GetId(1,2,2) ret=GetId(1,2,2)ret=GetId(1,4)ret=Login(1235,”abc”,2)
 
Log文件A Log文件B
GetId In:1,4Out:1234Login In:1234,”abc”,2 Out:”ok”GetId In:1,2,2 Out:1 GetId In:1,2,2 Out:1GetId In:1,4 Out:1235Login In:1235,”abc”,2 Out:”ok”
2)预处理(分块及匹配)
根据调用的特征匹配两个脚本中的调用,匹配后的对应关系如下表:
 
脚本A 脚本B
ret=GetId(1,4)ret=Login(1234,”abc”,2)ret=GetId(1,2,2) ret=GetId(1,4)ret=Login(1235,”abc”,2)ret=GetId(1,2,2)
 
Log文件A Log文件B
GetId In:1,4 Out:1234Login In:1234,”abc”,2 Out:”ok”GetId In:1,2,2 Out:1 GetId In:1,4 Out:1235Login In:1235,”abc”,2 Out:”ok”GetId In:1,2,2 Out:1
3)参数化
通过比较两个脚本发现有1处差异:Login的第1个参数不同。记下该差异,并该差异取参数名为Param1。
 
脚本A 脚本B 参数化结果
ret=GetId(1,4)ret=Login(1234,”abc”,2)ret=GetId(1,2,2) ret=GetId(1,4)ret=Login(1235,”abc”,2)ret=GetId(1,2,2) Login调用第1个参数将会被参数化为Param1
4)关联
通过在Log文件A中查找’1234’的起源,我们发现第一次的GetID可能产生了它,但是我们还不能确信这是不是巧合,这就需要做横向校验。这儿的横向校验就是到Log文件B中查找’1235’的的生成者是不是也正是GetID,结果验证了这一点。这就说明Login的第1个参数即Param1的值应为第一次GetId的返回值。
 
Log文件A Log文件B 关联结果
GetId In:1,4 Out:1234Login In:1234,”abc”,2Out:”ok”GetId In:1,2,2 Out:1 GetId In:1,4 Out:1235Login In:1235,”abc”,2 Out:”ok”GetId In:1,2,2 Out:1 Param1为第一次GetID所产生
5)新脚本生成
第一步,应用参数化结果:
 
脚本A 参数化结果 新脚本(未完成)
ret=GetId(1,4)ret=Login(1234,”abc”,2)ret=GetId(1,2,2) Login调用第1个参数将会被参数化为Param1 ret=GetId(1,4)ret=Login(param1,”abc”,2)ret=GetId(1,2,2)
第二步,应用关联结果,并产生新脚本:
 
新脚本(未完成) 关联结果 新脚本(完成)
ret=GetId(1,4)ret=Login(param1,”abc”,2)ret=GetId(1,2,2) Param1为第一次的GetID所产生 ret=GetId(1,4)param1=retret=Login(param1,”abc”,2)ret=GetId(1,2,2)
此外,本发明已在Tuxedo协议脚本上通过。
将会理解,在一个实施例中,所讨论的方法步骤是由执行存储在存储装置中的指令(代码段)的处理(即计算机)系统的(一个或多个)适当的处理器来执行的。还将理解,本发明并不局限于任何特定的实现方式或编程技术,并且本发明可以用任何适当的用于实现这里所描述的功能的技术来实现。本发明并不局限于任何特定的编程语言或操作系统。从而,正如本领域的技术人员将会意识到的,本发明的实施例可以实现为方法、诸如专用装置这样的装置、诸如数据处理系统这样的装置,或者承载介质,例如计算机程序产品。承载介质承载用于控制处理系统实现方法的一个或多个计算机可读代码段。因此,本发明的方面可以采取方法、纯硬件实施例、纯软件实施例或者结合了软件和硬件方面的实施例的形式。此外,本发明可以采取承载包含在介质中的计算机可读程序代码段的承载介质(例如计算机可读存储介质上的计算机程序产品)的形式。可以使用任何合适的计算机可读介质,其中包括诸如磁盘或硬盘这样的磁存储设备,或者诸如CD-ROM这样的光存储介质。
作为对详细描述的结论,应该注意本领域的技术人员将会很清楚可对优选实施例做出许多变化和修改,而实质上不脱离本发明的原理。另外,这种变化和修改想要被包含在所附权利要求书所述的本发明的范围之内。

Claims (4)

1.一种性能测试脚本自动生成方法,包括如下步骤:
(1)录制步骤,包括录制至少两个脚本;
(2)预处理步骤,包括对所述每个脚本分块,以及算出每一块的特征值,并且按特征值匹配所述至少两个脚本;
(3)参数化步骤,包括比较所述至少两个脚本的对应行之间的差异变量,并且用自定义的参数替换差异变量;
(4)关联步骤,包括在所述至少两个脚本中由被参数化的差异变量找到产生该差异变量的操作;当没有找到关联源的参数时,进行手动参数化;
(5)生成步骤,包括基于所述参数化步骤(3)和关联步骤(4)之后的脚本产生新的脚本。
2.根据权利要求1所述的性能测试脚本自动生成方法,其中预处理步骤(2)之后还进行如下步骤:
按脚本已被匹配的块数和总块数,算出脚本的匹配率;以及
如果所述匹配率大于或等于90%时,则判断可以进行步骤(3);
如果所述匹配率小于90%时,则判断为不可以进行步骤(3)。
3.根据权利要求1所述的性能测试脚本自动生成方法,其中关联步骤(4)之后还进行如下步骤:
当所述至少两个脚本中任一个脚本找到所述关联源时,在所述至少两个脚本中的其他脚本中进行横向校验,以验证该关联结果的可靠性。
4.根据权利要求1所述的性能测试脚本自动生成方法,其中生成步骤(5)还包括,基于参数化步骤(3)的参数化脚本以及关联步骤(4)中找到产生该参数的操作,在脚本中该操作之后插入赋值代码,以将调用该操作产生的结果赋值为自定义的参数。
CNB2006101702859A 2006-12-26 2006-12-26 性能测试脚本生成方法 Active CN100520732C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2006101702859A CN100520732C (zh) 2006-12-26 2006-12-26 性能测试脚本生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2006101702859A CN100520732C (zh) 2006-12-26 2006-12-26 性能测试脚本生成方法

Publications (2)

Publication Number Publication Date
CN101211310A CN101211310A (zh) 2008-07-02
CN100520732C true CN100520732C (zh) 2009-07-29

Family

ID=39611351

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2006101702859A Active CN100520732C (zh) 2006-12-26 2006-12-26 性能测试脚本生成方法

Country Status (1)

Country Link
CN (1) CN100520732C (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101776915B (zh) * 2009-12-28 2012-09-26 国电南京自动化股份有限公司 基于并发模拟工具的跨平台厂站自动化监控系统测试方法
CN102541738B (zh) * 2011-12-28 2014-06-04 华中科技大学 加速多核cpu抗软错误测试的方法
MY190756A (en) * 2012-02-29 2022-05-12 Sony Corp Image processing device and method
CN103729294B (zh) * 2013-12-30 2017-03-22 金蝶软件(中国)有限公司 应用软件性能脚本测试方法与装置
CN107133161B (zh) * 2016-02-26 2021-03-05 中移动信息技术有限公司 一种生成客户端性能测试脚本方法及装置
CN106095657A (zh) * 2016-06-02 2016-11-09 浪潮电子信息产业股份有限公司 一种快速确认性能测试脚本中变量的方法
CN106095509B (zh) * 2016-06-20 2019-05-03 深圳前海微众银行股份有限公司 差异变量发布方法和装置
CN109308256B (zh) * 2018-07-24 2021-08-27 中国建设银行股份有限公司 一种java程序动态分析方法、设备和存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1113367A1 (en) * 1999-12-28 2001-07-04 GE Medical Systems Global Technology Company LLC Automated regression testing of workstation software
CN1581816A (zh) * 2003-08-05 2005-02-16 华为技术有限公司 一种对vlan用户进行动态测试的装置和方法
CN1735252A (zh) * 2004-08-12 2006-02-15 华为技术有限公司 一种通用自动化测试装置及方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1113367A1 (en) * 1999-12-28 2001-07-04 GE Medical Systems Global Technology Company LLC Automated regression testing of workstation software
CN1581816A (zh) * 2003-08-05 2005-02-16 华为技术有限公司 一种对vlan用户进行动态测试的装置和方法
CN1735252A (zh) * 2004-08-12 2006-02-15 华为技术有限公司 一种通用自动化测试装置及方法

Also Published As

Publication number Publication date
CN101211310A (zh) 2008-07-02

Similar Documents

Publication Publication Date Title
CN100520732C (zh) 性能测试脚本生成方法
US7895565B1 (en) Integrated system and method for validating the functionality and performance of software applications
CN106506283B (zh) 银行和企业对接系统的业务测试方法和装置
EP2615555A1 (en) Framework for automated testing of mobile apps
CN104021072A (zh) 用于评估失效的软件程序的机器和方法
CN109361628A (zh) 报文组装方法、装置、计算机设备和存储介质
CN112256581A (zh) 高仿真证券业交易类系统的日志回放测试方法及装置
CN113010413A (zh) 一种接口自动化测试方法和装置
CN111625434A (zh) 一种数据库oltp基准性能测试方法、系统及相关组件
CN107357721B (zh) 测试系统的方法及装置
US20090055331A1 (en) Method and apparatus for model-based testing of a graphical user interface
CN113220597B (zh) 测试方法、测试装置、电子设备及存储介质
EP2913757A1 (en) Method, system, and computer software product for test automation
US20050203717A1 (en) Automated testing system, method and program product using testing map
CN112559525B (zh) 数据检查系统、方法、装置和服务器
CN117290255A (zh) 一种基于Python和Locust框架的批量接口性能测试方法
JP4672532B2 (ja) オペレータ擬似システムおよびオペレータ擬似方法
CN111552648A (zh) 用于应用的自动验证方法和系统
CN112612697A (zh) 一种基于字节码技术的软件缺陷测试定位方法及系统
CN116069334B (zh) 一种基于云原生的在线开发与代码托管方法及系统
CN110888804A (zh) 接口测试方法以及接口测试平台
KR20120111618A (ko) Plc 명령어 테스트 장치 및 방법
CN111078527B (zh) 用于对服务器进行压力测试的辅助系统以及方法
CN113886262A (zh) 软件自动化测试方法、装置、计算机设备和存储介质
US20100057751A1 (en) Method for evaluating a production rule for a memory management analysis

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