注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

曹兆领的博客

有志者事竟成,破釜沉舟,百二秦关终属楚!

 
 
 

日志

 
 

LoadRunner学习笔记(转)  

2009-02-12 15:42:56|  分类: LoadRunner |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

事务(Transaction)是这样一个点,我们为了衡量某个action的性 能,需要在action的开始和结束位置插入这样一个范围,这就定义了一个transaction,LoadRunner 运行到该事务的开始点时,LoadRunner 就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在结果中会有反映。所以 LR 的事务添加操作就是把测试所需要关注的操作定义成事务告诉 LR,这个是我想要重点检测性能的操作。LR就会在运行过程中记录事务内操作的响应事件等性能

数据。并在 Analysis中以报告的形式给出统计结果。

lr_start_transaction(”SubmitBookData”);

/*中间代码部分*/

lr_end_transaction(”SubmitBookData”, LR_AUTO);

2.1.2 集合点(Rendezvous)  

集合点:是一个并发访问的点,在测试计划中,可能会要求系统能够承受1000人同 时提交数据,在LoadRunner中可以通过在提交数据操作前面加入集合点,这样当虚拟用户运行到提交数据的集合点时,LoadRunner 就会检查同时有多少用户运行到集合点,如果不到1000人,LoadRunner就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到1000 人时,LoadRunner 命令1000 人同时去提交数据,并发访问的目的。  

注意:集合点经常和事务结合起来使用,常放在事务的前面,集合点只能插入到 Action 部分,vuser_init和vuser_end 中不能插入集合点。集合点函数如下,参数不能加空格:lr_rendezvous(”SumitQueryData”); 加入集合点之后,在后面运行过程中可以看到VU的状态,会等待集合。  

2.1.4 IP Spoofer(IP 欺骗)  

LoadRunner允许运行的虚拟用户使用不同的IP 访问同一网站,这种技术称为“IP 欺骗”。  

启用该选项后,场景中运行的虚拟用户将模拟从不同的IP 地址发送请求。该选项非常的有用。注意:IP Spoofer 在连接Load Generators 之前启用。要使用IP 欺骗,各个Load Generator 机器必须使用固定的IP,不能使用动态IP(即DHCP)。  

IP Wizard工具,添加一个局域网内的IP段。添加后重启,在Win2k下使用Ipconfig/all查看到很多虚拟的IP,最后要在Controller里面选择enable ip spoofer.  

2.1.5(Text/Image)检查和 contents check 点  

对于查询类的脚本,一定要添加检查点,以保证在测试时结果的正确性.因为LR只要 检测到网页的响应,就认为是pass而并不管当前网页内容的正确性.在进行压力测试时,为了检查Web服务器返回的网页是否正确,VuGen允许我们插入 Text/Imag 检查点,这些检查点验证网页上是否存在指定的Text或者Image,还可以测试在比较大的压力测试环境中,被测的网站功能是否保持正确。检查点的含义和 WinRunner 中的检查点功能基本上一致,这里就不再说了.

比如登录,我要测试200人同时登录,  

但是我的login.jsp里面没有正确的关闭数据库的连接,  

导致登录100人后,建立了100个数据库连接,  

第101人一个人登录的时候,由于超出数据库连接的最大数,  

所以,jsp程序抛出了一个数据库异常。  

但是页面的走向是正确的,所以loadrunner会认为程序是正确执行的,但是事实却并非如此。  

2.1.6 LR 脚本复用问题  

LR的测试脚本有很好的复用性,参数化后的脚本,在应用没什么大的变化的情况下,一直是可以用的。甚至你在A服务器录制的脚本,如果做测试的时候,需要转移到B服务器上,你只需要用查找替换的功能将A服务器的IP地址换成B服务

2.1.7 理解 Correlation(关联)

关联是用来解决脚本中存在的动态数据问题的.在7.8中,当你回放一次后,LR会自动录找你录制的时候和回放时候的差别,找出动态数据,并作成参数。

理解web_reg_save_param函数,  

int web_reg_save_param (const char *ParamName, , LAST);

第一部分:参数名字,用双引号括起,逗号分开;  

第二部分:List of Attributes,包括:LB、RB、RelFrameID、Ord、Search、SaveOffset、

SaveLen等,  

第三部分:LAST,结束标志。

左边界,右边界到底是个什么概念?  

LB是左边界,要查找的字符串左面的边界值,即位于查找字符串的最左边的字符串,RB是右边界,要查找的字符串右面的边界值,即位于查找字符串的最右边的字符串,比如说吧,程

Search是指查找范围,就是说在哪里查找这些值,可以取这样几个值,我们一般设为ALL,

Body等即可。  

Headers (Search only the headers),  

Body (search only Body data, not headers),  

Noresource (search only the html body, excluding all headers and resources),  

ALL (search Body and headers). The default value is ALL.  

RelFrameID: The hierarchy level of the HTML page relative to the requested URL.

一般取1

ORD: This parameter, also known as Instance, indicates the ordinal or instance of  

the match. 一般取 1  

一般把系统的那些都关掉,定义自己的,只是有的时候,它不能自动关联,就

干脆手工作了。需要关联的地方:一般是在有主键,不允许记录重复,和一些主程序中 传递过来的参数,在后面要用到等情况才使用关联的,你可以先执行一遍,如果有些地方不允许重复,参数值无效,就会出错的,根据错误提示你可以判断出来,就 知道需要关联了。一般需要关联的不多,我现在遇到的就是进程号,以及表的主键。

以下是一个例子讲解LR,呵呵!

2. 1. 8 以录制 Web(Http/Html)协议为例讲述一下 LR 的脚本的录制  

LR的脚本是C语言代码,LR有自己的一整套函数接口,可以供外部调用,在 VUGen里面敲Lr_就可以看到了。Web(Http/Html)脚本本身分INIT,ACTION,END三部分,各部分的解释:INIT部分可以理 解为初始部分,ACTION可以理解为事务部分,也是测试的主体,END是退出结束。重复的时候,仅重复action部分。我们一般把登录部分放在 init,退出放到end,只会执行一次,或者有的时候,各部分反复的次数不一样,分成多个action,可以单独设定反复次数。(如果需要在登陆操作设 集合点,那么登陆操作也要放到Action 中,因为vuser_init 中不能添加集合点)  

脚本里面有 2 个函数,解释一下:1.几个函数的解释:  

1) int web_url (const char *Name, const char * url,  

[EXTRARES, ,] LAST ;  

这个函数 load 指定的web 页面 . *Name:页面的name; url:页面的url,Resource:指示the URL 是否是一个资源。0,不是,1, RecContentType:录制脚本过程中,Header 响应的类型,e.g. text/html,  

application/x- javascrīpt Referer – 参考 web 页的 the URL Snapshot - snapshot 文件名(扩展名inf), correlation 的时候要的。 Mode – 录制的级别: HTML or HTTP Last- 属性列表的结束标志。


名词方面的解释     迭代(Iterate)设计,或者我们称之为增量(Incremental)设计的思想和XP提倡的Evolutionary Design有异曲同工之妙。注意:1、 参数类型:在创建参 数的时候,我选择了参数类型为File。参数类型共有9 种,现在来简单介绍一下所有的参数类型以及意义。1.1、   DateTime:在需要输入日期/时间的地方,可以用 DateTime 类型来替代。其属性设置也很简单,选择一种格式即可。当然也可以定制格式。1.2、   Group Name:很少用到。在实际运行中,LoadRunner 使用该虚拟用户所在的Vuser Group 来代替。但是在 VuGen 中运行时,Group Name将会是None。1.3、   Load Generator Name :在实际运行中, LoadRunner   使用该虚拟用户所 在LoadGenerator   的机器名来代替。1.4、   Iteration Number :在实际运行中,LoadRunner 使用该测试脚本当前循环的次数来代替。1.5、   Random Number:随机数。很简单。在属性设置中可以设置产生随机数的范围。1.6、   Unique Number:唯一的数。在属性设置中可以设置第一个数以及递增的数的大小。注意:使用该参数类型必须注意可以接受的最大数。例如:某个文本框能接受的最 大数为99。当使用该参数类型时,设置第一个数为 1,递增的数为1,但100   个虚拟用户同时运行时,第100   个虚拟用户输入的将是 100,这样脚本运行将会出错。这里说的递增意思是各个用户取第一个值的递增数,每个用户相邻的两次循环之间的差值为 1。举例说明:假如起始数为 1,递增为 5,那么第一个用户第一次循环取值 1,第二次循环取值 2;第二个用户第一次循环取值为 6,第二次为 7;依次类推。1.7、   Vuser ID:设置比较简单。在实际运行中,LoadRunner 使用该虚拟用户的 ID   来代替,该 ID   是由 Controller 来控制的。但是在 VuGen 中运行时,Vuser ID   将会是 –1。1.8、   File:需要在属性设置中编辑文件,添加内容,也可以从现成的数据库中取数据1.9、   User Defined Function:从用户开发的 dll 文件提取数据。

1、 负载生成器:  

负载生成器是用来模拟生成虚拟用户的。  

根据经验,每生成一个虚拟用户,需要花费负载生成 器大约 2M 的内存空间。通常运行 controller的主机很少用作负载生成器。负载生成器的工作多由其他装有 LR Agent的PC 机来担任。如果负载生成器内存的使用率大于了 70%,负载生成器就会变成系统的瓶颈,导致性能测试成绩下降。这种问题需要添加负载生成器来解决。一台 512M内存的 PC 机大约可以生成 80 个左右的负载,而一台 256M 内存的 PC 机大约可以生成50到 60 个左右的负载。  

2、 运行[时间]在加压完成后:  

当“运行[时间]在加压完成后”设置了以后,原本定义的运行时设置中的迭代次数就 失效了。或者说加压 “持续时间”的优先级要高于“运行时设置”。比如当一个脚本设置了运行时设置中的迭代次数为 10 次,在“持续时间”中设置加压持续时间为 30分钟。当真正运行时,脚本迭代10 次后仅花费了20分钟,但是持续时间设了30 分钟,因此它不能停下来,还会继续迭代。到最后脚本实际迭代的次数就不止 10次了。


LR 对服务器资源的监视

LR只能监视它支持的服务器的资源,它支持大部分常见的服务器。  

System Resource:包括windows平台,Unix平台等  

Web Server:包括Apache、IIS、Sun的iplanet等  

Application server:包括Weblogic、WebSphere等  

Database server:包括DB2,Oracle,Sql server,Sybase等  

Java: ejb,J2ee等,需要一个ejbdetector.jar文件  

1.对Windows(Win2k server)的监视:  

对windows的监视相对比较简单,监视前首先需要用有管理员权限的帐号连接被监

server,例如:net use \\qa-test /user:donny ,输入密码。然后就可以添加计数器,

比较常用的计数器有:  

Memory:Available Mbytes 物理内存的可用数(单位 Mbytes)至少要有10% 的物理内存值  

Processor:%Processor Time CPU 使用率。这是查看处理器饱和状况的最佳计数器。显示所有 CPU 的线程处理时间。如果一个或多个处理器的该数值持续超过 90%,则表示此测试的负载对于目前的硬件过于沉重。为多处理器服务器添加该计数器的 0 到 x 个实例。  

Processor Queue Length:是指处理列队中的线程数,小于2。处理器瓶颈会导致该值持续大于2。

Context Switches/sec:如果切换次数到5000*CPU个数和10000*CPU个数中,说明它忙于切换线程  

Network Interface:Bytes Total/sec 为发送和接收字节的速率,包括帧字符在内。判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽比较。  

SQL Server2000:%Processor Time,CPU 使用率  

General Statistics,Logins/sec,这是每秒登录到 SQL Server 的计数。  

SQL Statistics: Batch Requests/sec,每秒收到的 Transact-SQL 命令批数。这一统计信息受所有约束(如I/O、用户数、高速缓存大小、请求每秒收到的 Transact-SQL 命令批数。这一统计信息受所有约束(如I/O、用户数、高速缓存大小、请求的复杂程度等)影响。

批请求数值高意味着吞吐量很好。

2.对Unix(Linux等)的监视,需要配置相应的服务器端,可以查看帮助文件,这里就只举

一个例子了。  

1) LoadRunner 如何监控Apache,需要修改apache的配置文件httpd.conf.


SetHandler server-status  

Order deny,allow  

Allow from all  

Allow from .your-domain.com  


把这节加在httpd.conf里面, restart apache即可。

页面分解  

如果某个transaction的时间过长,为了分析问题出在哪里?就可以利用页面分解了,它可

以把每个页面分解成:

DNS解析时间:浏览器访问一个网站的时候,一般用的是域名,需要dns服务器把这个域名解析为IP,这个过程就是域名解析时间,如果我们在局域网内直接使用IP访问的话,就没有这个时间了。  

Connection:解析出Web Server 的IP地址后,浏览器请求被送到了Web Server,然后浏览器和Web Server 之间需要建立一个初始化HTTP连接,服务器端需要做2件事:一是接收请求,二是分配进程,建立该连接的过程就是connection时间。  

First Buffer:建立连接后,从Web Server 发出第一个数据包,经过网络传输到客户端,浏览器成功接受到第一字节的时间就是First Buffer。这个度量时间不仅可以表示Web Server 的延迟时间,还可以表示出网络的反应时间。  

Receive:从浏览器接收到第一个字节起,直到成功收到最后一个字节,下载完成止,这段时间就是receive时间。  

其他的时间还有SSL Handshaking(SSL 握手协议,用到该协议的页面比较少)、

ClientTime(请求在客户端浏览器延迟的时间,可能是由于客户端浏览器的think time 或者客户端其他方面引起的延迟)、Error Time(从发送了一个HTTP 请求,到Web Server发送回一个HTTP 错误信息,需要的时间)

为了确认问题缘由到底是服务器还是网络,选择“Time to First Buffer(缓冲器) Breakdown”发现network时间比Server时间要高的多,从而确定问题是network引起的。

  评论这张
 
阅读(463)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017