性能测试脚本生成方法

文档序号:6564637阅读:233来源:国知局
专利名称:性能测试脚本生成方法
技术领域
本发明涉及软件性能测试技术领域,尤其涉及一种性能测试脚本 自动生成方法。
背景技术
现代的软件性能测试,大量地用到了压力测试工具,其原理是:截 获客户端和服务端的交互内容并以此生成脚本,该脚本经整理(即开发) 后,由工具虚拟出大量的客户端连接,同时与服务器进行交互,以此来 达到黑盒压力测试目的。现有技术中,目前主流的压力测试工具有 LoadRunner (HP/Mercury), QAload(Compuware), WAS(Microsoft)。压力测试工具在录制完客户端软件和服务器交互后一般会产生 两类文件脚本文件(Scripts)和日志文件(ReplayLog)。脚本文件里存放着软件操作录制时的客户端向服务端发送的交 互序列和交互内容。曰志文件存放着软件操作录制时的客户端发送到服务端和从服 务端收到的具体内容。在软件性能的压力测试领域,目前自动化测试脚本开发一般都需 要人工完成,其主要两种方法一种方法是:录制一个脚本,直接重放(即运行)该脚本,当出现脚 本运行出错时,根据错误提示,定位到出错位置,不断尝试将出错位置 的调用参数参数化。直到该处错误不再出现为至,再执行下 一轮的错误 修正,最后验证。一种方法是:先录制两个脚本,在两个脚本之间比较差别,将差别 的内容换成自定的参数名(如,Paraml, Param2…),再通过阅读被测程 序源代码(如果有的话)或者根据被测程序的开发者的描述,逐一找 出各参数值的生成或获取方法,并在录制的脚本中手工编写赋值代 码,最后验"i正。这两种手工方法有共同存在着几大弊端1. 有较为繁瑣且需要对测试有相当工作经验的技术人员。2. 只要录制的原始脚本内容一多,参数化的成本和出错率也大大增力口。3. 对于变更频率较快软件的性能测试,经常是由于软件的一点小 变动而导致测试脚本要重新开发。4. 可能会存在参数化不周全问题,即在有些该参数化的地方未 进行参数化,对软件正确运行带来困扰。发明内容针对目前手工参数化的成本和出错率,本发明的要解决的问题就 是提供一种高效而又准确的测试脚本参数化方法,该方法要能由计算 机软件自动实现,以解放自动化测试脚本开发中的手动劳动,提高自动 化性能测试领域生产率,节省人力成本,加快脚本开发周期。本发明提供了一种性能测试脚本自动生成方法,包括如下步骤 (l)录制步骤,包括录制至少两个脚本;(2)预处理步骤,包括对 所述每个脚本分块,以及算出每一块的特征值,并且按特征值匹配所 述至少两个脚本;(3)参数化步骤,包括比较所述至少两个脚本的 对应行之间的差异变量,并且用自定义的参数替换所述差异变量;(4) 关联步骤,包括在所述脚本中由所述被参数化的差异变量找到产生该 差异变量的操作;(5)生成步骤,包括基于所述参数化步骤和关联 步骤之后的脚本产生新的脚本。此外,其中预处理步骤(2)之后还进行如下步骤:按脚本已被匹配 的块数和总块数,算出脚本的匹配率;以及如果所述匹配率大于或等 于卯%时,则判断可以进行步骤(3);如果所述匹配率小于90%时,
则判断为不可以进行步骤(3)。此外,其中生成步骤(5)还包括,基于参数化步骤(3)的参数 化脚本以及关联步骤(4)中找到产生该参数的搡作,在脚本中该搡 作之后插入赋值代码,以将调用该操作产生的结果赋值为自定义的参 数。本发明相对现有技术而言,具有如下优点和技术效果。1. 使软件测试脚本的自动化开发变得易于实现,这将大大提高性 能测试的生产力,2. 对性能测试人员的技术要求大为降低,使一般的测试领域的 入门者即可完成以前专门技术人员才能完成的工作。3. 软件测试脚本的成本大大降低。4. 软件测试脚本的生成更为可靠。5. 对于变更频率较快软件的性能测试变为可能。


术的缺点,并且实现了这种系统和方法之前不可能存在的优点。以下将参考附图更完整地描述本发明,附图中示出了本发明的优 选实施例。但是本发明可体现在许多其他的形式中,而不应当被理解 为限于这里所述的实施例;相反提供这些实施例是为了公开内容将会 详尽和完整,并且将会完整地将本发明的范围传达给本领域的技术人 员。从始至终类似的标号都表示类似的元件。在前述描述和相关附图中给出的教导的帮助下,本发明所属领域 的技术人员将会想到本发明的许多修改和其他实施例。因此,要理解 本发明不限于所公开的特定实施例,修改和其他实施例想要被包括在 所附权利要求书的范围内。虽然这里采用了特定术语,但是它们只是 在一般的描述性意义上使用的,而不是用于限制目的。图1是根据本发明的实施例的主流程图。图2是根据本发明的实 施例的预处理流程图。
图3是块的特征值及其匹配。图4是根据本发明的实施例的参数化流程图。图5是根据本发明的实施例的参数化示例的示意图。图6是根据本发明的实施例的关联流程图。图7是根据本发明的实施例的关联示例的示意图。图8根据本发明的实施例的新脚本生成流程图。
具体实施方式
以下参考根据本发明的一个实施例的方法的框图和流程图描述 本发明。要理解框图和流程图的每个块以及框图和流程图中的块的组 合分别可由计算机程序指令实现。这些计算机程序指令可被加载到通 用计算机、专用计算机或其他可编程数据处理装置上,以产生机器指 令,以便在计算机或其他可编程数据处理装置上执行的指令产生用于 执行系统或流程图块中指定的框图的装置。这些计算机程序指令也可被存储在计算机可读存储器中,该计算机可读存储器可指导计算机或其他可编程数据处理装置按特定方式 工作,以便存储在计算机可读存储器中的指令产生一件产品,其中包 含实现一个或多个流程图块中指定的功能的指令装置。计算机程序指 令也可被加载到计算机或其他可编程数据处理装置上,以致使一系列 操作步骤在计算机或其他可编程装置上被执行,以产生计算机实现的 过程,以便在计算机或其他可编程装置上执行的指令提供用于实现一 个或多个流程图块中指定的功能的步骤。因此,框图和流程图的块支持用于执行指定功能的装置的组合、 用于执行指定功能的步骤的组合以及用于执行指定功能的程序指令 装置。还要理解,框图和流程图的每个块以及框图和流程图中的块的 组合可由执行指定功能或步骤的基于硬件的专用计算机系统或专用硬件和计算机指令的组合实现。如附图l所示,该图是根据本发明的实施例的主流程图。本发明总的过程是先录制两个脚本,然后整理并建立两个脚本间
的对应关系,在两个脚本的对应行之间比较差别,如果有差别就将差别的内容换成自定的参数名,再根据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所示,对应调用块之前逐行进行比较。 发现有不同的部分就将不同的部分换成自定的参数名(如Paraml , Param2…)。图5是根据一个参数化示例的示意图。例如,比较脚本中的数值, 发现不同的数值(88338563和88338559),然后将其替换成自定义 的参数Param2。其中还示出了参数化列表,所述列表包括参数 Paraml, 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中Call n调用返回的第m个数据)找到,如果找到就验证了该关联的可靠性, 反之则说明准关联源是无效的可能只是巧合而已,横向校验失败后应 该继续在Log文件A中寻找下一个准关联源,如此反复,直到校验通 过或没有找到真正关联源为止。此外,如附图l所示,没有找到真正关联源的参数需要手动参数 化(即人工赋予参数特定的值)。5)新脚本生成再次参见图1,关联步骤之后是新脚本生成步骤,如附图8所示。 第一步以脚本A为基础,将差别的内容换成自定的各参数(如 Paraml)。第二步再逐一查看各参数,由于关联阶段中已分析到该参数的 产生源头(关联源调用),所以只要在脚本中该参数源调用后写赋值代 码,将该调用产生的内容存入该参数。示例1以下结合一个具体例子来说明上述的方法流程。 1)录制设录得的脚本和Log文件分别简单表示如下脚本A脚本Bret = Getld(1,4) ret = Login(1234,,,abc,,,2) ret = Getld(1,2,2)ret = Getld(1,2,2) ret = Getld(1,4) ret = Login(1235,,,abc",2)Log文件ALog文件BGetld In: 1,4 Out:1234 Login In: 1234,"abc",2 Out:,,ok" Getld In: 1,2,2 Out:lGetld In: 1,2,2 Out:l Getld In: 1,4 Out: 1235 Login In: 1235,"abc,,,2 Out:"ok"2)预处理(分块及匹配) 根据调用的特征匹配两个脚本中的调用,匹配后的对应关系如下表脚本A脚本Bret = Getld(1,4) ret = Login(1234,"abc",2) ret = Getld(1,2,2)ret = Getld(1,4) ret = Login(1235,,,abc,,,2) ret = Getld(1,2,2)Log文件ALog文件BGetld In: 1,4 Out:1234 Login In: 1234,"abc",2 Out:"ok" Getld In: 1,2,2 Out:lGetld In: 1,4 Out: 1235 Login In: 1235,"abc,,,2 Out:"ok" Getld In: 1,2,2 Out:l3)参数化通过比较两个脚本发现有1处差异Login的第1个参数不同。 记下该差异,并该差异取参数名为Paraml。脚本A脚本B参数化结果ret = Getld(1,4) ret = Login(1234,"abc,,,2) ret = Getld(1,2,2)ret = Getld(1,4) ret = Login(1235,,,abc",2) ret = GetId(l,2,2)Login调用第1个参数将 会被参数化为Paraml4)关联通过在Log文件A中查找,1234,的起源,我们发现第一次的 GetID可能产生了它,但是我们还不能确信这是不是巧合,这就需要 做横向校验。这儿的横向校验就是到Log文件B中查找,1235,的的生 成者是不是也正是GetID,结果验证了这一点。这就说明Login的第 1个参数即Paraml的值应为第一次Getld的返回值。
Log文件ALog文件B关联结果Getld In: 1,4 Out:1234 Login In: 1234,"abc",2 Out:"ok" Getld In: 1,2,2 Out:lGetld In: 1,4 Out: 1235 Login In: 1235,"abc,,,2 Out:"ok', Getld In: 1,2,2 Out:lParaml为第一次 GetID所产生5)新脚本生成 第一步,应用参数化结果:脚本A参数化结果新脚本(未完成)ret = Getld(1,4) ret = Login(1234,,,abc,,,2) ret = Getld(1,2,2)Login调用第1 个参数将会被参 数化为Paramlret = Getld(1,4) ret = Login(paraml,,,abc,,,2) ret = Getld(1,2,2)第二步,应用关联结果,并产生新脚本新脚本(未完成)关联结果新脚本(完成)ret = Getld(1,4) ret = Login(paraml,,,abc,,,2) ret = Getld(1,2,2)Psr腿l 为第一 次的GetID所产 生ret = Getld(1,4) paraml ='ret ret = Login(paraml,,,abc,,,2) ret = Getld(1,2,2)此外,本发明已在Tuxedo协议脚本上通过。将会理解,在一个实施例中,所讨论的方法步骤是由执行存储在 存储装置中的指令(代码段)的处理(即计算机)系统的(一个或多 个)适当的处理器来执行的。还将理解,本发明并不局限于任何特定 的实现方式或编程技术,并且本发明可以用任何适当的用于实现这里 所描述的功能的技术来实现。本发明并不局限于任何特定的编程语言 或操作系统。从而,正如本领域的技术人员将会意识到的,本发明的 实施例可以实现为方法、诸如专用装置这样的装置、诸如数据处理系 统这样的装置,或者承载介质,例如计算机程序产品。承载介质承载 用于控制处理系统实现方法的一个或多个计算机可读代码段。因此,
本发明的方面可以采取方法、純石更件实施例、纯软件实施例或者结合 了软件和硬件方面的实施例的形式。此外,本发明可以采取承载包含在介质中的计算机可读程序代码段的承载介质(例如计算机可读存储 介质上的计算机程序产品)的形式。可以使用任何合适的计算机可读介质,其中包括诸如磁盘或硬盘这样的磁存储设备,或者诸如CD-ROM这样的光存储介质。作为对详细描述的结论,应该注意本领域的技术人员将会很清楚 可对优选实施例做出许多变化和修改,而实质上不脱离本发明的原 理。另外,这种变化和修改想要被包含在所附权利要求书所述的本发 明的范围之内。
权利要求
1. 一种性能测试脚本自动生成方法,包括如下步骤(1)录制步骤,包括录制至少两个脚本;(2)预处理步骤,包括对所述每个脚本分块,以及算出每一块的特征值,并且按特征值匹配所述至少两个脚本;(3)参数化步骤,包括比较所述至少两个脚本的对应行之间的差异变量,并且用自定义的参数替换所述差异变量;(4)关联步骤,包括在所述脚本中由所述被参数化的差异变量找到产生该差异变量的操作;(5)生成步骤,包括基于所述参数化步骤(3)和关联步骤(4)之后的脚本产生新的脚本。
2. 根据权利要求1所述的性能测试脚本自动生成方法,其中预处 理步骤(2)之后还进行如下步骤按脚本已被匹配的块数和总块数,算出脚本的匹配率;以及 如果所述匹配率大于或等于90%时,则判断可以进行步骤(3 ); 如果所述匹配率小于90%时,则判断为不可以进行步骤(3)。
3. 根据权利要求1所述的性能测试脚本自动生成方法,其中关联 步骤(4)之后还进行如下步骤在另 一个脚本文件中进行横向校验,以验证该关联结果的可靠性。
4. 根据权利要求1所述的性能测试脚本自动生成方法,其中生成 步骤(5)还包括,基于参数化步骤(3)的参数化脚本以及关联步骤(4)中找到产生该参数的操作,在脚本中该操作之后插入赋值代码, 以将调用该操作产生的结果赋值为自定义的参数。
5. 根据权利要求1所述的性能测试脚本自动生成方法,包括在步 骤(4)之后没有找到关联源的参数时,进行手动参数化。
全文摘要
本发明提出了一种性能测试脚本自动生成方法。总的过程是先录制两个脚本,然后整理并建立两个脚本间的对应关系,在两个脚本的对应行之间比较差别,如果有差别就将差别的内容换成自定的参数名,再根据Log交互记录寻找产生该差别内容的交互操作,找到后于脚本中该交互操作后插入赋值代码,以将该调用操作产生的结果赋值为自定的参数。最终产生新的已参数化的脚本。
文档编号G06F11/36GK101211310SQ20061017028
公开日2008年7月2日 申请日期2006年12月26日 优先权日2006年12月26日
发明者雄 徐, 林全疆, 梁剑钊, 胡颖茂, 蔡坚铮, 袁立宇 申请人:中国电信股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1