LoadRunner入门总结

来源:互联网 发布:网络歌曲大庆小芳 编辑:程序博客网 时间:2024/05/08 12:42

一、前言

具体使用的经验不多,说不上经验谈,只是将自己最近收集的loadRunner资料和自己所遇到过的问题,写成一份文档,方便后人。


 二、LoadRunner的安装

详情请看http://blog.csdn.net/youyudehexie/article/details/7339225


三、脚本录制于验证部分

1.LR8.1版本,只能使用IE6测试,如果你的机器没有IE6,那请你下载LR11,如何安装IE6?如果你能成功卸载IE7和IE8那么你的IE就变成IE6

    web_url("xl7bho.ini",

        "URL=http://media.info.client.xunlei.com/xl7bho.ini",

        "Resource=1",

        "RecContentType=application/octet-stream",

        "Referer=",

        "Snapshot=t1.inf",

        LAST);

你的脚本轻易地发现类似这种脚本,那就恭喜你了,你的电脑相当不干净,不适合测试,像迅雷和360等软件都会在我们浏览网页的时候,会收集我们的信息,发到他们的服务器,具体什么用途不详,遇到脚本上有类似的语句,记得删除,要不然会影响我们脚本运行。

 

四、如何模拟并发用户和在线用户?

老板需要并发用户XX多少?那么该如何实现并发用户呢和在线用户呢?我对LR这个软件理解不深,大概跟集中点相关,在执行某个链接访问的时候,在此访问前设置集中点,让虚拟用户同时集中足够的人数后,在访问来达到我们并发访问服务器的目的。另外附上,网上一篇关于并发用户的讨论

 

五、LR模拟虚拟用户只有1000???

LR只能模拟1000个用户,怎么能模拟2000呢?我也百度了一下,貌似没什么答案,具体专业的做法我也不太清楚,不过有个比较笨的办法,开两台电脑跑LR,1000+1000 ??=2000,请搜索负载加成器,这东西能帮助你,可以让通过负载加成器的帮助让其他电脑加起来一起跑虚拟用户。

 

另附:关于并发测试方面的讨论

看到51上三个高手Zee, 大漠飞鹰,xingcyx的一场非常精彩的关于并发用户数和集合点的讨论,很有意义。如果对这两个概念不清楚的朋友,一定要仔细领悟了。 
故事开始于xingcyx的一番话: 
声明:以下的问答是我根据实际工作经验和通过各种途径得到的信息而整理的,其回答内容主要代表我个人观点,并非标准答案,读者如有不同意见,欢迎批评指教。 
Q:并发用户数和集合点有必然联系吗?在性能测试中必须使用集合点来测试吗? 
A:并发用户数,顾名思义,就是同时操作的用户,这里的“操作”可以指对系统真正的操作,也可以只是连接(此时通常叫作“并发连接数”),而集合点是一种特殊情况下的并发,多用于测试系统在瞬间加压的表现。因此,并发用户数和集合点有联系,但并非必然的联系,在测试并发用户的性能测试场景中,可以不必设置集合点,这将视测试目标和测试策略而定。 
Q:不设置集合点的测试,能代表是“并发”操作吗? 
A:有这样一种说法,设置集合点是为了确保“严格意义上”的并发,其实从本质上看,这主要是一个看问题的粒度大小的问题。集合点的作用是通过工具的控制,确保一个请求严格的“同时”从前台提交到后台。可是如果微观地看,是不存在严格意义上的并发的,即使在客户端通过设置集合点的方式将100个请求同时提交到后台,经过网络上的传输消耗,可能它们并不是同时到达的,而即便100个请求同时到达服务器端,受到中间件和应用系统、数据库的各种连接池、缓冲区, CPU处理队列等的限制,也可能在服务器端产生等待的。因此,严格意义上的“并发”可以说是不存在的,我们需要做的是在可以接受的粒度范围内取得一个最佳的平衡点,站在这个平衡点的层面上去看待“并发”这个问题。 
性能测试无非有两个目的,一是评测,二是调优。 
在以评测为目的的性能测试中,用户更关心的是业务上的并发,也就是真实业务场景的并发情况,这种情况下只要按照业务操作的模式去设置场景就可以了,并不需要设置集合点。 
集合点是一种特殊情况下的并发,通常是在以调优为目的的性能测试中才会用得到,目的是有针对性地对某个可能存在性能问题的模块施压,以便找到性能瓶颈。 
集合点在我实际的测试过程中用得并不多。 
Zee: 
关于集合点,我一直觉得没有什么可争议的,这两天看到几个帖子在说这个东西。有一点我想大家都是认同的:集合是相对的集合。 
集合是在产生负载的机器上的集合。如果考虑网络,中间件等等的因素。到服务器肯定不会是同一时间点,那于是就有人希望能更接近在服务器端实现并发的操作。认为这才是真正的并发。 
我觉得首先要做的是分析应用系统,到底你想做的是什么。 
比如说,你想让某个URL能达到1000个同时请求的目的。这样的目标就比较明确了。 
而在讨论集合点的时候,大家很少拿具体的东西来举个例子。这样有点说不清楚。要想达到并发。我觉得应该更具体的分析应用。再来定下目标来做。而不是一直在讨论LR如何能实现。 
Xingcyx: 
因为在实践中,我经常会碰到这样的情况: 
测试需求说,该系统应支持200个并发用户。 
那么我们就开始测,录制好脚本,下一步就是在场景中执行了,在控制台中设置某脚本并发用户数为200,测试结果为通过或未通过。此时争议就来了:这200个用户的脚本如果执行通过,测试结果可以接受,是否可以说这个系统支持了200个并发呢? 
大漠飞鹰: 
测试前肯定要了解需求,或者说是测试目的。 
就说明“该系统应支持200个并发用户。”, 这种需求严格意义上来说是不合格的需求,因为描述不够清晰,过于模糊等。 
当然,在实际中,这类需求到了我们测试人的手里也是常有的,一般就当普遍的情况来出来。 
比如,web系统,就按2/5/8,或者2/5/10来处理,如果能通过就pass,否则就让开发人员调优。 
Zee: 
从集合点到并发数的确定。我觉得这其中的转换最主要的地方在于分析业务。 
比如用户说了:要求200个用户并发。 
那要问清楚的就是,200个用户是个什么样的比例,有多少人在干这个,有多人在干那个,按百分比,用不同的脚本来跑。 
那再来想一下客户。他关心的是200个用户在服务器上同时点同一个URL或者某一个相同的资源?这个客户我想大多不会关心。而他想要的就是我有200个用户在线的时候。响应时间不至于让人不可接受。至于多少才不可接受。按平常人的心理承受能力来衡量就可以了。再或者有其他的说法,就是200人同时点同一 URL或者请求同一资源,我想可以通过计算来增加vuser的数量或者集合呀,或者其他的方法来努力的向这个目标靠近。 
如果说非要在服务器上这个时间并发这么多的用户。我觉得只能尽量把它缩小到一个时间段内。而这样做我觉得并不是从分析业务出发的, 
Xingcyx: 
楼上说的是最常见的一种情况,在这种测试需求下,我会设置一个混合场景来测试,也就是按照做不同事情的用户的百分比去设置。 
但会有另外一些时候,并不是一个实际的应用系统,可能是一个开发平台,或者工作引擎等,它涉及的性能的概念会更偏向底层一些,这个时候可能就不是像一般的应用系统那样,设置一个混合场景来测试那么简单了。 
大漠飞鹰: 
一般说的并发数指的是业务并发,而不是服务器端得并发数。


六、结果分析与数值背后的意义

Vusers:

提供了生产负载的虚拟用户运行状态的相关信息,可以帮助我们了解负载生成的结果。

Rendezvous(负载过程中集合点下的虚拟用户):

当设置集合点后会生成相关数据,反映了随着时间的推移各个时间点上并发用户的数目,方便我们了解并发用户的变化情况。

Errors(错误统计):

通过错误信息可以了解错误产生的时间和错误类型,方便定位产生错误的原因。

Errors per Second(每秒错误):

了解在每个时间点上错误产生的数目,数值越小越好。通过统计数据可以了解错误随负载的变化情况,定为何时系统在负载下开始不稳定甚至出错。

Average Transaction ResponseTime(平均事务响应时间):

反映随着时间的变化事务响应时间的变化情况,时间越小说明处理的速度越快。如果和用户负载生成图合并,就可以发现用户负载增加对系统事务响应时间的影响规律。

Transactions per Second(每秒事务):

TPS吞吐量,反映了系统在同一时间内能处理事务的最大能力,这个数据越高,说明系统处理能力越强。

Transactions Summary(事务概要说明)

统计事物的Pass数和Fail数,了解负载的事务完成情况。通过的事务数越多,说明系统的处理能力越强;失败的事务数越小说明系统越可靠。

Transaction performanceSummary(事务性能概要):

事务的平均时间、最大时间、最小时间柱状图,方便分析事务响应时间的情况。柱状图的落差越小说明响应时间的波动小,如果落差很大,说明系统不够稳定。

Transaction Response TimeUnder Load(用户负载下事务响应时间):

负载用户增长的过程中响应时间的变化情况,该图的线条越平稳,说明系统越稳定。

Transactions Response time(事务响应时间百分比):

不同百分比下的事务响应时间范围,可以了解有多少比例的事物发生在某个时间内,也可以发现响应时间的分布规律,数据越平稳说明响应时间变化越小。

Transaction Response Time(各时间段上的事务数):

每个时间段上的事务个数,响应时间较小的分类下的是无数越多越好。

Hits per Second(每秒点击):

当前负载重对系统所产生的点击量记录,每一次点击相当于对服务器发出了一次请求,数据越大越好。

Throughput(吞吐量):

系统负载下所使用的带宽,该数据越小说明系统的带宽依赖就越小,通过这个数据可以确定是不是网络出现了瓶颈。

HTTP Responses per Second(每秒HTTP响应):

每秒服务器返回各种状态的数目,一般和每秒点击量相同。点击量是客户端发出的请求数,而HTTP响应数是服务器返回的响应数。如果服务器的响应数小于点击量,那么说明服务器无法应答超出负载的连接请求。

Connections per Second(每秒连接):

统计终端的连接和新建的连接数,方便了解每秒对服务器产生连接的数量。同时连接数越多,说明服务器的连接池越大,当连接数随着负载上升而停止时,说明系统的连接池已满,通常这时候服务器会返回504错误。需要修改服务器的最大连接来解决该问题。


七、问题分析

分析原则:

    •具体问题具体分析(这是由于不同的应用系统,不同的测试目的,不同的性能关注点)

    •查找瓶颈时按以下顺序,由易到难。

 服务器硬件瓶颈-〉网络瓶颈(对局域网,可以不考虑)-〉服务器操作系统瓶颈(参数配置)-〉中间件瓶颈(参数配置,数据库,web服务器等)-〉应用瓶颈(SQL语句、数据库设计、业务逻辑、算法等)

     注:以上过程并不是每个分析中都需要的,要根据测试目的和要求来确定分析的深度。对一些要求低的,我们分析到应用系统在将来大的负载压力(并发用户数、数据量)下,系统的硬件瓶颈在哪儿就够了。

    •分段排除法很有效

分析的信息来源:

              •1根据场景运行过程中的错误提示信息

              •2根据测试结果收集到的监控指标数据

7.1错误提示分析

分析实例:

 Error: Failed to connect to server"10.10.10.30:8080": [10060] Connection

   Error: timed out Error:Server "10.10.10.30" has shut down the connection prematurely

分析:

   A、应用服务死掉。(小用户时:程序上的问题。程序上处理数据库的问题)

   B、应用服务没有死(应用服务参数设置问题)

   例:在许多客户端连接Weblogic应用服务器被拒绝,而在服务器端没有错误显示,则有可能是Weblogic中的server元素的AcceptBacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25%

•C、数据库的连接(1、在应用服务的性能参数可能太小了2、数据库启动的最大连接数(跟硬件的内存有关))

2  Error: Page download timeout (120seconds) has expired

分析:可能是以下原因造成

     •A、应用服务参数设置太大导致服务器的瓶颈

     •B、页面中图片太多

     •C、在程序处理表的时候检查字段太大多

7.2监控指标数据分析

 

1.最大并发用户数:

 

   应用系统在当前环境(硬件环境、网络环境、软件环境(参数配置))下能承受的最大并发用户数。

在方案运行中,如果出现了大于3个用户的业务操作失败,或出现了服务器shutdown的情况,则说明在当前环境下,系统承受不了当前并发用户的负载压力,那么最大并发用户数就是前一个没有出现这种现象的并发用户数。

如果测得的最大并发用户数到达了性能要求,且各服务器资源情况良好,业务操作响应时间也达到了用户要求,那么OK。否则,再根据各服务器的资源情况和业务操作响应时间进一步分析原因所在。

 

2.业务操作响应时间:

 

   分析方案运行情况应从平均事务响应时间图和事务性能摘要图开始。使用“事务性能摘要”图,可以确定在方案执行期间响应时间过长的事务。

   细分事务并分析每个页面组件的性能。查看过长的事务响应时间是由哪些页面组件引起的?问题是否与网络或服务器有关?

   如果服务器耗时过长,请使用相应的服务器图确定有问题的服务器度量并查明服务器性能下降的原因。如果网络耗时过长,请使用“网络监视器”图确定导致性能瓶颈的网络问题

 

3.服务器资源监控指标:

 

   内存:

       1UNIX资源监控中指标内存页交换速率(Paging rate),如果该值偶尔走高,表明当时有线程竞争内存。如果持续很高,则内存可能是瓶颈。也可能是内存访问命中率低。

       2Windows资源监控中,如果Process\Private Bytes计数器和Process\Working Set计数器的值在长时间内持续升高,同时Memory\Availablebytes计数器的值持续降低,则很可能存在内存泄漏。

 

 内存资源成为系统性能的瓶颈的征兆:

      很高的换页率(highpageout rate);

      进程进入不活动状态;

      交换区所有磁盘的活动次数可高;

      可高的全局系统CPU利用率;

      内存不够出错(outof memory errors)

 

处理器:

      1、 UNIX资源监控(Windows操作系统同理)中指标CPU占用率(CPU utilization),如果该值持续超过95%,表明瓶颈是CPU。可以考虑增加一个处理器或换一个更快的处理器。如果服务器专用于SQLServer,可接受的最大上限是80-85% ,合理使用的范围在60%至70%。

      2、 Windows资源监控中,如果System\Processor Queue Length大于2,而处理器利用率(Processor Time)一直很低,则存在着处理器阻塞。

 

CPU资源成为系统性能的瓶颈的征兆:  

      很慢的响应时间(slowresponse time)

      CPU空闲时间为零(zeropercent idle CPU)

      过高的用户占用CPU时间(high percent user CPU)

      过高的系统占用CPU时间(high percent system CPU)

      长时间的有很长的运行进程队列(large run queue size sustained over time)

  磁盘I/O:

      1、 UNIX资源监控(Windows操作系统同理)中指标磁盘交换率(Disk rate),如果该参数值一直很高,表明I/O有问题。可考虑更换更快的硬盘系统。

      2、 Windows资源监控中,如果Disk Time和Avg.Disk Queue Length的值很高,而Page Reads/sec页面读取操作速率很低,则可能存在磁盘瓶径。

 

I/O资源成为系统性能的瓶颈的征兆:

      过高的磁盘利用率(highdisk utilization)

      太长的磁盘等待队列(largedisk queue length)

      等待磁盘I/O的时间所占的百分率太高(large percentage of time waiting for disk I/O)

      太高的物理I/O速率:large physical I/O rate(not sufficient in itself)

      过低的缓存命中率(lowbuffer cache hit ratio(not sufficient in itself))

      太长的运行进程队列,但CPU却空闲(large run queue with idle CPU)

 

4.数据库服务器:

  SQLServer数据库:

    1、 SQLServer资源监控中指标缓存点击率(Cache Hit Ratio),该值越高越好。如果持续低于80%,应考虑增加内存。

    2、如果FullScans/sec(全表扫描/秒)计数器显示的值比1或2高,则应分析你的查询以确定是否确实需要全表扫描,以及SQL查询是否可以被优化。

    3、 Number ofDeadlocks/sec(死锁的数量/秒):死锁对应用程序的可伸缩性非常有害,并且会导致恶劣的用户体验。该计数器的值必须为0。

    4、 LockRequests/sec(锁请求/秒),通过优化查询来减少读取次数,可以减少该计数器的值。

Oracle数据库:

    1、如果自由内存接近于0而且库快存或数据字典快存的命中率小于0.90,那么需要增加SHARED_POOL_SIZE的大小。

   快存(共享SQL区)和数据字典快存的命中率:

   select(sum(pins-reloads))/sum(pins)from v$librarycache;

   select(sum(gets-getmisses))/sum(gets)from v$rowcache;

   自由内存:select* from v$sgastat where name=’free memory’;

   2、如果数据的缓存命中率小于0.90,那么需要加大DB_BLOCK_BUFFERS参数的值(单位:块)。

缓冲区高速缓存命中率:

    selectname,value from v$sysstat where name in ('db block gets’, 'consistentgets','physical reads') ;

    Hit Ratio =1-(physical reads / ( db block gets + consistent gets))

   3、如果日志缓冲区申请的值较大,则应加大LOG_BUFFER参数的值。

    日志缓冲区的申请情况:

    selectname,value from v$sysstat where name = 'redo log space requests' ;

   4、如果内存排序命中率小于0.95,则应加大SORT_AREA_SIZE以避免磁盘排序。

  内存排序命中率:

    selectround((100*b.value)/decode((a.value+b.value), 0, 1, (a.value+b.value)), 2)fromv$sysstat a, v$sysstat b where a.name='sorts (disk)' and b.name='sorts (memory)'

   注:上述SQLServer和Oracle数据库分析,只是一些简单、基本的分析,特别是Oracle数据库的分析和优化,是一门专门的技术,进一步的分析可查相关资料。

 

PS:

造成HTTP-500错误,可能存在的原因
1、运行的用户数过多,对服务器造成的压力过大,服务器无法响应,则报HTTP500错误。 

减小用户数或者场景持续时间,问题得到解决。

2、该做关联的地方没有去做关联,则报HTTP500错误。进行手工或者自动关联,问题得到解决。

3、录制时请求的页面、图片等,在回放的时候服务器找不到,则报HTTP500错误,若该页面无关紧要,则可以在脚本中注释掉,问题将会得到解决。例如:有验证码的情况下,尽管测试时已经屏蔽了,但是录制的时候提交了请求,但回放的时候不存在响应。

4、参数化时的取值有问题,则报HTTP500错误。可将参数化列表中的数值,拿到实际应用系统中进行测试,可排除问题。

5、更换了应用服务器(中间件的更换,如tomcat、websphere、jboss等),还是利用原先录制的脚本去运行,则很可能报HTTP500错误。因为各种应用服务器处理的机制不一样,所录制的脚本也不一样,解决办法只有重新录制脚本。

6、Windows xp2与ISS组件不兼容,则有可能导致HTTP500错误。对ISS组件进行调整后问题解决。

7、系统开发程序写的有问题,则报HTTP500错误。例如有些指针问题没有处理好的,有空指针情况的存在。修改程序后问题解决。

原创粉丝点击