LR高级技巧实战

发表于:2007-6-19 16:50

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:linlinxu    来源:51Testing博客

分享:


6.怎么样使多台产生vuser的测试机均匀地对被测试的系统施加压力?
在测试的过程中,为了尽可能减少或者避免本身的测试机成为测试过程中的瓶颈,需要使用多台测试机产生vuser对被测试系统施加压力,下面对操作步骤做简单介绍:
        在默认模式下使用controller添加多台Generators机器时,不管你怎么加,最终能真正起作用的只有一台(10.19.180.2/3/4或localhost):

为了让10.19.180.2/3/4机器同时能真正被添加进去,我们需要做以下几步工作:
改变场景模式,将组模式()改变为百分比模式(percentage mode),具体做法是,选择Scenario菜单下的Convert Scenario to the Percentage Mode;

然后,在已经添加好的Load Generators机器列表中同时选择你想选择的机器;

最后,点OK按钮就可以得到我们所要的结果了。

当然,如有必要我们还可以把场景模式改为Vuser Group Mode,具体做法如下:
选择Scenario菜单下的Convert Scenario to the Vuser Group Mode;

然后在弹出的对话框中,单击Yes按钮可以得到如下结果,

到此为止,添加多台Load Generators测试机整个过程就完成了,其实很简单,关键是你发现了没有。

7. 怎么样在关联时取列表的最后一个值(在测试重打发票取流水号时需要)?
在压力测试脚本的关联过程中,我们有时可能需要关联最新的值(如最新的流水号,通常情况下,最新的流水号放在列表的最下方),所以找最新的流水号就是最列表最下方,如果保存在数组里,那就是找index值最大的那个元素。下面以重打发票(注:具体流程为先缴费,然后查询缴费历史,然后从缴费历史里找到最新的流水号,然后使用此流水号进行重打发票)为例对整个过程做详细的介绍:
首先,在缴费历史里找到需要关联的流水号并关联之,具体做法如下,
7.1以Tree View方式打开脚本并在对应事件的Page View里找到最新的流水号

        找到我们需要关联的流水号(这里为536dxwf0200051031000000)后,需要把它给关联,(因为返回的值是事后才知道的,且对于不同的电话号码,对应的返回值不同,所以对于这样的值是需要关联的。)具体做法是打开Server Response 页面并在Body里找到需要关联的流水号,然后选中此流水号并在右键弹出的菜单中使用Create Parameter关联之。

 


7.2单击是(Y)按钮,对应的脚本中会增加如下内容。

        单击View scrīpt 图标以scrīpt模式查看关联情况。

7.3到此为止脚本中多出如下代码段,下面对它做一定的分析:
web_reg_find("Text=缴费历史查询",
LAST);
// [WCSPARAM WCSParam_Text1 23 536dxwf0200051031000000] Parameter {WCSParam_Text1} created by Correlation Studio
web_reg_save_param("WCSParam_Text1",
"LB=formnum=",
"RB=\"",
"Ord=8",
"RelFrameId=1",
"Search=Body",
LAST);
//后面的内容为注释部分,说明流水号536dxwf0200051031000000已经关联并保存到WCSParam_Text1参数中。
        web_reg_save_param()为LoadRunner的保存参数所用的函数,其作用是将返回流水号保存到WCSParam_Text1参数中,以便使用不同的号码进行缴费历史查询出来的流水号能随着时间的变化流水号也跟着变化,而不是录制脚本时的536dxwf0200051031000000,这样可以避免在重打发票时不会报诸如此流水号不存在等类似错误信息。然而现在的问题是怎么将此流水号对应到重打发票对应的地方。另一个问题是,不是所有的号码缴费后查询到的流水号数量都和录制脚本时查询到的流水号相同,事实上每做一笔除查询类的操作都会有一个流水号。而我们关注的是怎么取到最新的缴费的流水号,下面详细介绍相关步骤。

5.1 修改web_reg_save_param()函数相关部分,很简单,把"Ord=8",改为"Ord=ALL",目的是找最TOP的那个参数值。

5.2 光保存和取参数还不够,我们需要把参数能正确传递到重打发票对应的地方,为此我采取的做法如下:
        在缴费历史事件脚本最前面定义两个变量,目的是为了将流水号以字符串的形式保存在变量里(因为LoadRunner不支持在web_submit_data()函数里直接使用变量):具体做法是:
char WCSParam_Text1Pram[50]; //保存取到的流水号
char WCSParam_Text1PramVal[50]; //保存以"Value=流水号"取到的流水号。


        将关联好的流水号存到变量里,在此的做法是在对应的web_submit_data()函数后添加如下代码段:
lr_message("WCSParam_text1:%s",lr_eval_string("{WCSParam_Text1}"));
//打印出关联的参数WCSParam_Text1的值。
sprintf(WCSParam_Text1Pram,"{WCSParam_Text1_%s}",lr_eval_string("{WCSParam_Text1_count}"));
//把取到流水号保存到WCSParam_Text1Pram里,具体形式为
sprintf(WCSParam_Text1PramVal,"Value=%s",lr_eval_string(WCSParam_Text1Pram));
//组合流水号和”Value=”并保存到WCSParam_Text1PramVal变量中。
lr_message("The value argument is : %s", WCSParam_Text1PramVal);
//打印出字符串变量WCSParam_Text1PramVal的值。

 

5.3 找到重打发票中响应的流水号,并把其中的"Value=536dxwf0200051031000000"替换成WCSParam_Text1PramVal,在这里总共有两处。

 

        到此为止,流水号的关联已经基本上处理完毕,下面我们执行脚本,来验证我们想要的是不是真的有效。(注,参数化的问题在本文中不做具体介绍)为了看到明显的效果,我们需要将日志的处理做简单设置。

        然后执行脚本,查看相关执行日志,可以得到类似下面得消息。

 

8.使用LoadRunner一些常用的注意事项:
Note1:VuGen仅能录制 Windows平台上的会话,但是,录制的Vuser脚本既可以在Windows 平台上运行,也可以在 UNIX 平台上运行。
通用 Vuser 函数和特定于协议的函数,它们共同构成了 LoadRunner API,并使Vuser能够直接与服务器通信。

Note2:用于运行Vuser脚本的C解释器仅支持ANSI C语言。它不支持 Microsoft对ANSI C的任何扩展。
通常情况下,可以将登录到服务器的活动录制到vuser_init部分中、将客户端活动录制到Actions部分中,并将注销过程录制到vuser_end部分中。

Note3:只能向Action部分(而不是init或end 部分)添加集合。
Note:不要从事务内部发送消息,因为这可能使事务执行时间变长,并扭曲事务结果。

Note4:如果使用日志运行时设置修改脚本的调试级别,则 lr_message、lr_output_message 和 lr_log_message 函数的行为将不会更改,它们将继续发送消息。

Note5:录制 Java Vuser 脚本时, Vuser 脚本中将不生成 lr_think_time 语句。

Note6:VuGen 新建参数,但不会自动替换任何在脚本中选定的字符串。

Note7:不要将参数命名为 unique,因为该名已被 VuGen 使用。

Note8:如果在常规运行时设置文件夹中将“错误处理”设置为“出现错误时仍继续”,则错误消息仍将被发送到输出窗口。

Note9:因为生成的服务器消息很长,而且日志记录会降低系统的运行速度,所以请仅为脚本中特定的代码块激活服务器消息日志记录功能。

Note10:启用“出现错误时仍继续”功能时,将覆盖 0 严重级别;即使发生数据库错误,也将继续执行脚本。然而,如果禁用了“出现错误时仍继续”功能,但将严重级别指定为 1,则当发生数据库错误时仍将继续执行脚本。

Note11:下列协议不是线程安全协议:Sybase-Ctlib、Sybase-Dblib、Informix、Tuxedo 和 PeopleSoft-Tuxedo。

Note12:对于支持树视图的协议(如“视图”菜单所示),在树视图中运行 Vuser脚本时, VuGen 将从 Vuser 脚本中的第一个图标开始运行该脚本。

Note13:要显示运行时查看器,必须安装 Microsoft Internet Explorer 4.0 或更高版本。
Note:Vuser 生成“结果摘要”报告时,事务时间可能会增加。Vuser 可以仅在从 VuGen 运行时才生成“结果摘要”报告。使用 Controller 运行 Web Vuser 脚本时, Vuser 不能生成报告。

Note14:当使用 Javascrīpt 和 VBscrīpt Vuser 时,在脚本中用到的 COM 对象必须完全的兼容。这使下列情况成为了可能:一个应用程序操纵另一个应用程序中的对象,或者公开对象以便操纵它们。

9.性能参数解析:
WEB资源参数

        每秒点击次数:中Vuser每秒向Web服务器提交的HTTP请求数,依据点击次数来评估Vuser产生的负载量。

        吞吐量:案运行过程中服务器上每秒的吞吐量。吞吐量的度量单位是字节,表示Vuser在任何给定的某一秒上从服务器获得的数据量,依据服务器吞吐量来评估Vuser产生的负载量。

        每秒HTTP响应数:中每秒从Web服务器返回的HTTP状态代码号(表示HTTP请求的状态,例如“the request was successful”、“the page was not found”)

        每秒下载页面数:每秒钟从服务器下载的网页数,依据下载的页面数来评估Vuser产生的负载量。

        每秒重试次数:中每秒钟内服务器尝试的连接次数,在下列情况下将重试服务器连接:初始连接未经授权、要求代理服务器身份验证、服务器关闭了初始连接、初始连接无法连接到服务器或者服务器最初无法解析负载生成者的IP地址。

        连接数:每个时间点上打开的TCP/IP连接数。

        每秒SSL连接数:每秒打开的新的以及重新使用的SSL连接数。当对安全服务器打开TCP/IP连接后,浏览器将打开SSL连接,因为新建SSL连接需要消耗大量的资源,所以应该尽量少地打开新的SSL连接。

网页细分图
        注意:由于要从客户端测定服务器时间,因此,如果发送初始HTTP请求到发送第一次缓冲这一段时间内网络性能发生变化,则网络时间可能会影响此测定。因此,所显示的服务器时间是一个估计值,可能不太精确。
DNS解析:显示使用最近的DNS服务器将DNS名称解析为IP地址所需的时间。“DNS 查找”度量是指示DNS解析问题或DNS服务器问题的一个很好的指示器。

        连接:显示与包含指定URL的Web服务器建立初始连接所需的时间。连接度量是一个很好的网络问题指示器。此外,它还可表明服务器是否对请求作出响应。

        第一次缓冲:显示从初始HTTP请求(通常为 GET)到成功收回来自Web服务器的第一次缓冲时为止所经过的时间。第一次缓冲度量是很好的Web服务器延迟和网络滞后指示器。注意:由于缓冲区大小最大为 8K,因此第一次缓冲时间可能也就是完成元素下载所需的时间。

        SSL握手:显示建立SSL连接(包括客户端 hello、服务器hello、客户端公用密钥传输、服务器证书传输和其他部分可选阶段)所用的时间,自此点之后,客户端与服务器之间的所有通信都将被加密。SSL握手度量仅适用于HTTPS通信。

        接收:显示从服务器收到最后一个字节并完成下载之前经过的时间。“接收”度量是很好的网络质量指示器(查看用来计算接收速率的时间/ 大小比率)。

        FTP验证:显示验证客户端所用的时间。如果使用FTP,则服务器在开始处理客户端命令之前,必须验证该客户端。“FTP 验证”度量仅适用于 FTP 协议通信。

        客户端时间:显示因浏览器思考时间或其他与客户端有关的延迟而使客户机上的请求发生延迟时,所经过的平均时间。

        错误时间:显示从发出HTTP请求到返回错误消息(仅限于HTTP错误)这期间经过的平均时间。

        系统资源(UNIX资源参数):
CPU utilization :CPU的使用时间百分比
Disk rate :磁盘传输速率
Paging rate :每秒钟读入物理内存或写入页面文件中的页数
Page-in rate :每秒钟读入到物理内存中的页数
Page-out rate :每秒钟写入页面文件和从物理内存中删除的页数
Collision rate :每秒钟在以太网上检测到的冲突数
Context switches rate :每秒钟在进程或线程之间的切换次数
Average load :上一分钟同时处于“就绪”状态的平均进程数
Swap-in rate :正在交换的进程数
System mode CPU utilization :在系统模式下使用CPU的时间百分比
User mode CPU utilization :在用户模式下使用CPU的时间百分比

网络监视参数

        网络延迟时间:源计算机与目标计算机(例如,数据库服务器和Vuser负载生成器)之间的整个路径的延迟。

        网络子路径时间:从源计算机到路径上每个节点的延迟。注意:从源计算机到每个节点的延迟是同时而又独立地度量的。因此,从源计算机到其中一个节点的延迟可能大于源计算机与目标计算机之间的整个路径上的延迟。

        网络段延:路径上每个段的延迟。

        验证网络是否是瓶颈:可以合并各种图来确定网络是否是瓶颈。例如,通过使用网络延迟时间图和运行Vuser图,可以确定Vuser的数量如何影响网络延迟。网络延迟时间图指示在方案运行期间的网络延迟。

数据库服务器

        User Calls :在每次登录、解析或执行时, Oracle 会分配资源(Call State 对象)以记录相关的用户调用数据结构。在确定活动时,用户调用与RPI调用的比指明了,因用户发往Oracle的请求类型而生成的内部工作量

        Total file opens :由实例执行的文件打开总数。每个进程需要许多文件(控制文件、日志文件、数据库文件)以便针对数据库进行工作

        Opened cursors current :当前打开的光标总数

        DB block changes :由于与一致更改的关系非常密切,此统计计算对SGA中所有块执行的、作为更新或删除操作一部分的更改总数。这些更改将生成重做日志项,如果事务被提交,将是对数据库的永久性更改。此统计是一个全部数据库作业的粗略指示,并且指出(可能在每事务级上)弄脏缓冲区的速率。

10.AIX操作系统机器性能瓶颈定义:
瓶颈定义
CPU bound : vmstat : when %user+%sys greater than 80%;
Disk I/O bound : vmstat : when %iowait greater than 40%(AIX4.3.3 or later);
Application disk bound :vmstat : when %tm_act greater than 70%;
Paging space low : lsps -a : when used paging space greater than 70% active;
Paging bound : iostat vmstat : paging logical volumes %tm_act greater than 30% of the I/O(iostat) and paging activity greater than 10* the number of CPUs(vmstat);
Thrashing : vmstat sar :rising page outs, CPU wait and run queue;

11.系统性能分析命令:
cpu : vmstat,iostat,topas,nmon,ps,sar,time,timex,netpmon,trace,trcrpt;
内存:vmstat,topas,nmon,ps,svmon,lsps,filemon,trace,trcrpt;
磁盘:iostat,topas,nmon,lvmstat,iostat -d, lvmstat, lsps,filemon,lsattr,lsdev;
网络:netstat,topas,nmon,entstat,nfsstat,ifconfig,iptrace,ipreport,trace,trcrpt;
监视CPU使用情况:vmstat 2 ; iostat -t 2 6;sar -P ALL 2 3;
监视内存使用情况: vmstat 2 10;ps aux;svmon -G;svmon -Pau 10;
监视I/O使用情况: iostat 5;sar -d 3 3;
监视网络使用情况: netstat -i ;netstat -m;netstat -v;

此文来源于51testing博客,转载请注明出处
原始链接:
http://www.51testing.com/?94273/action_viewspace_itemid_13778.html

22/2<12
精选软件测试好文,快来阅读吧~

精彩评论

  • hhjmark2000
    2008-1-11 15:57:05

    挺好的。谢谢

  • system_323
    2007-9-24 11:33:50

    收藏学习,谢谢兄弟

  • liushouwei
    2007-7-20 23:39:48

    很厉害啊!兄弟

  • lemon_hawk
    2007-6-28 10:08:04

    收藏学习

  • roy366
    2007-6-25 10:01:52

    iteration在哪里进行参数化呢?

  • ∮随风而去~
    2007-6-21 16:58:25

    哦~怎么让你这个小妮子做了沙发哦,看来我只有坐板凳了~
    完了,还是小板凳

  • musix
    2007-6-21 13:24:53

    说的很好,顶.............  很详细很具体,我学习LR才一个礼拜,有些功能还没有涉及到,谢谢板主的授教了

  • heyy2008
    2007-6-20 13:38:13

       呵呵,好复杂呀,不过 这些设置自己还没用到,还有待学习.
       不过还是受益蛮多,向作者学习

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号