收藏本站 收藏本站
积木网首页 - 软件测试 - 常用手册 - 站长工具 - 技术社区
软件测试 > LoadRunner > 正文

首页 | 领域细分: 游戏测试 安全测试 手机测试 Web测试 | 技术研究: 单元测试 入门教程 用例设计 性能测试 功能测试 | 测试职场: 面试精选 职场发展 面试试题

测试管理: 配置及流程 - 需求管理 - 质量验收 - 缺陷管理 - 其它管理相关 | 开发语言: PHP技巧 - PHP基础 - PHP实例 - PHP错误代码

测试工具: LoadRunner JiRa QuickTestPro RoBot WinRunner TestDirector 其它测试工具 | 数据库: Mysql数据库 Oracle数据库 CSS/DIV基础 HTML基础

LoadRunner性能测试应用(连载二十三)

来源:互联网 日期:2014-06-01 16:00

  3.3.3 手动关联方法

  在对脚本进行关联的时候,有的脚本利用上面介绍的方法自动关联就可以了,但是也有可能某些需要做关联的动态数据,连“Correlation Studio”都无法侦测出来,这时就需要进行手动关联。

  虽然手动关联比自动关联方法麻烦一些,操作复杂,对于没有代码编程经验的测试初学者来说,甚至有时连需要关联的位置都无法找到,但是经过多次实践后,会发现很多关联的方法与技巧。毕竟手动关联出来的脚本拥有更大的灵活性,可以随意改动来满足用户不同的需求。

  手动关联的执行过程大致如下:

  ● 使用相同的业务流程与数据,录制两份脚本。

  ● 使用WinDiff工具协助找出需要关联的数据。

  ● 使用web_reg_save_param函数手动建立关联。

  ● 将脚本中有用到关联的数据,以参数取代。

  具体的执行过程如下:

  1.使用相同的业务流程与数据,录制两份脚本。

  先录制一份脚本并存档,再依照相同的操作步骤与数据录制第二份脚本并保存。

  注意:所有的步骤和输入的数据一定都要一样,这样才能找出由服务器端产生的动态数据。在录制第二份脚本时有时候无法使用相同的输入数据,但也要记住第一份脚本所使用的输入数据,到时对两个脚本进行比较时才能判断出这是所要输入的数据,还是变动的数据。

  2.使用WinDiff工具协助找出需要关联的数据。

  (1)在第二份脚本中,单击VuGen的“Tools”>“Compare with Vuser…”,并选择第一份脚本。

  (2)接着WinDiff会开启,同时显示两份脚本,并显示有差异的地方。WinDiff会以一整行黄色标示有差异的脚本,并且以红色的字体显示真正差异的文字(假如没看到红色字体,请单击“Options”>“View”>“Show Inline Differences”)。

  (3)逐一检视两份脚本中差异的部分,每一处差异都可能是需要做关联的地方。选取差异的脚本,然后复制。在复制时,有时并不需要取整行脚本,可能只会选取脚本中的一部分。

  注意:请忽略lr_thik_time的差异部分,因为lr_thik_time是用来模拟每个步骤之间使用者思考延迟的时间的。

  (4)接着要在Recording Log(单一协议)或是Generation Log(多重协议)中找这个值。将鼠标光标放到Recording Log的第一行开头,按下“Ctrl+F”组合键,开启“Find”窗口,贴上刚刚复制的脚本,找出其在Recording Log第一次出现的位置。

  如果在Recording Log中找不到要找的数据,这时请先确认是否找对了脚本,毕竟现在开启了两个几乎一样的脚本,很容易弄错。

  如果在Recording Log中找到了要找的数据,这时要确认数据是否为从服务器端传送过来的。首先可以检查数据的标头,从标头的Receiving response可以知道数据是否是从服务器端传送到客户端的。假如此数据第一次出现是在Sending request中,则表示此数据是由客户端产生,不需要做关联,但是有可能需要做参数化(Parameterized)。

  现在已经找到录制两次不一致而且是由服务器所产生的动态数据,此数据极有可能需要做关联。

  3.使用web_reg_save_param函数手动建立关联。

  在找到由服务器所产生的动态数据之后,接下来要做的就是找出适当的位置,使用web_reg_save_param函数,将这个动态数据撷取到某个参数中。

  (1)web_reg_save_param函数

  对于关联来说,web_reg_save_param是最重要的一个函数,其功能是在下载的网页内容中,通过设定的边界字符串,找出特定的数据并将其存储在一个参数中,以供后续脚本使用。

  web_reg_save_param是一个服务端函数(Service function,主要用来完成一些特殊的工作,如关联、设定proxy、提供认证信息等),当其作用时,不会对网页的内容做任何的修改。

  web_reg_save_param同时也是一个注册类型的函数(Registration Type Function,只要函数名称中包含_reg_的字眼,表示其为注册类型的函数)。注册类型的函数意味着其真正作用的时机是在下一个动作函数(Action Function)完成时。举例来说,当某个web_url执行时所接收到的网页内容中包含了要做关联的动态数据,则必须将web_reg_save_param放在此web_url之前,web_reg_save_param会在web_url执行完毕后,也就是网页内容都下载完后,再执行web_reg_save_param,寻找要做关联的动态数据并建立参数。

  要记住一点,当使用注册类型的函数时,要注意其放置的位置必须在要作用的动作函数之前。

  (2)web_reg_save_param的语法

  int web_reg_save_param(const char *ParamName, <list of Attributes>, LAST);

  参数说明:

  ● ParamName:存放动态数据的参数名称。

  ● list of Attributes:其他属性,包含 “Notfound”、“LB”、“RB”、“RelFrameID”、“Search”、“ORD”、“SaveOffset”、“Convert”以及“SaveLen”。下面将详细说明每个属性值的意义。

  Ø Notfound:指定当找不到要找的动态数据时该怎么处理。

  当指定Notfound=error时,表示着找不到动态数据时,就发出一个错误消息。此为该属性的默认值。

  当指定Notfound=warning时,表示当找不到动态数据时,不发出错误消息,只发出警告,脚本也会继续执行下去不会中断。在对脚本出错时,可以如此设置。

  Ø LB:动态数据的左边界字符串。此属性是必须要有的,而且区分大小写。

  Ø RB:动态数据的右边界字符串。此属性是必须要有的,而且区分大小写。

  Ø RelFrameID:相对于URL而言,欲搜寻的网页的Frame。此属性可以是All或是数字,而且可有可无。

  Ø Search:搜寻的范围,其值可以是Headers(只搜寻headers)、Body(只搜寻body部分,不搜寻header)、Noresource(只搜寻body部分,不搜寻header与resource)或是All(搜寻全部范围,此为默认值),此属性可有可无。

  Ø ORD:指明从第几次出现的左边界开始才是要撷取的数据,默认值是1。假如该属性值为All,则所有找到符合的数据会存储在数组中。此属性可有可无。

  Ø SaveOffset:当找到符合的动态数据时,从第几个字符开始才开始存储到参数中。此属性值不可为负数,其默认值为0。

  Ø Convert:转换数据格式。当指定该属性值为HTML_TO_URL时,意味着将HTML-encoded数据转成URL-encoded数据格式。如果是HTML_TO_TEXT,表示将HTML-encoded数据转成纯文字数据格式。

  Ø SaveLen:当找到匹配项后,偏移量之后的几个字元存储到参数中。此参数可有可无,默认值是-1,表示一直到结尾的整个字符串都存入参数中。

  (3)确定使用web_reg_save_param函数的位置

  之前的步骤已经在Execution Log中找到可能需要关联的动态数据。在Execution Log中选取动态数据前的文字,然后复制,利用这段文字,找出要关联的动态数据。不过在这之前,需要先找出使用web_reg_save_param函数的正确位置,所以要再重新执行一遍脚本,而且这次会开启所有的Log。

  在VuGen中单击“Vuser”>“Run-Time Settings”。单击“General”>“Log”,勾选“Enable logging”、“Always sends messages”、“Extended log”以及“Extended log”下的所有选项。然后,单击“OK”按钮就可以执行脚本了。

  执行完脚本之后,在Execution Log中搜寻刚刚复制的字符串。找到字符串后,在字符串前面会有A.tion1.c(7),这个7就是到时候要插入web_reg_save_param函数的位置,也就是说要插入到脚本的第7行。

  在脚本的第7行前插入一行空白行,然后输入:

  web_reg_save_param("UserSession",

  这个“UserSession”就是到时要使用的参数名称,建议取一个有意义的名字。

  注意:到目前为止,整个web_reg_save_param函数还没完成。

  (4)确定web_reg_save_param中的边界。

  web_reg_save_param函数主要是通过动态数据前后的固定字符串,来辨识要撷取的动态数据的,所以还需要找出动态数据的边界字符串。

  1)确定左边界字符串

  再回到Execution Log中,选取动态数据前的字符串并且复制它。这时会有个问题,到底要选取多少字符串才足以唯一识别要找的动态数据呢?建议是越多越好,但是尽量不要包含特殊字符。

  选取“input type=hidden name=userSession value=”字符串,之后再确认一次这段字符串真的是可以唯一识别的,所以在Execution Log中通过“Ctrl+F”搜寻,查看这段字符串是不是要找的动态数据。假如找不到,web_reg_save_param函数还有个ORD参数可以使用,ORD参数可以设定出现在第几次的字符串才是要找的字符串。

  将这个边界字符串加到未完成的web_reg_save_param函数中:

  web_reg_save_param(UserSession", "LB= input type=hidden name= userSession value=",

  2)确定右边界字符串

  接下来要找出动态数据的右边界字符串,这个字符串就比较好找了,从动态数据的最后一个字符开始,通常就是要找的右边界字符串。

  以这个例子来看,就是“>”,所以再把右边界字符串加入web_reg_save_param函数中,最后再加上“LAST);”就完成整个web_reg_save_param函数:

  web_reg_save_param("UserSession", "LB= input type=hidden name= userSession value=", "RB=>", LAST);

  当使用web_reg_save_param建立参数后,接下来就是用“UserSession”参数去取代脚本中写死的(hard-coded)资料。即将

  "Name=userSession","Value=75893.0884568651DQADHfApHDHfcDtccpfAttcf", ENDITEM,

  替换为:

  "Name=userSession", "Value={UserSession}", ENDITEM,

  至此,已经完成了一个关联了,接下来就是执行脚本,验证其是否能成功运行。假如还是有问题,就要检查看看是否还需要再做另一个关联。

  4.将脚本中有用到关联的数据,以参数取代。

  利用前面所介绍的方法找到需要关联的地方,把需要变更的常量用参数进行取代,具体参数化步骤参看第3章3.2.1节的内容,在此不再赘述。

  参数化的过程执行如下操作:

  (1)用参数替换脚本中的常量。

  (2)为参数设置属性和数据源。

  参数化的过程要注意以下事项:

  (1)在参数化的过程中,只有函数中的参数能被参数化,而且也不是所有函数中的参数都能参数化。例如,Lrd_stmt只能参数化mpcText。

  (2)参数化CORBA或General_java Vsuer这两个地方保证完整性,必须参数化整个字符串。

  (3)参数的格式要与所录制的脚本相一致,否则脚本可能不能正常运行。

相关阅读:

LoadRunner性能测试应用(连载二十二)

LoadRunner性能测试应用(连载二十一)

LoadRunner性能测试应用(连载二十)

LoadRunner性能测试应用(连载十九)

版权声明:51Testing软件测试网获电子工业出版社授权连载《LoadRunner性能测试应用》部分章节,其他个人或单位未经许可,不得对本内容复制、转载或进行镜像。51Testing软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们。

本周排行

别人正在浏览

强悍的草根IT技术社区,这里应该有您想要的!
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP备05050695号