发布新日志

  • Loadrunner关联(三)手动关联(转)

    2009-11-12 15:13:01


    Loadrunner关联(三)手动关联

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

            第一步:录制测试脚本,录制二遍

            第二步:使用WinDiff工具找出两次脚本的不同,判断是否需要进行关联

            第三步:确定插入关联的位置
            第四步:在VIEW TREE中使用web_reg_save_param函数手动建立关联
            第五步:将脚本中有用到关联的数据,用参数代替

            第六步:验证关联的正确性

            下面详细介绍:

            第一步:

            录制测试脚本,录制二遍

            这一步就不用多说了,相同的操作,录制两份,分别保存

            第二步:

            使用WinDiff工具协助找出需要关联的数据
            1. 在第二份脚本中,点选VuGen的【Tools】>【Compare with Vuser…】,并选择第一份脚本。
            2. 接着WinDiff会开启,同时显示二份脚本,并显示有差异的地方。WinDiff会以一整行黄色标示有差异的脚本,并且以红色的字体显示真正差异的文字。(假如没看到红色字体,请点选【Options】>【View】>【Show Inline Differences】)。

            查看二份脚本中差异的部份,每一个差异都可能是需要做关联的地方。

            注意:lr_thik_time部分的差异可以忽略

            找到不同的部分后,复制,然后打开Recording Log或是Generation Log,按Ctrl+F,在查找窗口中粘贴差异部分的内容,点击查找找到后,查看该部分的信息,确认是客户端的请求信息还是服务器回应的信息

            如果出现在$$$$$$ Request Header For Transaction With Id 3 Ended $$$$$$这个部分,那证明是客户端发出的请求,这里是不需要做关联的

            一般做的关联都是出现在****** Response Header For Transaction With Id 7 ******和****** Response Body For Transaction With Id 7 ******中的部分。

            在找到这个信息后,需要记录如下信息:

            a.记录这个不同数据之前的内容和之后的内容

            b.记录这个不同数据出现的位置,是Header还是Body

            第三步:

            确认插入关联的位置

            我们在日志中找到了两次脚本的不同点的位置,根据这个位置,我们再确定是在哪个请求之后产生的,也就是说要定位发生不同点的response是由哪个request产生的,找到了这个请求的函数位置,我们就知道要往哪里做关联了

            一般情况下关联函数写到发出请求的函数之前就可以了

            第四步:

            插入关联函数

            在插入关联函数前,我们先介绍关联函数web_reg_save_param

              一个web_reg_save_param函数的例子:
             web_reg_save_param ("sessionid",

                  "LB=Session_id:",

                  "RB=;",

                  "Search=Body",

                  LAST);

            在这里我们只介绍几个常用参数的含义

            语法: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。属性值不分大小写

            LB( Left Boundary ) : 返回信息的左边界字串。该属性必须有,并且区分大小写。

            RB( Right Boundary ): 返回信息的右边界字串。该属性必须有,并且区分大小写。

            Search : 返回信息的查找范围。可以是Headers,Body,Noresource,All(缺省)。该属性质可有可无。

            那么如何插入该关联函数呢?

            1.将vugun切换到 view tree 模式下

            2.在左边的列表中,找到在上一步发出请求的函数,点击“右键”

            选择“insert before”

            3.在弹出的“add step”对话框的“find function”中输入“web_reg_save_param”,点击“ok”

            在“parameter name”中输入,关联函数的名称,这里最好有含义,“sessionid”

            在“left boundary”中输入,刚才记录下的不同点字符串的左面的几个字符,定义左边界,Session_id:

            在“right boundary”中输入,刚才记录下的不同点字符串的右面的几个字符,定义右边界,;

            在“search in ”中,选择“body”

            点击“ok”

            4.回到脚本编辑模式下,查看该函数插入是否正确

            在发出请求的函数前应该看到:
             web_reg_save_param ("sessionid",

                  "LB=Session_id:",

                  "RB=;",

                  "Search=Body",

                  LAST);

            第五步:

            将脚本中有用到关联的数据,用参数代替

            如发出请求的参数如下,那么将原来服务器返回的动态值使用{ sessionid } 来替换:
               web_submit_form("login.php_2",

                  "Snapshot=t2.inf",

                  ITEMDATA,

                  "Name=login", "Value=wangjin", ENDITEM,

                  "Name=password", "Value=wangjin", ENDITEM,

                    "Name=Session_id","Value={ sessionid } ", ENDITEM,

                  "Name=Submit", "Value=Login", ENDITEM,

                  EXTRARES,

                  "URL=/media/images/border_bg_l.gif", ENDITEM,

                  "URL=/media/images/header_bg.gif", ENDITEM,

                  "URL=/media/images/th.gif", ENDITEM,

                  LAST);

            第六步:

            验证关联的正确性

            回放脚本,验证关联的正确性

  • Loadrunner关联(二)自动关联(转)

    2009-11-12 15:12:25

    自动关联包含两种机制:

            一种是loadrunner通过对比录制和回放时服务器响应的不同,而提示用户是否进行关联,用户可自己创建关联规则,这个功能可以方便的使我们获得需要关联的部分,但同时也存在一定的问题,如:自动关联所检测到的关联点不一定真的需要进行关联,这要我们更具实际情况进行判断;有些需要关联的动态数据自动关联无法找到,这是就需要做手动关联

            另一种是loadrunner自带的自动关联规则,在录制脚本时,会根据这些规则自动创建关联

            自动关联的步骤如下:

            1.开启自动关联选项

            刚才提到的两种关联机制,如果用户想使用loadrunner自带的关联规则创建关联,那么需要在【Recording Options】>【Internet Protocol】>【Correlation】中启用关联规则,选中“Enable correlation during recording”,当录制这些应用系统的脚本时,VuGen会在脚本中自动建立关联。也可以在【Recording Options】>【Internet Protocol】>【Correlation】中添加关联规则,达到自动关联的目的。

            如果需要在回放脚本时,loadrunner自动检测需要关联的部分,那么需要在【Tools】>【general options】>【Correlation】中选中“save correlation information during replay”和“show scan for correlations popup after replay of vuser”,当回放玩脚本后,会弹出Scan action for correlation窗口,进行关联点的搜索

            2.录制脚本

            录制脚本的过程在这里就不多说了

            3.回放脚本

            如果录制的脚本存在需要做关联的部分,那么在回放脚本时会出现错误

            4.系统自动弹出检测关联对话框,或手动启动关联检测对话框

            如果选择了【Tools】>【general options】>【Correlation】中的“save correlation information during replay”和“show scan for correlations popup after replay of vuser”,那么在回放脚本后会自动弹出“Scan action for correlation”窗口,点击“yes”进行自动查找

            如果没有选择上述设置,那么也可以按CTRL+F8启动关联自动搜索

            5.查看系统检测出的关联点进行关联设置

            如果在录制和回放中存在差异,loadrunner会在“Correlation Results”中列出需要做关联的内容,用鼠标点击一条需要做关联的内容,点击“Create Rule”,系统会显示获得当前数据的规则,点击“yes”,完成规则的创建,同时查看脚本中增加了一个web_reg_save_param函数

            也可以点击【Correlate】按钮创建关联,一笔一笔做,或是按下【Correlate All】让VuGen一次就对所有的数据建立关联。

            注意:由于Correlation Studio会找出所有有变动的数据,但是并不是所有的数据都需要做关联,所以不建议您直接用【Correlate All】。

            6.回放脚本检查关联的正确性

            创建好关联后,回放脚本检查关联的正确性

  • Loadrunner关联(一)什么时候需要关联(转)

    2009-11-12 15:11:00

    1.关联的含义

            关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,已变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法被称作关联。

            其实关联也属于一同特殊的参数化,只是与一般的参数化有些不同

            一般的参数化的参数来源于一个文件、一个定义的table、通过sql写的一个结果集等,但关联所获得的参数是服务器响应请求所返回的一个符合条件的、动态的值

            2.什么时候需要做关联

            要想弄清这个问题,我们首先要知道客户端与服务器端的请求与响应的过程

            过程说明:

            客户端发出获得登录页面的请求

            服务器端得到该请求后,返回登录页面,同时动态生成一个Session Id

            当用户输入用户名密码,请求登录时,该Session Id同时被发送到服务器端

            如果该Session Id在当前会话中有效,那么返回登录成功的页面,如果不正确则登录失败

            在第一次录制过程中loadrunner把这个值记录了下来,写到了脚本中,但再次回放时,客户端发出同样的请求,而服务器端再一次动态的生成了 Session Id,此时客户端发出的请求就是错误的,为了获得这个动态的Session Id我们这里用到了关联。

            所以我们得出结论:

            当客户端的某个请求是随着服务器端的相应而动态变化的时候,我们就需要用到关联

            当然我们在录制脚本时应该对测试的项目进行适当的了解,知道哪些请求需要用到服务器响应的动态值,如果我们不明确那些值需要做关联的话,我们也可以将脚本录制两遍,通过对比脚本的方法来查找需要关联的部分,但并不是说两次录制的所有不同点都需要关联,这个要具体情况具体分析

  • Error -26612: HTTP Status-Code=500 发生的可能情况(转)

    2009-11-12 15:09:42

    最近在测试一系统的时候,录制脚本没有错误,回放的时候总是出现如下错误:
    Action.c(6): Error -26612: HTTP Status-Code=500 (Internal Server Error) for "http://192.168.0.110:7001/logonConsole.do;jsessionid={JSESSIONID2}"

    造成HTTP-500错误,有朋友告诉我如下几个可能:

    1、运行的用户数过多,对服务器造成的压力过大,服务器无法响应,则报HTTP500错误。减小用户数或者场景持续时间,问题得到解决。

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

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

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

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

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

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

    查找后台日志发现报了很多0ra-01000错误,这是oracle达到最大游标参数值,google了下,最大原因可能是JDBC连接没关闭。最后查找weblogic连接池出了问题,很多连接没关闭。


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/testdict/archive/2009/04/16/4085262.aspx

  • load runner中发生错误Error -27979解决方法

    2009-09-02 12:19:58

    在录制时一切正常,而回放时提示类似如下错误:
    51Testing软件测试网rJ"t)j }I8Iq%M4F

     51Testing软件测试网C%gd$hU/Q"T.SX

    Action.c(41): Error -27979: Requested form. not found                                [MsgId: MERR-27979]
    :@!{+qkc,`XA0             Action.c(41): Web_submit_form. highest severity level was "ERROR",              0 body bytes, 0 header bytes                       [MsgId: MMSG-27178]"

    )St)K J.OII'j0 51Testing软件测试网;En0\c;_*G

     这时在tree view中看不到此组件的相关URL
     
    处理方法如下:
    1, 打开recording options,在internet protocol下的recording中选择recording levelHTML-based scrīpt,点击HTML Advanced,选择scrīpt typeA scrīpt containing explicit.即可。
    2, 选择使用URL_based scrīpt录制。
    3、重新录制即可。
  • LoadRunner分析结果图功能说明

    2009-08-31 16:26:04

    Transactions(用户事务分析)
    用户事务分析是站在用户角度进行的基础性能分析。

    1、Transation Sunmmary(事务综述)
    对事务进行综合分析是性能分析的第一步,通过分析
    测试时间内用户事务的成功与失败情况,可以直接判断出系统是否运行正常。

    2、Average Transaciton Response Time(事务平均响应时间)
    “事务平均响应时间”显示的是测试场景运行期间的每一秒内事务执行所用的平均时间,通过它可以分析测试场景运行期间应用系统的性能走向。
    例:随着测试时间的变化,系统处理事务的速度开始逐渐变慢,这说明应用系统随着投产时间的变化,整体性能将会有下降的趋势

    3、Transactions per Second(每秒通过事务数/TPS)
    “每秒通过事务数/TPS”显示在场景运行的每一秒钟,每个事务通过、失败以及停止的数量,使考查系统性能的一个重要参数。通过它可以确定系统在任何给定时刻的时间事务负载。分析TPS主要是看曲线的性能走向。
    将它与平均事务响应时间进行对比,可以分析事务数目对执行时间的影响。
    例:当压力加大时,点击率/TPS曲线如果变化缓慢或者有平坦的趋势,很有可能是服务器开始出现瓶颈。

    4、Total Transactions per Second(每秒通过事务总数)
    “每秒通过事务总数”显示在场景运行时,在每一秒内通过的事务总数、失败的事务总署以及停止的事务总数。

    5、Transaction Performance Sunmmary(事务性能摘要)
    “事务性能摘要”显示方案中所有事务的最小、最大和平均执行时间,可以直接判断响应时间是否符合用户的要求。
    重点关注事务的平均和最大执行时间,如果其范围不在用户可以接受的时间范围内,需要进行原因分析。

    6、Transaction Response Time Under Load(事务响应时间与负载)
    “事务响应时间与负载”是“正在运行的虚拟用户”图和“平均响应事务时间”图的组合,通过它可以看出在任一时间点事务响应时间与用户数目的关系,从而掌握系统在用户并发方面的性能数据,为扩展用户系统提供参考。此图可以查看虚拟用户负载对执行时间的总体影响,对分析具有渐变负载的测试场景比较有用。

    7、Transaction Response Time(Percentile)(事务响应时间(百分比))
    “事务响应时间(百分比)”是根据测试结果进行分析而得到的综合分析图,也就是工具通过一些统计分析方法间接得到的图表。通过它可以分析在给定事务响应时间范围内能执行的事务百分比。

    8、Transaction Response Time(Distribution)(事务响应时间(分布))
    “事务响应时间(分布)”显示在场景运行过程中,事务执行所用时间的分布,通过它可以了解测试过程中不同响应时间的事务数量。如果系统预先定义了相关事务可以接受的最小和最大事务响应时间,则可以使用此图确定服务器性能是否在可以接受的范围内。

     

    Web Resources(Web资源分析)
    Web资源分析是从服务器入手对Web服务器的性能分析。

    1、Hits per Second(每秒点击次数)
    “每秒点击次数”,即使运行场景过程中虚拟用户每秒向Web服务器提交的HTTP请求数。
    通过它可以评估虚拟用户产生的负载量,如将其和“平均事务响应时间”图比较,可以查看点击次数对事务性能产生的影响。通过对查看“每秒点击次数”,可以判断系统是否稳定。系统点击率下降通常表明服务器的响应速度在变慢,需进一步分析,发现系统瓶颈所在。

    2、Throughput(吞吐率)
    “吞吐率”显示的是场景运行过程中服务器的每秒的吞吐量。其度量单位是字节,表示虚拟用在任何给定的每一秒从服务器获得的数据量。
    可以依据服务器的吞吐量来评估虚拟用户产生的负载量,以及看出服务器在流量方面的处理能力以及是否存在瓶颈
    “吞吐率”图和“点击率”图的区别:
    “吞吐率”图,是每秒服务器处理的HTTP申请数。
    “点击率”图,是客户端每秒从服务器获得的总数据量。

    3、HTTP Status Code Summary(HTTP状态代码概要)
    “HTTP状态代码概要”显示场景或会话步骤过程中从Web服务器返回的HTTP状态代码数,该图按照代码分组。HTTP状态代码表示HTTP请求的状态。

    4、HTTP Responses per Second(每秒HTTP响应数)
    “每秒HTTP响应数”是显示运行场景过程中每秒从Web服务器返回的不同HTTP状态代码的数量,还能返回
    其它各类状态码的信息,通过分析状态码,可以判断服务器在压力下的运行情况,也可以通过对图中显示的结果进行分组,进而定位生成错误的代码脚本。

    5、Pages Downloader per Second(每秒下载页面数)
    “每秒下载页面数”显示场景或会话步骤运行的每一秒内从服务器下载的网页数。使用此图可依据下载的页数来计算Vuser生成的负载量。
    和吞吐量图一样,每秒下载页面数图标是Vuser在给定的任一秒内从服务器接收到的数据量。但是吞吐量考虑的各个资源极其大小(例,每个GIF文件的大小、每个网页的大小)。而每秒下载页面数只考虑页面数。
    注:要查看每秒下载页数图,必须在R-T-S那里设置“每秒页面数(仅HTML模式)”。

    6、Retries per Second(每秒重试次数)
    “每秒重试次数”显示场景或会话步骤运行的每一秒内服务器尝试的连接次数。
    在下列情况将重试服务器连接:
    A、初始连接未经授权
    B、要求代理服务器身份验证
    C、服务器关闭了初始连接
    D、初始连接无法连接到服务器
    E、服务器最初无法解析负载生成器的IP地址

    7、Retries Summary(重试次数概要)
    “重试次数概要”显示场景或会话步骤运行过程中服务器尝试的连接次数,它按照重试原因分组。将此图与每秒重试次数图一起使用可以确定场景或会话步骤运行过程中服务器在哪个时间点进行了重试。

    8、Connections(连接数)
    “连接数”显示场景或会话步骤运行过程中每个时间点打开的TCP/IP连接数。
    借助此图,可以知道何时需要添加
    其他连接。
    例:当连接数到达稳定状态而事务响应时间迅速增大时,添加连接可以使性能得到极大提高(事务响应时间将降低)。

    9、Connections Per Second(每秒连接数)
    “每秒连接数”显示方案在运行过程中每秒建立的TCP/IP连接数。
    理想情况下,很多HTTP请求都应该使用同一连接,而不是每个请求都新打开一个连接。通过每秒连接数图可以看出服务器的处理情况,就表明服务器的性能在逐渐下降。

    10、SSLs Per Second(每秒SSL连接数)
    “每秒SSL连接数”显示场景或会话步骤运行的每一秒内打开的新的以及重新使用的SSL连接数。当对安全服务器打开TCP/IP连接后,浏览器将打开SSL连接。


    Web Page Breakdown(网页元素细分)
    “网页元素细分”主要用来评估页面内容是否影响事务的响应时间,通过它可以深入地分析网站上那些下载很慢的图形或中断的连接等有问题的
    元素。

    1、Web Page Breakdown(页面分解总图)
    “页面分解”显示某一具体事务在测试过程的响应情况,进而分析相关的事务运行是否正常。
    “页面分解”图可以按下面四种方式进行进一步细分:
    1)、Download Time Breaddown(下载时间细分)
    “下载时间细分”图显示网页中不同元素的下载时间,同时还可按照下载过程把时间进行分解,用不同的颜色来显示DNS解析时间、建立连接时间、第一次缓冲时间等各自所占比例。
    2)、Component Breakdown(Over Time)(组件细分(随时间变化))
    “组件细分”图显示选定网页的页面组件随时间变化的细分图。通过该图可以很容易的看出哪些元素在测试过程中下载时间不稳定。该图特别适用于需要在客户端下载控件较多的页面,通过分析控件的响应时间,很容易就能发现那些控件不稳定或者比较耗时。
    3)、Download Time Breakdown(Over Time)(下载时间细分(随时间变化))
    “下载时间细分(随时间变化)” 图显示选定网页的页面元素下载时间细分(随时间变化)情况,它非常清晰地显示了页面各个元素在压力测试过程中的下载情况。
    “下载时间细分”图显示的是整个测试过程页面元素响应的时间统计分析结果,“下载时间细分(随时间变化)”显示的事场景运行过程中每一秒内页面元素响应时间的统计结果,两者分别从宏观和微观角度来分析页面元素的下载时间。
    4)、Time to First Buffer Breakdown(Over Time)(第一次缓冲时间细分(随时间变化))
    “第一次缓冲时间细分(随时间变化)”图显示成功收到从Web服务器返回的第一次缓冲之前的这段时间,场景或会话步骤运行的每一秒中每个网页组件的服务器时间和网络时间(以秒为单位)。
    可以使用该图确定场景或会话步骤运行期间服务器或网络出现问题的时间。
    First Buffer Time:是指客户端与服务器端建立连接后,从服务器发送第一个数据包开始计时,数据经过网络传送到客户端,到浏览器接收到第一个缓冲所用的时间。

    2、Page Component Breakdown(页面组件细分)
    “页面组件细分”图显示每个网页及其组件的平均下载时间(以秒为单位)。可以根据下载组件所用的平均秒数对图列进行排序,通过它有助于隔离有问题的组件。

    3、Page Component Breakdown(Over Time)(页面组件分解(随时间变化))
    “页面组件分解(随时间变化)”图显示在方案运行期间的每一秒内每个网页及其组件的平均响应时间 (以秒为单位)。

    4、Page Download Time Breakdown(页面下载时间细分)
    “页面下载时间细分”图显示每个页面组件下载时间的细分,可以根据它确定在网页下载期间事务响应时间缓慢是由网络错误引起还是由服务器错误引起。
    “页面下载时间细分”图根据DNS解析时间、连接时间、第一次缓冲时间、SSL握手时间、接收时间、FTP验证时间、客户端时间和错误时间来对每个组件的下载过程进行细分。

    5、Page Download Time Breakdown(Over Time)(页面下载时间细分(随时间变化))
    “页面下载时间细分(随时间变化)”图显示方案运行期间,每一秒内每个页面组件下载时间的细分。使用此图可以确定网络或服务器在方案执行期间哪一时间点发生了问题。
    “页面组件细分(随时间变化)”图和“页面下载时间细分(随时间变化)”图通常结合起来进行分析:首先确定有问题的组件,然后分析它们的下载过程,进而定位原因在哪里。

    6、Time to First Buffer Breakdown(第一次缓冲时间细分)
    “第一次缓冲时间细分”图显示成功收到从Web服务器返回的第一次缓冲之前的这一段时间内的每个页面组件的相关服务器/网路时间。如果组件的下载时间很长,则可以使用此图确定产生的问题与服务器有关还是与网络有关。
    网络时间:定义为第一个HTTP请求那一刻开始,直到确认为止所经过的平均时间。
    服务器时间:定义为从收到初始HTTP请求确认开始,直到成功收到来自Web服务器的一次缓冲为止所经过的平均时间。

    7、Time to First Buffer Breakdown(Over Time)(第一次缓冲时间细分(随时间变化))
    “第一次缓冲时间细分(随时间变化)”图显示成功收到从Web服务器返回的第一个缓冲之前的这段时间内,场景运行的每一秒中每个网页组件的服务器时间和网络时间。可以使用此图确定场景运行期间服务器或网络出现问题的时间点。

    8、Downloader Component Size(KB)(已下载组件大小)
    “已下载组件大小”图显示每个已经下载的网页组建的大小。通过它可以直接看出哪些组件比较大并需要进一步进行优化以提高性能

  • 分析结果一些注意事项

    2009-08-31 14:52:23

    事物响应时间:

    1、如果事物响应时间先是缓慢上升然后再平缓再下降,其他度量都很正常,说明先持续上升说明事物响应时间变长,处理能力在下降;持续平缓说明并发数达到一定数量了,不能再增加了;(可能代码中连接数的限制问题);

    2、在JAVA开发程序中,出现内存泄漏的可能性,可能创建对象的时候,创建对象太多,对象使用完后,不释放,导致内存泄漏;

    CPU、内存:

    1、CPU、内存利用率都不断的增加,说明系统中可能产生资源争用的问题。

    数据库:

    1、任何度量信息都正常,发生业务失败的情况,说明数据库可能被锁住了。

     

  • Load runner分析结果在线视频

    2009-08-31 14:44:42

  • 性能测试和压力测试的区别

    2009-03-16 17:23:39

    性能测试是用来测试软件在系统中的运行性能的。 性能测试可以发生在各个测试阶段中,即使是在单元层,一个单独模块的性能也可以使用白盒测试来进行评估,然而,只有当整个系统的所有成分都集成到一起之后,才能检查一个系统的真正性能。
         性能测试经常和压力测试一起进行,而且常常需要硬件和
    软件测试设备,这就是说,常常有必要的在一种苛刻的环境中衡量资源的使用(比如,处理器周期)。外部的测试设备可以监测测试执行,当出现情况(如中断)时记录下来。通过对系统的检测,测试者可以发现导致效率降低和系统故障的原因。

    压力测试:对系统不断施加压力的测试,是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。例如测试一个 Web 站点在大量的负荷下,何时系统的响应会退化或失败。 
       
    性能测试:在交替进行负荷和强迫测试时常用的术语。 性能测试
    关注的是系统的整体。它和通常所说的强度、压力/负载测试测试有密切关系。所以压力和强度测试应该于性能测试一同进行。
        举例说明:针对一个网站进行测试,模拟10到50个用户就是在进行常规性能测试,用户增加到1000乃至上万就变成了压力/负载测试。如果同时对系统进行大量的数据查询操作,就包含了强度测试。
         性能测试
    (Performance) 正常使用的时间内系统完成一个任务需要的时间,多人同时使用的时候响应时间,在可以接受范围内.J2EE技术实现的系统在性能方面更是需要照顾的,一般原则是3秒以下接受,3-5秒可以接受,5秒以上就影响易用性了. 如果在测试过程中发现性能问题,修复起来是非常艰难的,因为这常常意味着程序的算法不好,结构不好,或者设计有问题。因此在产品开发的开始阶段,就要考虑到软件的性能问题
        压力测试 (Stress) 多用户情况可以考虑使用压力测试工具
    ,建议将压力和 性能测试结合起来进行.如果有负载平衡的话还要在服务器端打开监测工具,查看服务器CPU使用率,内存占用情况, 如果有必要可以模拟大量数据输入,对硬盘的影响等等信息.如果有必要的话必须进行性能优化(软硬件都可以).
        压力测试和性能的测试的区别是在于他们不同的测试目的
        压力测试是为了发现系统能支持的最大负载,他的前提是要求系统性能处在可以接受的范围内,比如经常规定的叶面3秒钟内响应;
    A#e$J%] v2U5c O147463所以一句话概括就是:在性能可以接受的前提下,测试系统可以支持的最大负载。
        
    性能测试
    是为了检查系统的反映,运行速度等性能指标,他的前提是要求在一定负载下,如检查一个网站在100人同时在线的情况下的性能指标,每个用户是否都还可以正常的完成操作等。
    概括就是:在不同负载下(负载一定)时,通过一些系统参数(如反应时间等)检查系统的运行情况;比如我们说某个网站的性能差,严格上应该说‘在N人同时在线情况下,这个站点性能很差)
        总之,就像一个方程式:综合性能=压力数*性能指数,
        综合性能是固定的:
        压力测试是为了得到性能指数最小时候(可以接受的最小指数)最大的压力数
         性能测试是为了得到压力数确定下的性能指数

  • 性能测试结果分析总结

    2009-03-16 17:16:40

     

    对于企业应用程序,有许多进行性能测试的方法,其中一些方法实行起来要比其他方法困难。所要进行的性能测试的类型取决于想要达到的结果。例如,对于可再现性,基准测试是最好的方法。而要从当前用户负载的角度测试系统的上限,则应该使用容量规划测试。本文将介绍几种设置和运行性能测试的方法,并讨论这些方法的区别。

    简介

      如果不进行合理的规划,对J2EE应用程序进行性能测试将会是一项令人望而生畏且有些混乱的任务。因为对于任何的软件开发流程,都必须收集需求、理解业务需要,并在进行实际测试之前设计出正式的进度表。性能测试的需求由业务需要驱动,并由一组用例阐明。这些用例可以基于历史数据(例如,服务器一周的负载模式)或预测的近似值。弄清楚需要测试的内容之后,就需要知道如何进行测试了。

      在开发阶段前期,应该使用基准测试来确定应用程序中是否出现性能倒退。基准测试可以在一个相对短的时间内收集可重复的结果。进行基准测试的最好方法是,每次测试改变一个且只改变一个参数。例如,如果想知道增加JVM内存是否会影响应用程序的性能,就逐次递增JVM内存(例如,从1024 MB增至1224 MB,然后是1524 MB,最后是2024 MB),在每个阶段收集结果和环境数据,记录信息,然后转到下一阶段。这样在分析测试结果时就有迹可循。下一小节我将介绍什么是基准测试,以及运行基准测试的最佳参数。

      开发阶段后期,在应用程序中的bug已经被解决,应用程序达到一种稳定状态之后,可以运行更为复杂的测试,确定系统在不同的负载模式下的表现。这些测试被称为容量规划测试、渗入测试(soak test)、峰谷测试(peak-rest test),它们旨在通过测试应用程序的可靠性、健壮性和可伸缩性来测试接近于现实世界的场景。对于下面的描述应该从抽象的意义上理解,因为每个应用程序的使用模式都是不同的。例如,容量规划测试通常都使用较缓慢的ramp-up(下文有定义),但是如果应用程序在一天之中的某个时段中有快速突发的流量,那么自然应该修改测试以反映这种情况。但是,要记住,因为更改了测试参数(比如ramp-up周期或用户的考虑时间(think-time)),测试的结果肯定也会改变。一个不错的方法是,运行一系列的基准测试,确立一个已知的可控环境,然后再对变化进行比较。

    基准测试

      基准测试的关键是要获得一致的、可再现的结果。可再现的结果有两个好处:减少重新运行测试的次数;对测试的产品和产生的数字更为确信。使用的性能测试工具可能会对测试结果产生很大影响。假定测试的两个指标是服务器的响应时间和吞吐量,它们会受到服务器上的负载的影响。服务器上的负载受两个因素影响:同时与服务器通信的连接(或虚拟用户)的数目,以及每个虚拟用户请求之间的考虑时间的长短。很明显,与服务器通信的用户越多,负载就越大。同样,请求之间的考虑时间越短,负载也越大。这两个因素的不同组合会产生不同的服务器负载等级。记住,随着服务器上负载的增加,吞吐量会不断攀升,直到到达一个点。


    1.随着负载的增加,系统吞吐量的曲线(单位:页面/秒)

      注意,吞吐量以稳定的速度增长,然后在某一个点上稳定下来。

      在某一点上,执行队列开始增长,因为服务器上所有的线程都已投入使用,传入的请求不再被立即处理,而是放入队列中,当线程空闲时再处理。


    2.随着负载的增加,系统执行队列长度的曲线

      注意,最初的一段时间,执行队列的长度为零,然后就开始以稳定的速度增长。这是因为系统中的负载在稳定增长,虽然最初系统有足够的空闲线程去处理增加的负载,最终它还是不能承受,而必须将其排入队列。

    testceo.com

      当系统达到饱和点,服务器吞吐量保持稳定后,就达到了给定条件下的系统上限。但是,随着服务器负载的继续增长,系统的响应时间也随之延长,虽然吞吐量保持稳定。


    3.随着负载的增加,系统中两个事务的响应时间曲线

      注意,在执行队列(图2)开始增长的同时,响应时间也开始以递增的速度增长。这是因为请求不能被及时处理。

      为了获得真正可再现的结果,应该将系统置于相同的高负载下。为此,与服务器通信的虚拟用户应该将请求之间的考虑时间设为零。这样服务器会立即超载,并开始构建执行队列。如果请求(虚拟用户)数保持一致,基准测试的结果应该会非常精确,完全可以再现。

      您可能要问的一个问题是:如何度量结果?对于一次给定的测试,应该取响应时间和吞吐量的平均值。精确地获得这些值的唯一方法是一次加载所有的用户,然后在预定的时间段内持续运行。这称为“flat”测试。


    3Eh2[ F"fU147463
    4. flat测试的情况(所有的用户都是同时加载的)

      与此相对应的是“ramp-up”测试。

    5. ramp-up测试的情况(在测试期间,用户以稳定速度(每秒x个)增加)

      ramp-up测试中的用户是交错上升的(每几秒增加一些新用户)。ramp-up测试不能产生精确和可重现的平均值,这是因为由于用户的增加是每次一部分,系统的负载在不断地变化。因此,flat运行是获得基准测试数据的理想模式。

      这不是在贬低ramp-up测试的价值。实际上,ramp-up测试对找出以后要运行的flat测试的范围非常有用。ramp-up测试的优点是,可以看出随着系统负载的改变,测量值是如何改变的。然后可以据此选择以后要运行的flat测试的范围。

      Flat测试的问题是系统会遇到波动效果。


    6.一次flat测试中所测得的系统吞吐量的曲线(单位:页面/秒)

      注意波动的出现,吞吐量不再是平滑的。

      这在系统的各个方面都有所体现,包括CPU的使用量。

    7.一次flat测试中所测得的系统CPU使用量随时间变化的曲线

      注意,每隔一段时间就会出现一个波形。CPU使用量不再是平滑的,而是有了像吞吐量图那样的尖峰。

      此外,执行队列也承受着不稳定的负载,因此可以看到,随着系统负载的增加和减少,执行队列也在增长和缩减。


    8.一次flat测试中所测得的系统执行队列的曲线

      注意,每隔一段时间就会出现一个波形。执行队列曲线与上面的CPU使用量图非常相似。

      最后,系统中事务的响应时间也遵循着这个波动模式。

    testceo.com

     


    9.一次flat测试中所测得的系统事务的响应时间

      注意,每隔一段时间就会出现一个波形。事务的响应时间也与上面的图类似,只不过其效果随着时间的推移逐渐减弱。

      当测试中所有的用户都同时执行几乎相同的操作时,就会发生这种现象。这将会产生非常不可靠和不精确的结果,所以必须采取一些措施防止这种情况的出现。有两种方法可以从这种类型的结果中获得精确的测量值。如果测试可以运行相当长的时间(有时是几个小时,取决于用户的操作持续的时间),最后由于随机事件的本性使然,服务器的吞吐量会被拉平。或者,可以只选取波形中两个平息点之间的测量值。该方法的缺点是可以捕获数据的时间非常短。

    性能规划测试

      对于性能规划类型的测试来说,其目标是找出,在特定的环境下,给定应用程序的性能可以达到何种程度。此时可重现性就不如在基准测试中那么重要了,因为测试中通常都会有随机因子。引入随机因子的目的是为了尽量模拟具有真实用户负载的现实世界应用程序。通常,具体的目标是找出系统在特定的服务器响应时间下支持的当前用户的最大数。

  • 系统性能调优(转载)

    2009-03-16 17:05:30

    性能测试分析人员经过对结果的分析以后,有可能提出系统存在性能瓶颈。这时相关开发人员、数据库管理员、系统管理员、网络管理员等就需要根据性能测试分析人员提出的意见同性能分析人员共同分析确定更细节的内容,相关人员对系统进行调整以后,性能测试人员继续进行第二轮、第三轮……的测试,与以前的测试结果进行对比,从而确定经过调整以后系统的性能是否有提升。有一点需要提醒大家,就是在进行性能调整的时候,最好一次只调整一项内容或者一类内容,避免一次调整多项内容而引起性能提高却不知道是由于调整那项关键指标而改善性能的。那么在进行系统的调优过程中是否有什么好的策略来知道我们工作呢?经过多年的工作,作者的经验是按照由易到难的顺序对系统性能进行调优。
    系统调优由易到难的先后顺序如下:
    1.       
    硬件问题
    2.       
    网络问题
    3.       
    应用服务器、数据库等配置问题
    4.       
    源代码、数据库脚本问题
    5.       
    系统构架问题

    硬件发生问题是最显而易见的,如果CPU不能满足复杂的数学逻辑运算,可以考虑更换CPU,如果硬盘容量很小,承受不了很多的数据可以考虑更换高速、大容量硬盘等。如果网络带宽不够,可以考虑对网络进行升级和改造,将网络更换成高速网络;还可以将系统应用与平时公司日常应用进行隔离等方式,达到提高网络传输速率的目的。很多情况下,系统性能不是十分理想的一个重要原因就是没有对应用服务器、数据库等软件进行调优和设置引起来的,如:Tomcat调整堆内存和扩展内存的大小,数据库引入连接池技术等。源代码、数据库脚本在上述调整无效的情况下,您可以选择的一种调优方式,但是由于设计到对源代码的改变有可能会引入缺陷,所以在调优以后,不仅需要对性能的测试还要对功能进行验证,是否正确。这种方式需要通过对数据库建立适当的索引,以及运用简单的语句替代复杂的语句,从而达到提高SQL语句运行效率的作用,还可以在编码过程中选择好的算法,减少响应时间,引入缓存等技术。最后,在上述尝试都不见效的情况下,您就需要考虑现行的构架是否合适,选择效率高的构架,但由于构架的改动比较大,所以您应该慎重对待。
  • LoadRunner中的理发店模型(转载)

    2009-03-10 15:57:06

    相信大家都进过或见过理发店,一间或大或小的铺面,1个或几个理发师,几张理发用的椅子和供顾客等待的长条板凳。

    在我们的这个理发店中,我们事先做了如下的假设:

     

    1.        理发店共有3名理发师;

    2.      每位理发师剪一个发的时间都是1小时;

    3.      我们顾客们都是很有时间观念的人而且非常挑剔,他们对于每次光顾理发店时所能容忍的等待时间+剪发时间是3小时,而且等待时间越长,顾客的满意度越低。如果3个小时还不能剪完头发,我们的顾客会立马生气的走人。

     

    通过上面的假设我们不难想象出下面的场景:

    1.        当理发店内只有1位顾客时,只需要有1名理发师为他提供服务,其他两名理发师可能继续等着,也可能会帮忙打打杂。1小时后,这位顾客剪完头发出门走了。那么在这1个小时里,整个理发店只服务了1位顾客,这位顾客花费在这次剪发的时间是1小时;

    2.      当理发店内同时有两位顾客时,就会同时有两名理发师在为顾客服务,另外1位发呆或者打杂帮忙。仍然是1小时后,两位顾客剪完头发出门。在这1小时里,理发店服务了两位顾客,这两位顾客花费在剪发的时间均为1小时;

    3.      很容易理解,当理发店内同时有三位顾客时,理发店可以在1小时内同时服务三位顾客,每位顾客花费在这次剪发的时间仍然是均为1小时;

    从上面几个场景中我们可以发现,在理发店同时服务的顾客数量从1位增加到3位的过程中,随着顾客数量的增多,理发店的整体工作效率在提高,但是每位顾客在理发店内所呆的时间并未延长。

    当然,我们可以假设当只有1位顾客和2位顾客时,空闲的理发师可以帮忙打杂,使得其他理发师的工作效率提高,并使每位顾客的剪发时间小于1小时。不过即使根据这个假设,虽然随着顾客数量的增多,每位顾客的服务时间有所延长,但是这个时间始终还被控制在顾客可接受的范围之内,并且顾客是不需要等待的。

    不过随着理发店的生意越来越好,顾客也越来越多,新的场景出现了。假设有一次顾客ABC刚进理发店准备剪发,外面一推门又进来了顾客DEF。因为ABC三位顾客先到,所以DEF三位只好坐在长板凳上等着。1小时后,ABC三位剪完头发走了,他们每个人这次剪发所花费的时间均为1小时。可是DEF三位就没有这么好运,因为他们要先等ABC三位剪完才能剪,所以他们每个人这次剪发所花费的时间均为2小时——包括等待1小时和剪发1小时。

    通过上面这个场景我们可以发现,对于理发店来说,都是每小时服务三位顾客——第1个小时是ABC,第二个小时是DEF;但是对于顾客DEF来说,“响应时间”延长了。如果你可以理解上面的这些场景,就可以继续往下看了。

    在新的场景中,我们假设这次理发店里一次来了9位顾客,根据我们上面的场景,相信你不难推断,这9位顾客中有3位的“响应时间”为1小时,有3位的“响应时间”为2小时(等待1小时+剪发1小时),还有3位的“响应时间”为3小时(等待2小时+剪发1小时)——已经到达用户所能忍受的极限。假如在把这个场景中的顾客数量改为10,那么我们已经可以断定,一定会有1位顾客因为“响应时间”过长而无法忍受,最终离开理发店走了。

    我想并不需要特别说明,大家也一定可以把上面的这些场景跟性能测试挂上钩了。如果你还是觉得比较抽象,继续看下面的这张图 ^_^

    这张图中展示的是1个标准的软件性能模型。在图中有三条曲线,分别表示资源的利用情况Utilization,包括硬件资源和软件资源)、吞吐量Throughput,这里是指每秒事务数)以及响应时间Response Time)。图中坐标轴的横轴从左到右表现了并发用户数Number of Concurrent Users)的不断增长。

    在这张图中我们可以看到,最开始,随着并发用户数的增长,资源占用率和吞吐量会相应的增长,但是响应时间的变化不大;不过当并发用户数增长到一定程度后,资源占用达到饱和,吞吐量增长明显放缓甚至停止增长,而响应时间却进一步延长。如果并发用户数继续增长,你会发现软硬件资源占用继续维持在饱和状态,但是吞吐量开始下降,响应时间明显的超出了用户可接受的范围,并且最终导致用户放弃了这次请求甚至离开。

    根据这种性能表现,图中划分了三个区域,分别是Light Load(较轻的压力)、Heavy Load(较重的压力)和Buckle Zone(用户无法忍受并放弃请求)。在Light LoadHeavy Load 两个区域交界处的并发用户数,我们称为“最佳并发用户数(The Optimum Number of Concurrent Users”,而Heavy LoadBuckle Zone两个区域交界处的并发用户数则称为“最大并发用户数(The Maximum Number of Concurrent Users”。

    当系统的负载等于最佳并发用户数时,系统的整体效率最高,没有资源被浪费,用户也不需要等待;当系统负载处于最佳并发用户数和最大并发用户数之间时,系统可以继续工作,但是用户的等待时间延长,满意度开始降低,并且如果负载一直持续,将最终会导致有些用户无法忍受而放弃;而当系统负载大于最大并发用户数时,将注定会导致某些用户无法忍受超长的响应时间而放弃。

    对应到我们上面理发店的例子,每小时3个顾客就是这个理发店的最佳并发用户数,而每小时9个顾客则是它的最大并发用户数。当每小时都有3个顾客到来时,理发店的整体工作效率最高;而当每小时都有9个顾客到来时,前几个小时来的顾客还可以忍受,但是随着等待的顾客人数越来越多,等待时间越来越长,最终还是会有顾客无法忍受而离开。同时,随着理发店里顾客人数的增多和理发师工作时间的延长,理发师会逐渐产生疲劳,还要多花一些时间来清理环境和维持秩序,这些因素将最终导致理发师的工作效率随着顾客人数的增多和工作的延长而逐渐的下降,到最后可能要1.5小时甚至2个小时才能剪完1个发了。

    当然,如果一开始就有10个顾客到来,则注定有1位顾客剪不到头发了。

     

    进一步理解“最佳并发用户数”和“最大并发用户数”

    在上一节中,我们详细的描述了并发用户数同资源占用情况、吞吐量以及响应时间的关系,并且提到了两个新的概念——“最佳并发用户数(The Optimum Number of Concurrent Users”和“最大并发用户数(The Maximum Number of Concurrent Users”。在这一节中,我们将对“最佳并发用户数”和“最大并发用户数”的定义做更加清晰和明确的说明。

    对于一个确定的被测系统来说,在某个具体的软硬件环境下,它的“最佳并发用户数”和“最大并发用户数”都是客观存在。以“最佳并发用户数”为例,假如一个系统的最佳并发用户数是50,那么一旦并发量超过这个值,系统的吞吐量和响应时间必然会 “此消彼长”;如果系统负载长期大于这个数,必然会导致用户的满意度降低并最终达到一种无法忍受的地步。所以我们应该 保证最佳并发用户数要大于系统的平均负载

    要补充的一点是,当我们需要对一个系统长时间施加压力——例如连续加压3-5天,来验证系统的可靠性或者说稳定性时,我们所使用的并发用户数应该等于或小于“最佳并发用户数”——大家也可以结合上面的讨论想想这是为什么 ^_^

    而对于最大并发用户数的识别,需要考虑和鉴别一下以下两种情况:

    1.              当系统的负载达到最大并发用户数后,响应时间超过了用户可以忍受的最大限度——这个限度应该来源于性能需求,例如:在某个级别的负载下,系统的响应时间应该小于5秒。这里容易疏忽的一点是,不要把顾客因为无法忍受而离开时店内的顾客数量作为理发店的“最大并发用户数”,因为这位顾客是在3小时前到达的,也就是说3小时前理发店内的顾客数量才是我们要找的“最大并发用户数”。而且,这位顾客的离开只是一个开始,可能有会更多的顾客随后也因为无法忍受超长的等待时间而离开;

    2.             在响应时间还没有到达用户可忍受的最大限度前,有可能已经出现了用户请求的失败。以理发店模型为例,如果理发店只能容纳6位顾客,那么当7位顾客同时来到理发店时,虽然我们可以知道所有顾客都能在可容忍的时间内剪完头发,但是因为理发店容量有限,最终只好有一位顾客打道回府,改天再来。

    对于一个系统来说,我们应该 确保系统的最大并发用户数要大于系统需要承受的峰值负载

    如果你已经理解了上面提到的全部的概念,我想你可以展开进一步的思考,回头看一下自己以往做过的性能测试,看看是否可以对以往的工作产生新的理解。也欢迎大家在这里提出自己的心得或疑惑,继续讨论下去。

     

    理发店模型的进一步扩展

    这一节中我会提到一些对理发店模型的扩展,当然,我依然是只讲述现实中的理发店的故事,至于如何将这些扩展同性能测试以及性能解决方案等方面关联起来,就留给大家继续思考了 ^_^

    扩展场景1:有些顾客已经是理发店的老顾客,他们和理发师已经非常熟悉,理发师可以不用花费太多时间沟通就知道这位顾客的想法。并且理发师对这位顾客的脑袋的形状也很熟悉,所以可以更快的完成一次理发的工作。

    扩展场景2:理发店并不是只有剪发一种业务,还提供了烫发染发之类的业务,那么当顾客提出新的要求时,理发师服务一位顾客的时间可能会超过标准的1小时。而且这时如果要计算每位顾客的等待时间就变得复杂了很多,有些顾客的排队时间会比原来预计的延长,并最终导致他们因为无法忍受而离开。

    扩展场景3:随着烫发和染发业务的增加,理发师们决定分工,两位专门剪发,一位专门负责烫发和染发。

    扩展场景4:理发店的生意越来越好,理发师的数量和理发店的门面已经无法满足顾客的要求,于是理发店的老板决定在旁边再开一家店,并招聘一些工作能力更强的理发师。

    扩展场景5:理发店的生意变得极为火爆了,两家店都无法满足顾客数量增长的需求,并且有些顾客开始反映到理发店的路途太远,到了以后又因为烫发和染发的人太多而等太久。可是理发店的老板也明白烫发和染发的收入要远远高于剪发阿,于是他脑筋一转,决定继续改变策略,在附近的几个大型小区租用小的铺面开设分店,专职剪发业务;再在市区的繁华路段开设旗舰店,专门为烫发、染发的顾客,以及VIP顾客服务。并增设800电话,当顾客想要剪发时,可以拨打这个电话,并由服务人员根据顾客的居住地点,将其指引到距离最近的一家分店去。

  • 如何做LoadRunner结果分析

    2009-03-10 14:13:23

    具体实例教你如何做LoadRunner结果分析(转)

    1.前言:
    LoadRunner最重要也是最难理解的地方--测试结果的分析.其余的录制和加压测试等设置对于我们来讲通过几次操作就可以轻松掌握了.
    针对 Results Analysis我用图片加文字做了一个例子,希望通过例子能给大家更多的帮助.
    这个例子主要讲述的是多个用户同时接管任务,测试系统的响应能力,确定系统瓶颈所在.客户要求响应时间是1个人接管的时间在5S内.
    2.系统资源:

    2.1 硬件环境:
    CPU:奔四2.8E
    硬盘:100G
    网络环境:100Mbps

    2.2 软件环境:
    操作系统:英文windowsXP
    服务器:tomcat服务
    浏览器:IE6.0
    系统结构:B/S结构

    3.添加监视资源
    下面要讲述的例子添加了我们平常测试中最常用到的一些资源参数.另外有些特殊的资源暂时在这里不做讲解了.我会在以后相继补充进来。

    Mercury Loadrunner Analysis中最常用的5种资源.
    1. Vuser
    2. Transactions
    3. Web Resources
    4. Web Page Breakdown
    5. System Resources
    在Analysis中选择“Add graph”或“New graph”就可以看到这几个资源了.还有其他没有数据的资源,我们没有让它显示.

    如果想查看更多的资源,可以将左下角的display only graphs containing data置为不选.然后选中相应的点“open graph”即可.

    打开Analysis首先可以看的是Summary Report.这里显示了测试的分析摘要.应有尽有.但是我们并不需要每个都要仔细去看.下面介绍一下部分的含义:
    Duration(持续时间):了解该测试过程持续时间.测试人员本身要对这个时期内系统一共做了多少的事有大致的熟悉了解.以确定下次增加更多的任务条件下测试的持续时间。
    Statistics Summary(统计摘要):只是大概了解一下测试数据,对我们具体分析没有太大的作用.
    Transaction Summary(事务摘要):了解平均响应时间Average单位为秒.
    其余的看不看都可以.都不是很重要.

    Retries per Second

     

     

       每秒重试图表显示了测试中某一时刻服务器联接重试的数量。图中重试数数大多时刻为0,除了运行到35分钟时,每秒重试数达到0.016每秒.从上图中很难做出结论,因为这个重试的峰值很像一个与其它结果不相关的独立的事件

     

     

     

    Connections

       连接图表展示了场景中超时开放TCP/IP联接的数量。一个有超链接的HTML页面可能促使浏览器开放多个连接以打开不同的网页地址。每个网站服务器都会开放2个连接。理论上,打开连接的数量可以反映虚拟用户的运行数。

    这张图有助于发现何时需要额外的连接。例如,如果连接的数量攀升到了一个稳定期,而且事务响应时间急剧增长,增加连接可能在执行过程中导致一个戏剧性的增长(事务响应时间的减小)

     

    图中开放连接的数量在到达时间表中的ramp-down之前是不断地增长的。这表明连接的数量即使到达250个用户的压力承受度是足够的。所以,在运行25分钟左右时出现的问题一定是有其它原因。

     

    Connections per Second

    每秒连接图表显示每秒新建连接的开放与连接的关闭。通常,新建的连接会反应关闭的连接数,如图中所示。注意图中的峰值,出现在20-35分钟,与此对应的是测试中虚拟用户到达峰值的数量也持续在这段期间。而且,连接的数量在这些结果中看起来没有什么问题

     

     

    Error Statistics

    错误统计表显示了测试期间错误发生的数量,以错误代码分类。连接服务器和本地页面出错是最常出现的。这里的错误代码出现次数最高的是2636626609.在下面的图表中我们会得到这些错误的详细说明。

     

    Error Statistics (by Descrīption)

    错误统计(按类型分类)图表显示了场景或按步执行期间错误增长的数量,这里的错误按类型分类。图中有错误的描述。错误与失败的事务是不同的概念,后者不在此图中统计,因为通常情况下一个独立的错误是不会导致事务失败的。有时由于一个独立事务的失败会出现复合错误.例如,LR运行中会在每一页查找特定字符来核实这些页面是正确的显示,但如果页面没有正确显示,则找不到这个字符,这时会记录一个错误。导致页面显示失败的原因并是文本的检查出现的,而是一些其它也会被LR记录的错误

    图中绿色占了大部分,它是与“search”这个文字检查的失败相对应的。第2大的米色部分与HTTP503的状态或是“service temporarily unavailale”(服务暂时不可用)相对应。想要确定错误的原因,需要检查脚本“search”检查字的出现并分析此时虚拟用户需要哪些资源。在每个网站服务器的日志文件中查找服务器响应的503类型,如果是可用的,对确定响应的原因是可能助的。

     

     

    Errors per Second

    每秒错误图表显示了测试场景中每秒出现错误的平均值,按错误类型分类。在测试结果的分析中,这张表在确定应用程序施压时的具体情况有很大帮助。

    图中有20-35分时出现了预期中的峰值,这与其它图相对应。尽管这里没有给出错误的详细描述,但错误出现的主体是在一个确定的时段,使我们可以诊断出异常的行为。下一步可以检查应用程序及数据库组在20-30这一时段产生的各种日志文件。

     

     


    Errors per Second (by Descrīption)

     

    每秒错误(按性质分类)图展示了场景或会话按步运行中,每秒错误的平均数,以错误的性质分类。错误的性质在词汇汇总中有描述。

    深蓝色的错误与相同的“Search”这个词的文本检查相对应,而浅蓝色的错误与同样的HTTP状态代码503相对应。相同的查询可以用在诊断这些错误出现的原因上。


    Errors per Second – Running Vusers

    每秒错误数—运行的虚拟用户图表显示的是每秒的覆盖和错误以及在图表Y轴对面显示运行的虚拟用户

    你可以用这张图看到在虚拟用户和每秒错误的数量中是否存在某种关系。

    明显在,在运行到20-35分钟时是存在一些关系的。大概从200个虚拟用户开始,错误的峰值达到最大每秒出现15个,并持续到该压力期间的结束,直到35分钟运行到ramp-down为止。

    从这些结果中判断问题的下一步就是要在检查在发生错误的时间段内所有有用的日志文件,并且,如果需要的话,可以改变或更新硬件的物理配置以改善性能,并需要返测以证实这些变化是否与期望一样。

  • LoadRunner结果分析(转载2)

    2009-03-10 14:11:56

    LoadRunner结果分析方法(二)

    下面我们来看一下CPU,内存.硬盘的瓶颈分析方法:

    首先我们要监视CPU,内存.硬盘的资源情况.得到以下的参数提供分析的依据.

    %processor time(processor_total):器消耗的处理器时间数量.如果服务器专用于sql server可接受的最大上限是80% -85 %.也就是常见的CPU使用率.

    %User time(processor_total)::表示耗费CPU的数据库操作如排序执行aggregate functions等。如果该值很高可考虑增加索引尽量使用简单的表联接水平分割大表格等方法来降低该值。

    %DPC time(processor_total)::越低越好。在多处理器系统中,如果这个值大于50%并且Processor:% Processor Time非常高,加入一个网卡可能会提高性能,提供的网络已经不饱和。

    %Disk time(physicaldisk_total):指所选磁盘驱动器忙于为读或写入请求提供服务所用的时间的百分比。如果三个计数器都比较大,那么硬盘不是瓶颈。如果只有%Disk Time比较大,另外两个都比较适中,硬盘可能会是瓶颈。在记录该计数器之前,请在Windows 2000 的命令行窗口中运行diskperf -yD。若数值持续超过80%,则可能是内存泄漏。

    Availiable bytes(memory):用物理内存数. 如果Available Mbytes的值很小4 MB 或更小),则说明计算机上总的内存可能不足或某程序没有释放内存。

    Context switch/sec(system): (实例化inetinfo dllhost 进程) 如果你决定要增加线程字节池的大小你应该监视这三个计数器包括上面的一个。增加线程数可能会增加上下文切换次数,这样性能不会上升反而会下降。如果十个实例的上下文切换值非常高,就应该减小线程字节池的大小。

    %Disk reads/sec(physicaldisk_total):每秒读硬盘字节数.

    %Disk write/sec(physicaldisk_total):每秒写硬盘字节数.

    Page faults/sec:进程产生的页故障与系统产生的相比较,以判断这个进程对系统页故障产生的影响。

    Pages per second:每秒钟检索的页数。该数字应少于每秒一页

    Working set:理线程最近使用的内存页反映了每一个进程使用的内存页的数量。如果服务器有足够的空闲内存,页就会被留在工作集中,当自由内存少于一个特定的阈值时,页就会被清除出工作集。

    Avg.disk queue length:读取和写入请求(为所选磁盘在实例间隔中列队的)的平均数。该值应不超过磁盘数的1.5~2 倍。要提高性能,可增加磁盘。注意:一个Raid Disk实际有多个磁盘。

    Average disk read/write queue length: 指读取(写入)请求(列队)的平均数

    Disk reads/(writes)/s:理磁盘上每秒钟磁盘读、写的次数。两者相加,应小于磁盘设备最大容量。

    Average disk sec/read:以秒计算的在此盘上读取数据的所需平均时间。

    Average disk sec/transfer:指以秒计算的在此盘上写入数据的所需平均时间。

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

    Page read/sec:每秒发出的物理数据库页读取数。这一统计信息显示的是在所有数据库间的物理页读取总数。由于物理 I/O 的开销大,可以通过使用更大的数据高速缓存、智能索引、更高效的查询或者改变数据库设计等方法,使开销减到最小。

    Page write/sec:(写的页/)每秒执行的物理数据库写的页数。

    1.       判断应用程序的问题

    如果系统由于应用程序代码效率低下或者系统结构设计有缺陷而导致大量的上下文切换(context switches/sec显示的上下文切换次数太高)那么就会占用大量的系统资源,如果系统的吞吐量降低并且CPU的使用率很高,并且此现象发生时切换水平在15000以上,那么意味着上下文切换次数过高.

    从图的整体看.context switches/sec变化不大,throughout曲线的斜率较高,并且此时的context switches/sec已经超过了15000.程序还是需要进一步优化.

    2.       判断CPU瓶颈

    如果processor queue length显示的队列长度保持不变(>=2)个并且处理器的利用率%Processor time超过90%,那么很可能存在处理器瓶颈.如果发现processor queue length显示的队列长度超过2,而处理器的利用率却一直很低,或许更应该去解决处理器阻塞问题,这里处理器一般不是瓶颈.

    %processor time平均值大于95,processor queue length大于2.可以确定CPU瓶颈.此时的CPU已经不能满足程序需要.急需扩展.

    3.       判断内存泄露问题

    内存问题主要检查应用程序是否存在内存泄漏,如果发生了内存泄漏,process\private bytes计数器和process\working set 计数器的值往往会升高,同时avaiable bytes的值会降低.内存泄漏应该通过一个长时间的,用来研究分析所有内存都耗尽时,应用程序反应情况的测试来检验.

    图中可以看到该程序并不存在内存泄露的问题.内存泄露问题经常出现在服务长时间运转的时候,由于部分程序对内存没有释放,而将内存慢慢耗尽.也是提醒大家对系统稳定性测试的关注.

    附件:

    CPU信息

    Processor\ % Processor Time 获得处理器使用情况。

    也可以选择监视 Processor\ % User Time % Privileged Time 以获得详细信息。

    Server Work Queues\ Queue Length 计数器会显示出处理器瓶颈。队列长度持续大于 4 则表示可能出现处理器拥塞。

    System\ Processor Queue Length 用于瓶颈检测

    通过使用 Process\ % Processor Time Process\ Working Set

    Process\ % Processor Time过程的所有线程在每个处理器上的处理器时间总和。

    硬盘信息

    Physical Disk\ % Disk Time

    Physical Disk\ Avg.Disk Queue Length

    例如包括 Page Reads/sec % Disk Time Avg.Disk Queue Length。如果页面读取操作速率很低,同时 % Disk Time Avg.Disk Queue Length的值很高,则可能有磁盘瓶径。但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。

    Physical Disk\ % Disk Time

    Physical Disk\ Avg.Disk Queue Length

    例如包括 Page Reads/sec % Disk Time Avg.Disk Queue Length。如果页面读取操作速率很低,同时 % Disk Time Avg.Disk Queue Length的值很高,则可能有磁盘瓶径。但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。

    请观察 Processor\ Interrupts/sec 计数器的值该计数器测量来自输入/输出 (I/O) 设备的服务请求的速度。如果此计数器的值明显增加,而系统活动没有相应增加,则表明存在硬件问题。

    Physical Disk\ Disk Reads/sec and Disk Writes/sec

    Physical Disk\ Current Disk Queue Length

    Physical Disk\ % Disk Time

    LogicalDisk\ % Free Space

    测试磁盘性能时,将性能数据记录到另一个磁盘或计算机,以便这些数据不会干扰您正在测试的磁盘。

    可能需要观察的附加计数器包括 Physical Disk\ Avg.Disk sec/TransferAvg.Disk Bytes/Transfer Disk Bytes/sec

    Avg.Disk sec/Transfer 计数器反映磁盘完成请求所用的时间。较高的值表明磁盘控制器由于失败而不断重试该磁盘。这些故障会增加平均磁盘传送时间。对于大多数磁盘,较高的磁盘平均传送时间是大于 0.3 秒。

    也可以查看 Avg.Disk Bytes/Transfer 的值。值大于 20 KB 表示该磁盘驱动器通常运行良好;如果应用程序正在访问磁盘,则会产生较低的值。例如,随机访问磁盘的应用程序会增加平均 Disk sec/Transfer 时间,因为随机传送需要增加搜索时间。

    Disk Bytes/sec 提供磁盘系统的吞吐率。

    决定工作负载的平衡

    要平衡网络服务器上的负载,需要了解服务器磁盘驱动器的繁忙程度。使用 Physical Disk\ % Disk Time 计数器,该计数器显示驱动器活动时间的百分比。如果 % Disk Time 较高(超过 90%),请检查 Physical Disk\ Current Disk Queue Length 计数器以查看正在等待磁盘访问的系统请求数量。等待 I/O 请求的数量应当保持在不大于组成物理磁盘的主轴数的 1.5 2 倍。

    尽管廉价磁盘冗余阵列 (RAID) 设备通常有多个主轴,大多数磁盘有一个主轴。硬件 RAID 设备在系统监视器中显示为一个物理磁盘;通过软件创建的 RAID 设备显示为多个驱动器(实例)。可以监视每个物理驱动器(而不是 RAID)的 Physical Disk 计数器,也可以使用 _Total 实例来监视所有计算机驱动器的数据。

    使用 Current Disk Queue Length % Disk Time 计数器来检测磁盘子系统的瓶颈。如果 Current Disk Queue Length % Disk Time 的值始终较高可以考虑升级磁盘驱动器或将某些文件移动到其他磁盘或服务器。

     

  • LoadRunner结果分析(转载)

    2009-03-09 18:51:11

     LoadRunner结果分析(一)

     

    前言:

    LoadRunner最重要也是最难理解的地方--测试结果的分析.其余的录制和加压测试等设置对于我们来讲通过几次操作就可以轻松掌握了.

    针对 Results Analysis我用图片加文字做了一个例子,希望通过例子能给大家更多的帮助.

           这个例子主要讲述的是多个用户同时接管任务,测试系统的响应能力,确定系统瓶颈所在.客户要求响应时间是1个人接管的时间在5S.

    2.系统资源:

     

    2.1 硬件环境:

    CPU:奔四2.8E

    硬盘:100G

    网络环境:100Mbps

     

    2.2 软件环境:

    操作系统:英文windowsXP

    服务器:tomcat服务

    浏览器:IE6.0

    系统结构:B/S结构

     

    3.添加监视资源

    下面要讲述的例子添加了我们平常测试中最常用到的一些资源参数.另外有些特殊的资源暂时在这里不做讲解了.我会在以后相继补充进来。

     

    Mercury Loadrunner Analysis中最常用的5种资源.

    1.      Vuser

    2.      Transactions

    3.      Web Resources

    4.      Web Page Breakdown

    5.      System Resources

    Analysis中选择“Add graph”或“New graph”就可以看到这几个资源了.还有其他没有数据的资源,我们没有让它显示.

    如果想查看更多的资源,可以将左下角的display only graphs containing data置为不选.然后选中相应的点“open graph”即可.

     

    打开Analysis首先可以看的是Summary Report.这里显示了测试的分析摘要.应有尽有.但是我们并不需要每个都要仔细去看.下面介绍一下部分的含义:

    Duration(持续时间):了解该测试过程持续时间.测试人员本身要对这个时期内系统一共做了多少的事有大致的熟悉了解.以确定下次增加更多的任务条件下测试的持续时间。

    Statistics Summary(统计摘要)只是大概了解一下测试数据,对我们具体分析没有太大的作用.

    Transaction Summary(事务摘要)了解平均响应时间Average单位为秒.

    其余的看不看都可以.都不是很重要.

     

    4.分析集合点

    在录制脚本中通常我们会使用到集合点,那么既然我们用到了集合点,我们就需要知道Vuser是在什么时候集合在这个点上,又是怎样的一个被释放的过程.这个时候就需要观察Vuser-Rendezvous.

                                                            1

    可以看到大概在350的地方30个用户才全部集中到start集合点,持续了3分多,730的位置开始释放用户,930还有18个用户,1110还有5个用户,整个过程持续了12.

                                                     2

    上面图2是集合点与平均事务响应时间的比较图.

    :在打开analysis之后系统LR默认这两个曲线是不在同一张图中的.这就需要自行设置了.具体步骤如下:

    点击图上.右键选择merge graphs.然后在select graph to merge with 中选择即将用来进行比较的graph.如图3:

                                                            3

    2中较深颜色的是平均响应时间,浅色的为集合点,Vuser在集合点持续了1分后平均响应时间呈现最大值,可见用户的并发对系统的性能是一个很大的考验.

    接下来看一下与事务有关的参数分析.下看一张图.

                                                            4这张图包括Average Transaction Response TimeRunning Vuser两个数据图.从图中可以看到Vuser_init_Transaction(系统登录)对系统无任何的影响,Vuser达到15个的时候平均事务响应时间才有明显的升高,也就是说系统达到最优性能的时候允许14个用户同时处理事务,Vuser达到301,系统响应时间最大,那么这个最大响应时间是要推迟1分钟才出现的,在系统稳定之后事务响应时间开始下降说明这个时候有些用户已经执行完了操作.同时也可以看出要想将事务响应时间控制在10S.Vuser数量最多不能超过2.看来是很难满足用户的需求了.

    做一件事有时候上级会问你这件事办得怎么样了.你会说做完一半了.那么这个一半的事情你花了多少时间呢?所以我们要想知道在给定时间的范围内完成事务的百分比就要靠下面这个图(Transaction Response Time(Percentile)

    图中画圈的地方表示10%的事务的响应时间是在80S左右.80S对于用户来说不是一个很小的数字,而且只有10%的事务,觉得系统性能不好;

           实际工作中遇到的事情不是每一件事都能够在很短的时间内完成的,对于那些需要时间的事情我们就要分配适当的时间处理,时间分配的不均匀就会出现有些事情消耗的时间长一些,有些事情消耗的短一些,但我们自己清楚.LR同样也为我们提供了这样的功能,使我们可以了解大部分的事务响应时间是多少?以确定这个系统我们还要付出多少的代价来提高它.

    Transaction Response Time(Distribution)-事务响应时间(分布)

    显示在方案中执行事务所用时间的分布.如果定义了可以接受的最小和最大事务性能时间,可以通过此图确定服务器性能是否在可接受范围内.

    很明显大多数事务的响应时间在60-140S.在我测试过的项目中多数客户所能接受的最大响应时间也要在20S左右.140S的时间!很少有人会去花这么多的时间去等待页面的出现吧!

    通过观察以上的数据表.我们不难看到此系统在这种环境下并不理想.世间事有果就有因,那么是什么原因导致得系统性能这样差呢?让我们一步一步的分析.

    系统性能不好的原因多方面,我们先从应用程序看.有的时候我不得不承认LR的功能真的很强大,这也是我喜欢它的原因.先看一张页面细分图.

    一个应用程序是由很多个组件组成的,整个系统性能不好那我们就把它彻底的剖析一下.图片中显示了整个测试过程中涉及到的所有web.web page breakdown中显示的是每个页面的下载时间.点选左下角web page breakdown展开,可以看到每个页中包括的css样式表,js脚本,jsp页面等所有的属性.

    select page to breakdown中选择页面.

    见图.

    Select Page To Breakdown 中选择http://192.168.0.135:8888/usertasks,在下方看到属于它的两个组件,第一行中ConnectionFirst Buffer占据了整个的时间,那么它的消耗时间点就在这里,我们解决问题就要从这里下手.

    名称

    描述

    显示使用最近的 DNS 服务器将 DNS 名称解析为 IP

    址所需的时间。“DNS 查找”度量是指示 DNS 解析问

    题或 DNS 服务器问题的一个很好的指示器。

    显示与包含指定 URL Web 服务器建立初始连接所需

    的时间。连接度量是一个很好的网络问题指示器。此

    外,它还可表明服务器是否对请求作出响应。

    显示从初始 HTTP 请求(通常为 GET)到成功收回来

    Web 服务器的第一次缓冲时为止所经过的时间。第

    一次缓冲度量是很好的 Web 服务器延迟和网络滞后指

    示器。

    也有可能你的程序中client的时间最长.或者其他的,这些就要根据你自己的测试结果来分析了.下面我们来看一下CPU,内存.硬盘的瓶颈分析 (待续)

  • Loadrunner中Std性能指标的含义

    2009-03-09 16:28:15

    STD是标准偏差值(Standard Deviation),主要用来反应样本空间分布情况。各个样本越接近平均值,STD越小,

            在LoadRunner中,STD越小,说明系统测试时的原始数据分布比较集中,基本接近平均值。所以这个值很小时,一定程度上可以表明系统更加稳定。

          计算方法如下:

            S2= Σ( Xi − X )2 / n − 1         

            式中X : 样本平均值
            S : 标准偏差
            n : 样本数量

  • LoadRunner创建测试脚本(转)

    2009-03-09 16:27:21

    第2章

    LoadRunner入门

    LoadRunner是一个强有力的压力测试工具。它的脚本可以录制生成,自动关联;测试场景可以面向指标,多方监控;测试结果可以用图表显示,并且可以拆分组合。

    作为专业的性能测试工具,通过模拟成千上万的用户对被测系统进行操作和请求,能够在实验室环境中重现生产环境中可能出现的业务压力,再通过测试过程中获取的信息和数据来确认和查找软件的性能问题,分析性能瓶颈。

    文本框:  
图2-1  脚本开发

2.1  LoadRunner创建测试脚本

    开发LoadRunner脚本需要经过图2-1所示的几个步骤。

    在录制脚本时要遵循以下录制原则:

    1.提高脚本执行效率

    所录制的脚本内容要精练,而且是用户的真实操作,不可增加多余或重复性的操作,这样的脚本执行起来更能准确地模拟用户的真实行为,减少了执行时间,执行结果更准确。

    2.录制具有代表性的功能

    在一个软件中有很多不同的功能,但要录制所有的功能几乎是不可能的,所以要选择常用的、使用频率较高的业务功能来进行测试。

    3.选择具有影响的事务

    测试人员要对被测功能具有一定的认识和了解,选择一些对于整个测试过程中有影响的事务来测试,否则测试结果是无意义的。

    当启动Visual User Generator后会出现选择脚本类型的对话框,在此对话框中,请选择我们常用的脚本类型,也就是Web(HTTP/HTML)协议,这是最为常见的。以下脚本介绍以此类型为例。

    2.1.1  录制普通脚本

    启动Visual User Generator,在弹出的对话框中选择需要新建的协议脚本,通过VuGen可以采用单协议或多协议模式,进行脚本的录制。选择单协议还是多协议,根据测试程序的实际需要而定。

    1.选择协议

    采用单协议模式时,VuGen将只录制指定的协议;采用多协议模式时,VuGen将录制多个协议中的操作。下列协议支持多协议脚本:COM、FTP、IMAP、Oracle NCA、POP3、RealPlayer、Window Sockets(原始)、SMTP和Web。“双协议Web/Web Services”的引擎使用一种不同的机制,应视为单协议,不能与其他多协议类型结合使用。

    各种Vuser类型之间的另一个区别是多操作支持功能。大多数协议都可支持多个操作部分,如Oracle NCA、Web、RTE、General(C Vusers)、WAP、i-Mode 和VoiceXML等协议。

    对于大多数Vuser类型,在每次录制时都会新建一个Vuser脚本,而不能在现有脚本中进行录制。但是,在录制Java、CORBA-Java、RMI-Java、Web、WAP、i-mode、Voice XML、Oracle NCA或RTE Vuser脚本时,可以在现有脚本中进行录制。

    创建脚本时,单击“New”(新建)打开“New Virtual User”(新建Vuser)对话框,该对话框可提供选择录制脚本协议的快捷方式。

    (1)单协议脚本:创建单协议Vuser脚本,这是“Startup”(启动)对话框打开时的默认选项。从Vuser生成器的“类别”中进行选择,并选择录制脚本的协议,如图2-2所示。

    图2-2  选择单协议脚本

    (2)多协议脚本:创建多协议Vuser脚本,VuGen将显示所有可用的协议。选择一个协议后,单击右箭头,将其移入“Selected Protocols”(选定的协议)部分中,如图2-3所示。

    图2-3  选择多协议脚本

    (3)使用最近使用过的协议新建脚本:从最近创建脚本的协议中选择已经使用过的协议,并且这些协议已经体现了录制脚本类型,如图2-4所示。

    图2-4  选择最近使用的协议

    2.开始录制

    假设需要测试的是Web应用,选择“Web(HTTP/HTML)”协议,单击“OK”按钮确定后,进入主窗体,如图2-5所示。

    图2-5  录制结果的主窗体

    单击工具栏中“Start Record”按钮,根据录制的对话框,输入要测试程序的地址,开始进行录制。通过“Vuser”菜单来启动录制脚本的命令,如图2-6所示。

    图2-6  选择录制按钮

    也可以在工具栏中直接单击“Start Recording”按钮,但录制之前还要进行相应的设置,如图2-7所示。

    图2-7  录制配置界面

    (1)环境设置

    首先,勾选“Record the application startup”,单击“OK”后,就会自动启动要测试的程序,还可以选择要把录制的脚本放到哪一个部分,默认情况下是“Action1”。

    然后,单击左下角的“Options”按钮,进入录制环境设置界面,如图2-8所示。

    Ÿ   “Recording”标签页:默认情况下选择“HTML-based Script”,说明脚本中采用HTML页面的形式,这种方式的Script脚本容易维护和理解,推荐用这种方式录制。“URL-based Script”说明脚本中的表示采用基于URL的方式,WAS和ACT中的录制方式就是这种,这种方式看上去比较乱。

    其他标签页功能说明如下,如有需要可作相应的设置。

    Ÿ   “Browser”标签页:浏览器的选择。

    Ÿ   “Recording Proxy”标签页:浏览器上的代理设置。

    图2-8  环境设置界面

    Ÿ   “Advanced”标签页:可以设置录制时的思考时间(Think Time)、支持的字符集标准等。

    Ÿ   “Correlation”标签页:手工设置关联,通过关联可在测试执行过程中保存动态值。使用这些设置可以配置VuGen在录制过程中执行的自动关联的程度。

    (2)脚本内容

    在录制过程中,可以单击“Pause”(暂停录制)按钮,在脚本中插入事务、注释和集合,防止在录制完成后再插入这些事务找不到具体位置。当业务流程完成后,单击“Stop”(停止录制)按钮,会自动生成脚本,退出录制过程,如图2-6所示。

    单击“Save”(保存)按钮,起个与实际业务有关系的名字,保存到相应的位置。

    使用VuGen录制之后生成的每个Vuser脚本都至少包含vuser_init、一个或多个Actions及vuser_end等三部分。

    在通常情况下,将登录到服务器的活动记录在vuser_init部分中,将客户端活动录制到Actions部分中,并将注销过程录制到vuser_end部分中。因为运行多次迭代的Vuser脚本时,只有脚本的Actions部分重复,而vuser_init和vuser_end部分将不重复。

    脚本图例如图2-9所示。

    图2-9  脚本图例

    在录制脚本期间,发出的消息可以通过日志来查看,选择“View”>“Output Window”,然后选择“Recording Log”选项卡。可以在“Run time Setting”的“Log”选项卡中设置该日志的详细级别,如图2-10所示。

    图2-10  录制日志

    录制时,VuGen会创建一系列配置、数据和源代码文件。这些文件包含Vuser运行时和设置信息。VuGen会将这些文件连同脚本一起进行保存。

    至此,一个完整的Vuser脚本录制完成。

    多协议脚本的录制与单协议脚本的录制过程基本相同,只是比单协议脚本的录制多一个选项界面,如图2-11所示。

    在此界面中单击协议,可以进行添加和删除协议的操作。在协议前的复选框中打对号,即为选中,否则删除。

    图2-11  添加协议

    2.1.2  录制Web Services脚本

    在进行性能测试时,大部分对Web性能测试,选择“Web(HTTP/HTML)”协议即可,但录制完脚本后,回放脚本过程中有时会发生中断或停止的情况,查看错误时,如果无法找到SOAP文件字样时,就需要考虑更换脚本录制协议了。通常首先考虑更换Web Services协议,再次录制脚本,问题就相应解决了。

    在录制Web Services脚本前,首先对Web Services做一个简要的介绍,这样有助于读者或者测试人员能够更好地利用Web Services协议录制脚本。

    1.什么是Web Services

    Web Services是一种构建应用程序的普通模型,并能在所有支持Internet通信的操作系统上实施运行。Web Services令基于组件的开发和Web的结合达到最佳,基于组件的对象模型,如:分布式组件对象模型(Distributed Component Object Model, DCOM)、远程方法调用(Remote Method Invocation, RMI)、互联网内部对象请求代理协议(Internet Inter-Orb Protocol, IIOP)都已经发布很长时间,但是它们都依赖于特殊对象模型协议。而Web Services利用SOAP和XML对这些模型在通信方面作了进一步的扩展,以消除特殊对象模型的障碍。

    进一步地,Web Services还基于HTTP和SOAP协议,使得Web用户通过Web调用的方法使用SOAP和HTTP来调用远程对象,确保业务数据得以在Web上传输。

    2.Web Services结构

    客户根据WSDL描述文档,会生成一个SOAP请求消息。Web Services都是放在Web服务器(如IIS)后面的,客户生成的SOAP请求会被嵌入在一个HTTP POST请求中,发送到Web服务器,Web服务器再把这些请求转发给Web Services请求处理器。请求处理器的作用在于,解析收到的SOAP请求,调用Web Services,然后再生成相应的SOAP应答。Web服务器得到SOAP应答后,会再通过HTTP应答的方式把信息送回到客户端。

    3.Web Services体系

    Web Services体系主要包括以下几个方面:

    (1)Web Services包括3种组件。

    服务提供者:提供服务,进行注册以使服务可用;

    服务代理者:服务交换所,服务提供者和服务请求者之间的媒体;

    服务请求者:向服务代理请求服务,调用这些服务创建应用程序。

    (2)Web Services提供3种操作。

    发布/不发布(Publish/Unpublish):服务提供者向服务代理者发布(注册)服务或不发布(移去)这些服务的注册;

    发现(Find):由服务请求者向服务代理者执行发现操作,服务请求者描述要找的服务,服务代理者分发匹配的结果;

    绑定(Bind):在服务请求者和服务提供者之间绑定,这两部分协商以使请求者可以访问和调用提供者的服务。

    (3)UDDI规范

    统一描述、发现和集成(Universal Description Discovery and Integration, UDDI)是一个Web Services的信息注册规范,基于UDDI的Web Services注册可以被发现。UDDI的核心部分是UDDI业务登记逻辑,即在Web上有一种分布的注册服务,这种服务以一种通用的XML格式进行描述。通过XML中的结构化描述,可以很方便地在互联网上发现需要的数据,进而方便进行分析和操作。从概念上看,一个UDDI业务登记逻辑所提供的信息包括三个部分:“白页”包括地址、协议和已有标识;“黄页”包括基于分类标准的工业类型;“绿页”是关于企业所包含的服务技术信息,包括网络服务说明参考和根据发现机制对各种文件和网址提供的标识支持。

    (4)网络服务描述语言(WSDL)

    网络服务描述语言(Web Services Description Language, WSDL)遵循XML语法,为服务提供者提供了描述构建在不同协议或编码方式之上的Web Services请求基本格式的方法。WSDL用来描述一个Web Services能做什么,它的位置在哪里,如何调用它等。在假定以SOAP/HTTP/MIME作为远程对象调用机制的情况下,WSDL会发挥最大作用。UDDI注册描述了Web Services绝大多数方面,包括服务的绑定细节。WSDL可以看作是UDDI服务描述的子集。

    WSDL将服务定义为一个网络端点的集合,或者说端口的集合。在 WSDL 里面,端点及消息的抽象定义与它们具体的网络实现和数据格式绑定是分离的。这样就可以重用这些抽象定义:消息(需要交换的数据的抽象描述)和端口类型(操作的抽象集合)。针对一个特定端口类型的具体协议和数据格式规范构成一个可重用的绑定。一个端口定义成网络地址和可重用的绑定的连接,端口的集合定义为服务。因此,一个WSDL文档在定义Web Services时使用如下的元素:

    类型——使用某种类型系统定义数据类型的容器;

    消息——通信数据抽象的有类型的定义;

    操作——服务支持动作的抽象描述;

    端口类型——操作的抽象集合,该操作由一个或多个端点支持;

    绑定——针对一个特定端口类型的具体协议规范和数据格式规范;

    端口——单一的端点,定义成一个绑定和一个网络地址的链接;

    服务——相关端点的集合。

    不难看出,WSDL给客户提供了一个模板,方便客户描述和绑定服务。

    上面简单介绍了Web Services基本的知识,下面采用Web Services单协议进行简要的脚本录制,读者可结合录制脚本的过程进一步了解它,具体步骤如下:

    选择“开始”>“程序”>“LoadRunner”>“Virtual User Generator”(Vuser生成器),启动VuGen。在VuGen的“File”下拉菜单中选择“New”,新建一个脚本;从“Category”(类别)列表中选择“Web Services”协议,单击“OK”按钮开始录制Vuser脚本。

    首先配置Web Services录制向导,配置程序录制的方式。“Record Client Application”方式是通过客户端进行录制的,“Scan WSDL file”方式需要录入WSDL文件才可录制,在这里选择“Record Client Application”进行录制,如图2-12所示。

    “Specify WSDL files for recording”向导用于配置WDSL文件,由于选择“Record Client Application”的录制方式,所以在此选择“Do not use WSDL file during recording”,表示不利用WSDL文件进行录制,如图2-13所示。

       

    图2-12  Web Services录制界面1              图2-13  Web Services录制界面2

    “Specify application to record”向导用于配置程序的访问地址、浏览器和录制脚本中的一些初始化设置。在URL中添加测试程序的访问地址;如果程序需要其他的浏览器,选择“Record any application”进行其他浏览器的设置,这里不需要特殊的浏览器,所以不选择此项;“Record into action”选项用于指定把录制的脚本放到哪一个部分,一般初始化放在vuser_init中,循环部分在Action中,结束退出部分放在vuser_end中,如图2-14所示。如有需要请单击后面的“Advanced Details”按钮,可以详细地配置“Options Recording”用来录制脚本,这里不介绍Options Recording,在以后的章节中有详细的介绍。单击“完成”按钮即可完成Web Services的向导配置。

    然后VuGen将根据程序的访问地址自动启动应用程序,并显示“Recording…”(录制)工具栏,开始脚本的录制,如图2-15所示。

    图2-14  Web Services录制界面3

    图2-15 “Recording…”工具栏

    在整个操作过程完成后,单击“停止”按钮,脚本录制结束,LoadRunner自动把录制的内容保存在脚本中。在录制完毕的脚本中会出现一些函数,在后面章节中会详细介绍这些函数的使用方法。

    一个生成的Web Services的脚本节选如图2-16所示。

    图2-16  Web Services脚本图例

    这样就完成了Web Services单协议脚本的录制过程。

    2.1.3  回放脚本及调试

    录制完脚本后,需要单机运行一下脚本,因为在录制脚本的过程中可能会出现错误。例如:有些连接、图片或界面无法找到,需要调试;有些地方需要参数化,只有唯一值才能执行通过;还有可能回放脚本时出现-404、-500等错误页面,发生超时等现象。这时就需要把这些问题解决掉。

    单击工具栏中的“Compile”按钮,查看脚本中是否有语法或者乱码错误,如果出现错误需要手工及时调试,如果没有错误,在执行日志中显示“No error detected”消息提示。

    然后,单击工具栏中的“Run”按钮,开始执行脚本,在执行脚本期间,同样可以通过日志来查看发出的一些消息。选择“View”>“Output Window”,再选择“Execution Log”选项卡。

    如果有错误,VuGen将会提示错误。双击错误提示,VuGen能够定位到出现错误的那一行,如图2-17所示。

    图2-17  提示运行脚本错误

    单机运行测试脚本后,如果编译通过,就会开始运行,运行结果如图2-18所示。

    在每次单击回放脚本后,都会出现如图2-18所示的运行结果页。在结果页中可以清楚地看到脚本运行的情况,显示整个运行过程中出现成功、失败和警告情况各自的运行时间,并且记录下整个运行开始、结束的日期和时间。

    图2-18  单机运行脚本结果

    如果整个运行过程成功,在页面的左侧是整个脚本的树型结构,显示出的每个脚本的控件名称前都有绿色对号的标志,例如图片、链接、提交表单等,如图2-19所示。

    图2-19  运行成功时的结果页

    单击某个控件,在其右边便显示出其控件的页面或相应的运行步骤,如图2-20所示。

    图2-20  显示运行成功步骤

    在此结果页中还可以检测脚本中控件或者其他错误,如果脚本回放出现错误的话,会在相应控件前出现红色叉号的错误提示,如图2-21所示。

    图2-21  运行失败的结果页

    单击其控件后,在右边出现脚本未通过的具体原因,以便查找出错位置进行改正,如图2-22所示。

    图2-22  定位运行失败

    脚本录制、调试完成后,还可以通过插入事务、集合点等操作来完善、增强脚本。

    2.1.4  完善脚本

    为什么要完善增强脚本呢?

    首先,为了衡量服务器的性能,需要定义事务(Transaction)。例如在脚本中有一个数据查询操作,为了衡量服务器执行查询操作的性能,可以把这个操作定义为一个事务。这样在运行测试脚本时,LoadRunner运行到该事务的开始点时,就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在测试结果中会有反映。LoadRunner允许在脚本中插入不限数量的事务。

    在方案执行期间,控制台将测量执行每个事务所用的时间。方案运行后,可使用LoadRunner的图和报告来分析各个事务的服务器性能。

    其次,使用集合点是为了衡量在加重负载的情况下服务器的性能情况。在测试计划中,可能会要求系统能够承受多人同时提交数据,LoadRunner通过在提交数据操作前面加入集合点的方法,检查同时有多少用户运行到集合点,人数不足时,LoadRunner会命令已经到集合点的用户等待,当在集合点等待的用户达到要求容纳的人数(如1000人)时,LoadRunner向系统提交数据。

    在脚本中加入集合点后,控制台运行脚本时,可以对集合点进行策略设置,这样就可以根据实际情况在系统上模拟用户负载了。

    再次,在录制过程中最好加入注释,因为在录制完脚本后看到的都是脚本代码,操作复杂的业务无法找到相应的位置进行关联或者参数化的动作,这时,注释就显得尤为重要。

    最后,LoadRunner提供了很多函数,有些函数是在录制时根据不同的协议自带的函数。其中有些函数是供手工添加的,这就要根据实际情况进行添加了。例如脚本关联,有些变量无法实现系统自动关联,只能添加函数进行手动关联。

    在录制完成的脚本中,还可以根据实际情况,添加事务、集合点、注释、函数等内容来增强脚本,进一步完善。下面逐一进行介绍。

    1.插入事务

    脚本中插入事务既可以在录制过程中直接插入,也可以在脚本录制结束后经编辑插入。建议采用在脚本的录制过程中插入事务的方法,这样不至于遗漏程序中应插入事务的操作。

    在需要插入事务的操作前,通过工具栏上的“Start Transaction”(开始事务)按钮插入事务,事务的名称最好有意义,这样在最后分析系统时,有助于发现系统的瓶颈点是否在具体的事务中。

    具体的操作方法如下:在录制Vuser脚本时,在需要定义事务的操作前面,单击“录制”工具栏上的“Start Transaction”菜单项,将打开“Start Transaction”对话框,如图2-23所示。

    接着出现如图2-24所示的对话框。

      

    图2-23  插入事务开始点                    图2-24  输入事务开始名称

    在给事务起名字时,事务名必须以字母或数字开始,可以包含字母、数字或者下列字符:!、$、%、&、'、-、[、^、_、`、<、>、{、}、|或~。填写好事务名称后,就可以对系统进行操作,单击“OK”接受该事务名称。

    VuGen将自动在Vuser脚本中插入事务的起始标志(“lr_start_transaction”)和终点标志(“lr_end_transaction”)。起点和终点之间的内容就是录制或者编写的测试事务脚本。

    在录制脚本过程中,随时可以单击“录制”工具栏上的“End Transaction”菜单项,结束录制,如图2-25所示。

    图2-25  插入事务结束点

    此时会出现如图2-26所示的结束事务的对话框。

    单击“Transaction Name”下拉框的箭头获得已打开事务的列表,选择要关闭的事务。事务的状态在默认情况下是LR_AUTO。一般情况下,也不需要修改,除非在手工编写代码时,有可能需要手动设置事务的状态。单击“OK”按钮接受该事务名称。

    脚本中事务的代码如图2-27所示。

                   

    图2-26  选择要结束事务的名称                        图2-27  插入事务图例

    当结束事务时,通过工具栏上的“End Transaction”按钮,结束事务。在结束列表中会显示最近定义的事务的名称,只要选择自己新建的事务的名称即可结束该事务。

    这样就完成了事务的插入操作。

    2.插入集合点

    集合点只能在Action中插入,不能在vuser_init或vuser_end中插入。

    在需要插入集合点的操作前,通过工具栏上的集合点按钮插入集合点,并在集合点的输入框中输入集合点的名称。集合点的名称最好是有意义的名称,这样有助于在系统分析时,分析系统的瓶颈所在。

    插入集合点具体的操作方法如下:在录制Vuser脚本时,在需要插入集合点的位置,单击“录制”工具栏上的“集合点”按钮或单击“Insert”菜单下的“Rendezvous”子菜单。将打开“Rendezvous”(集合点)对话框,如图2-28所示。

    图2-28  插入集合点

    接着,出现如图2-29所示的对话框。输入该集合点的名称,注意,名称最好能够清楚地说明该集合点所完成的动作。脚本中集合点的代码如图2-30所示。

            

    图2-29  输入集合点名称                图2-30  插入集合点图例

    3.插入注释

    注释可以在录制脚本时插入,也可以在脚本录制后插入,其顺序对程序分析没有影响。在需要插入注释的操作前,通过工具栏上的“注释”按钮或者“Insert”菜单下的“Comment”子菜单插入注释。在“Insert Comment”对话框中输入对操作的注释,以便于对脚本的重复使用。

    在需要插入注释的位置,通过菜单或者工具栏操作,如图2-31所示。

    图2-31  插入注释

    接着,出现如图2-32所示的对话框。脚本中注释的代码如图2-33所示。

                     

    图2-32  输入注释内容                           图2-33  插入注释图例

    4.插入函数

    在录制脚本的过程中,根据不同的协议,会用到不同的函数,在此介绍几个脚本中比较常见的函数,希望初学者能对插入函数的基本操作方法有大概的了解。详细的函数调用方法,会在第6章的“LoadRunner函数介绍”中说明,这里不再赘述。

    (1)web_custom_request:允许使用HTTP支持的任何方法来创建自定义HTTP请求。

    (2)web_image:在定义的图像上模拟鼠标单击。

    例子:

    web_image("46.gif",

    "Src=frame/sapphire/image/tree/15/46.gif",

    "Ordinal=2",

    "Snapshot=t4.inf",

    EXTRARES,

    "Url=frame/sapphire/style/controls.css","Referer=http:// 192.168.1.10:7001/mail/login.do", ENDITEM,

    "Url=frame/sapphire/style/custom.css",

    "Referer=http://192.168.1.10/mail/login.do ", ENDITEM, LAST);

    (3)web_link:在定义的文本链接上模拟鼠标单击。

    例子:

        web_link("MAIL",

        "Text= MAIL ",

        "Snapshot=t3.inf",

        EXTRARES,

        "Url=frame/sapphire/style/menu.css",

    "Referer=http://192.168.1.10:7001/mail/login.do ", ENDITEM,

        "Url=frame/sapphire/style/panel.css",

    "Referer=http:// 192.168.1.10:7001/mail/login.do ", ENDITEM, LAST);

    (4)web_submit_data:执行“无条件”或“无上下文”的表单。

    例子:

    web_submit_data("j_security_check",

    "Action=http://192.168.1.121:10001/Application/j_security_check",

        "Method=POST",   

        "RecContentType=text/html",

        "Referer=http://192.168.1.121:10001/Application/login.jsp; jsessionid=013613D116183D08E6C0C05A1310B70F.node1",

        "Snapshot=t2.inf",

        "Mode=HTTP",

        ITEMDATA,

        "Name=j_username", "Value=mayi", ENDITEM,

        "Name=j_password", "Value=1", ENDITEM,

        "Name=prelogon", "Value=登录", ENDITEM,

        LAST);

    (5)web_submit_form:模拟表单的提交。

    例子:

    web_submit_form("zxlogin.do",

    "Snapshot=t2.inf",

    ITEMDATA,

    "Name=username", "Value=001_yangzhifang", ENDITEM,

    "Name=password", "Value=1", ENDITEM,

    "Name=btnlogin", "Value=登录", ENDITEM,

    EXTRARES,

    "Url=frame/images/quick_1_01.gif",

    "Referer=http://192.168.1.103:8080/Application/mail/fox/zxMain.jsp",ENDITEM,

    "Url=frame/images/quick_2_03.gif",

    "Referer=http://192.168.1.103:8080/Application/mail/fox/zxMain.jsp",ENDITEM,LAST);

    (6)web_url:加载由“URL”属性指定的URL。

    例子:

    web_url("Application",

    "URL=http://192.168.1.121:10001/Application",

    "Resource=0",

    "RecContentType=text/html",

    "Referer=",

    "Snapshot=t1.inf",

    "Mode=HTTP",

    LAST);

    (7)web_add_cookie:添加新的Cookie或修改现有的Cookie。

    例子:

    web_add_cookie("cnt_uid_www=9f9e130439330156c92c51430b3e0120; DOMAIN=top2007.csdn.net");

    web_add_cookie("IMMsgID_d41d8cd98f00b204e9800998ecf8427e=70; DOMAIN=top2007.csdn.net");

    (8)web_set_timeout:指定Vuser等待执行指定任务的最长时间。

    2.1.5  脚本回放问题解决

    在运行脚本回放过程中,有时会出现错误,这在实际测试中是不可避免的,毕竟自动录制生成的脚本难免会有问题,需要运行脚本进行验证,把问题都解决后才加入到场景中进行负载测试。下面结合常用的协议(如Web、Web Services协议)录制的脚本进行回放时出现的问题介绍一下解决的方法。

    需要注意的是,回放脚本时出现的错误有时是程序自身的原因导致的,因此在解决脚本回放问题前必须保证程序录制出的脚本是正确的。

    1.LoadRunner超时错误:在录制Web协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同。

    错误现象1:Action.c(16): Error -27728: Step download timeout (120 seconds) has expired when downloading non-resource(s)。

    错误分析:对于HTTP协议,默认的超时时间是120秒(可以在LoadRunner中修改),客户端发送一个请求到服务器端,如果超过120秒服务器端还没有返回结果,则出现超时错误。

    解决办法:首先在运行环境中对超时进行设置,默认的超时时间可以设置长一些,再设置多次迭代运行,如果还有超时现象,需要在“Runtime Setting”>“Internet Protocol:Preferences”>“Advanced”区域中设置一个“winlnet replay instead of sockets”选项,再回放是否成功。

    错误现象2:Action.c(81):Continuing after Error -27498: Timed out while processing URL=http://172.18.20.70:7001/workflow/bjtel/leasedline/ querystat/ subOrderQuery.do

    错误分析:这种错误常常是因为并发压力过大,服务器端太繁忙,无法及时响应客户端的请求而造成的,所以这个错误是正常现象,是压力过大造成的。

    如果压力很小就出现这个问题,可能是脚本某个地方有错误,要仔细查看脚本,提示的错误信息会定位某个具体问题发生的位置。

    解决办法:例如上面的错误现象问题定位在某个URL上,需要再次运行一下场景,同时在其他机器上访问此URL。如果不能访问或时间过长,可能是服务器或者此应用不能支撑如此之大的负载。分析一下服务器,最好对其性能进行优化。

    如果再次运行场景后还有超时现象,就要在各种图形中分析一下原因,例如可以查看是否服务器、DNS、网络等方面存在问题。

    最后,增加一下运行时的超时设置,在“Run-Time Settings”>“Internet Protocol:Preferences”中,单击“options”,增加“HTTP-request connect timeout” 或者“HTTP-request receive”的值。

    2.LoadRunner脚本中出现乱码:在录制Web协议脚本时出现中文乱码,在回放脚本时会使回放停止在乱码位置,脚本无法运行。

    错误现象:某个链接或者图片名称为中文乱码,脚本运行无法通过。

    错误分析:脚本录制可能采用的是URL-based script方式,如果程序定义的字符集合采用的是国际标准,脚本就会出现乱码现象。

    解决办法:重新录制脚本,在录制脚本前,打开录制选项配置对话框进行设置,在“Recording Options”的“Advanced”选项里先将“Surport Charset”选中,然后选中支持“UTF-8”的选项。

    3.LoadRunner HTTP服务器状态代码:在录制Web协议脚本回放脚本的过程中,会出现HTTP服务器状态代码,例如常见的页面-404错误提示、-500错误提示。

    错误现象1:-404 Not Found服务器没有找到与请求URI相符的资源,但还可以继续运行直到结束。

    错误分析:此处与请求URI相符的资源在录制脚本时已经被提交过一次,回放时不可再重复提交同样的资源,而需要更改提交资源的内容,每次回放一次脚本都要改变提交的数据,保证模拟实际环境,造成一定的负载压力。

    解决办法:在出现错误的位置进行脚本关联,在必要时插入相应的函数。

    错误现象2:-500 Internal Server Error服务器内部错误,脚本运行停止。

    错误分析:服务器碰到了意外情况,使其无法继续回应请求。

    解决办法:出现此错误是致命的,说明问题很严重,需要从问题的出现位置进行检查,此时需要此程序的开发人员配合来解决,而且产生的原因根据实际情况来定,测试人员无法单独解决问题,而且应该尽快解决,以便于后面的测试。

    4.LoadRunner请求无法找到:在录制Web协议脚本回放脚本的过程中,会出现请求无法找到的现象,而导致脚本运行停止。

    错误现象:Action.c(41): Error -27979: Requested form. not found [MsgId: MERR-27979]

    Action.c(41): web_submit_form. highest severity level was "ERROR",0 body bytes, 0 header bytes  [MsgId: MMSG-27178]"

    这时在tree view中看不到此组件的相关URL。

    错误分析:所选择的录制脚本模式不正确,通常情况下,基于浏览器的Web应用会使用“HTML-based script”模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的应用中使用HTTPS安全协议,这时则使用“URL-based script”模式进行录制。

    解决办法:打开录制选项配置对话框进行设置,在“Recording Options”的“Internet Protocol”选项里的“Recording”中选择“Recording Level”为“HTML-based script”,单击“HTML Advanced”,选择“Script. Type”为“A script. containing explicit”。然后再选择使用“URL-based script”模式来录制脚本。

    5.LoadRunner不执行检查方法:在录制Web协议脚本中添加了检查方法Web_find,但是在脚本回放的过程中并没有执行。

    错误现象:在脚本中插入函数Web_find,在脚本中设置文本以及图像的检查点,但是在回放过程中并没有对设置的检查点进行检查,即Web_find失效。

    错误分析:由于检查功能会消耗一定的资源,因此LoadRunner默认关闭了对文本以及图像的检查,所以在设置检查点后,需要开启检查功能。

    解决办法:打开运行环境设置对话框进行设置,在“Run-time Settings”的“Internet Protocol”选项里的“Perference”中勾选“Check”下的“Enable Image and text check”选项。

    6.LoadRunner回放Web Services协议脚本错误:LoadRunner 8.0版本在录制Web Services协议的脚本时正常,但在回放时会出现错误,提示停止脚本运行。

    错误现象:利用LoadRunner 8.0版本来录制Web Services协议的脚本没有任何错误提示,回放脚本时会出现如下错误提示“Error:server returned an incorrectly formatted SOAP response”。

    错误分析:出现此错误的原因是LoadRunner8.0在录制Web Services协议的脚本时存在一个缺陷:如果服务器的操作系统是中文的,VuGen会自动将WSDL文件的头改为<?xml version="1.0"encoding="zh_cn" ?>,所以才会有此错误提示。

    解决办法:下载两个补丁,分别为“LR80WebServicesFPI_setup.exe”和“lrunner_web_ services_patch_1.exe”安装上即可。

  • LoadRunner创建运行场景

    2009-03-09 16:25:28

    2.2  LoadRunner创建运行场景

    在前面脚本录制完以后,就需要在控制台(Controller)运行这些脚本,通过运行Vuser产生实际的负载。在控制台中就需要根据实际情况指定运行方案,监视性能指标。

    2.2.1  创建方案

    要开始创建场景,请打开控制台并创建一个新的场景。选择“开始”>“程序”>“LoadRunner”>“Controller”,打开控制台,显示“New Scenario”(新建方案)对话框,如图2-34所示。

    图2-34  创建方案

    1.选择方案类型

    在方案选择中,有“手动方案”(Manual Scenario)或“面向目标的方案”(Goal-Oriented Scenario)两种类型供用户选择。

    选择手动方案,则可以自行创建方案。方法是定义要运行的Vuser组数并建立LoadRunner运行这些组的计划;也可以通过定义方案中要使用的Vuser的总数,并将占总数一定百分比的Vuser分配给每个脚本,从而创建手动方案。

    选择面向目标的方案,则可以定义通过测试要实现的目标,LoadRunner将根据这些目标自动生成方案。

    2.选择运行脚本

    在对话框左边的窗口(Available Scripts)中显示出录制好的脚本名称,选择好要运行的脚本后,单击“Add”按钮,此脚本便被添加到右边的窗口中,即被添加到控制台中。如果要在下次新建方案时绕过该对话框,请清除“Show at startup”复选框。生成方案后,也可以稍后再添加脚本。单击“OK”按钮关闭该对话框,一个新的方案就建立完成了。

    3.控制台窗口

    当一个新方案建立好后,就会进入控制台的方案设计的页面,有两个选项卡页面能进行相应配置,分别为“Design”(设计)和“Run”(运行)。

    4.“Design”选项卡

    “Design”选项卡包括了“Scenario Schedule”(方案计划)窗格、“Scenario Groups”(方案组)窗格和右下角的一组功能按钮,如图2-35所示。

    图2-35 “Design”选项卡

    (1)“Scenario Schedule”窗格中显示与计划配置文件有关的信息。

    Ÿ   Schedule Name(计划名):这里使用默认计划。

    Ÿ   Mode(方案计划):显示方案计划的信息,默认为“Scenario Scheduling”。

    Ÿ   Scenario Duration(持续时间):根据配置Schedule中的持续方式来显示,这里显示为“直到完成”(Until Completion)。

    Ÿ   Load Behavior(加载行为):和配置Schedule有关,指定以什么样的加载方式开始运行。

    (2)“Scenario Groups”窗格列出了所有启用和禁用的Vuser脚本、脚本路径、负载生成器,以及分配给每个脚本的Vuser在总数中所占的百分比。

    Ÿ   Group Name(组名):脚本的名字。

    Ÿ   Script. Path(脚本路径):在这里显示脚本的保存位置。

    Ÿ   Quantity(数量):在这里可以填写每个脚本的并发人数,如果是百分比的模式,在这里修改自动分配的总人数的比例。

    Ÿ   Load Generators(负载生成器):可以选择脚本在哪个负载生成器中执行脚本,在这里显示已经被启用的负载生成器名称是“localhost”。

    (3)功能按钮

    Ÿ   Add Group/Remove Group(添加/删除组)按钮

    使用“添加组”对话框将脚本添加到相应的方案中。单击“Scenario Groups”窗格右侧的“Add Group”按钮。将打开“Add Group(添加组)”对话框,如图2-36所示。

    图2-36 “Add Group(添加组)”对话框

    在“Group Name”(组名)框中,输入新建Vuser组的名称,从“Load Geanerator Name”(负载生成器名)列表中选择负载生成器,在下面的“Select Script”窗口中选择该组的脚本名称,确定后便建立起新的Vuser组。

    在图2-35中,选择某个组,单击“Remove Group(删除组)”按钮,去掉不运行的脚本组。

    在图2-35中,单击“Generators(配置负载生成器)”按钮后,出现配置窗口如图2-37所示。单击“Add”按钮,将打开“Add New Load Generator(添加负载生成器)”对话框,如图2-38所示。

    在“Name”框中键入负载生成器的名称。在“Platform”框中,选择负载生成器运行的平台类型(即选择操作系统,例如Windows)。

    在默认情况下,LoadRunner在方案执行期间将把临时文件存储在负载生成器上的临时目录中(由负载生成器的TEMP或TMP环境变量指定)。要覆盖特定负载生成器的默认设置,请在“Temporary directory”(临时目录)框中键入一个位置。

     

    图2-37  负载生成器配置                      图2-38  添加负载生成器

    要允许负载生成器参与到方案中,请选中“Enable load generator to take part in the scenario”选项。

    单击“More”(更多)按钮可以展开该对话框并显示“Group Information”(组信息)选项卡,显示负载生成的一些基本信息,在这里不用对它进行设置,如图2-39所示。

    单击“OK”按钮以关闭此“添加负载生成器”对话框,完成新的负载生成器的创建。

    图2-39  负载生成器信息

    将负载生成器设置好后,如果要使用则需要把每个负载生成器连通起来,即使所创建的负载生成器参与到方案中,进而产生负载压力。

    在此处还可以单击“View Script”按钮查看和修改组中每个脚本。注意,修改后的脚本需要重新选择并添加。单击“Run-Time Settings”按钮,可以对运行环境做重新修改配置。

    5.“Run”选项卡

    “Run”选项卡的窗口也分为三个部分,分别为Scenario Groups(方案组)、Scenario Status(方案状态)和Graphs(图形),如图2-40所示。

    (1)在“Scenario Groups”(方案组)中,显示运行脚本的一些基本信息,例如脚本名称、每个脚本并发人数等。

    (2)在“Scenario Status”(方案状态)中,显示整个运行过程中的基本属性。

    Ÿ   Running Vusers(运行Vuser):场景运行的并发人数。

    Ÿ   Elapsed Time(已用时间):在运行过程中显示整个场景运行的实时时间。

    图2-40  运行的脚本组合

    Ÿ   Hits/Second(每秒点击次数):显示运行过程中每秒点击数量(计算依据为最近60秒内的实时数据的平均值)。

    Ÿ   Passed Transactions(通过的事务):根据事先定义好的事务,运行过程中显示通过事务的数量,如果双击其后面的类似放大镜的按钮,可以在弹出的对话框中详细看到哪个事务通过。

    Ÿ   Failed Transactions(失败的事务):在此栏中可以看到没有通过的事务数量及详细信息。

    Ÿ   Errors(错误):在运行过程中出现的错误将在此报出,根据事先定义好的错误级别,弹出的错误输出窗口,可以确定错误的原因及发生的具体位置,供运行场景后查看,快速确定问题。

    (3)在“Graphs”(图形)中,运行过程中一些性能指标将通过图形显示出来。

    在默认情况下,LoadRunner的“运行”视图中将显示“Running Vusers”(正在运行的Vuser)、“Trans Response Time”(事务响应时间)、“Hits per Second”(每秒点击次数)和“Windows Resource”(Windows资源)等4个图。通过单击树视图中的其他图并将其拖至Graph区域,可以显示这些图。也可以使用“打开新图”对话框打开新的图。

    方案运行时,Vuser和负载生成器会向控制台发送错误、通知、警告、调试和批处理消息。可以在“输出”窗口(“View”>“Output”)中查看这些消息,如图2-41所示。此图仅是作为例子出现,在遇到实际的错误时,可能出现的错误与图中显示的不一致,这里只是为了让大家对此窗口有所了解。

    图2-41  输出消息的窗口

    文本框:  
图2-42  新建计划

2.2.2  计划方案

    在“Scenario Schedule”(方案计划)窗格的“Schedule Name”(方案名)框中,选择“New Schedule”(新建计划),将打开“New Schedule”(新建计划)对话框,如图2-42所示。

    在“Name”文本框中,填入新计划的名称,然后单击“OK”按钮,将打开“Schedule Builder”(计划生成器)对话框,可以对方案计划进行编辑,如图2-43所示。

    图2-43 “Schedule Builder”(计划生成器)对话框

    Schedule Name(计划名称):选择要用于方案的计划的名称,有“Rump Up”(加压)、“Duration”(持续时间)和“Rump Down”(缓慢加压)三个默认的名称供选择。“加压”将以相对步调增加释放的Vuser数,“缓慢加压”将以较慢的步调增加释放的  Vuser数。

    Schedule Definition(计划定义):提供“Schedule by Scenario”(按方案计划)和“Schedule by Group”(按组计划)两种方案计划供选择。

    不同的计划下面所显示的选项卡个数也不同,“按组计划”比“按方案计划”多一个“Start Time(开始时间)”选项卡,其他的选项卡的设置基本相同。

    1.按方案计划

    选择按方案计划进行加压设置,如图2-44所示(即图2-43的左半一部分)。

    在图2-43所示的加压页面中有两个选项可供选择:默认为第一项(Load all Vusers Simultaneously),即同时启动方案中的所有Vuser;第二项设置开始运行的加压方式(Start…Vuser every…),根据实际需要来设置多少个用户某一时间同时运行,并在两次加压之间等待指定的时间。例如:每10秒钟内加载20个用户,用户数呈阶梯形上升,直到达到Vuser的最大数。

    “Duration”(持续时间)选项卡的设置如图2-45所示。

      

    图2-44  按方案计划加压设置                 图2-45  按方案计划的持续时间设置

    当加压人数到达规定的并发最大人数时,开始执行场景,在此处设置运行场景的时间,如果在脚本中设置好迭代的次数,便可以选择第一项(Run until completion),运行直到任务结束才停止,如果规定在某段时间一直执行场景,便可以选择第二项(Run for),指定运行的时间。第三项为运行不停止(Run indefinitely),如果有特殊情况才选择此项。

    持续时间设置将覆盖Vuser迭代设置。这意味着,如果将持续时间设为5分钟,那么Vuser将继续在5分钟时间内运行尽可能多的迭代,即使运行时设置仅指定一次迭代。

    “Ramp Down”(减压)选项卡页面如图2-46所示。

    图2-46  按方案计划减压设置

    当场景运行停止,在此处设置场景结束方式,默认为第一项(Stop all Vusers simultaneously),即为场景停止,所有的用户也同时停止操作。第二项(Stop…Vusers every…)设置在指定的时间内停止Vuser数目,可调整在两次停止之间填写间隔时间,例如图2-46中显示的方案,每30秒停止5个用户,直到全部用户都停止时场景结束。另外,仅当在“Duration”选项卡中选中了第二个选项时,才使用“Ramp Down”选项卡设置。

    2.按组计划

    下面选择按组计划进行加载设置,“Start Time”(开始时间)选项卡页面如图2-47所示。与按方案计划的不同之处在于,按组计划可以对多个脚本进行开始时间的配置,设置方式共有三种(对应图2-47的三项):

    第一项“Start at the beginning of the scenario”,所有的组和方案一同开始。

    第二项“Start…after the scenario begins”,当方案开始后,指定每组开始前等待的时间量。

    第三项“Start when group…finishes”,设置该组在哪个组运行完成后再开始运行。

    “Ramp Up”(加压)选项卡如图2-48所示。

     

    图2-47  按组计划的开始时间设置                  图2-48  按组计划的加压设置

    此处的加压设置,和按方案设置加载方式一样,只不过需要对每个组的脚本分别进行设置。

    “Duration”(持续时间)选项卡页面如图2-49所示。设置每组脚本运行的时间和按方案计划的设置方式一样。

    “Ramp Down”(减压)选项卡页面如图2-50所示。以与按方案计划同样的方式,对每组进行减压设置。

    如果是面向目标的方案,不可以选择按组分配进行设置。

     

    图2-49  按组计划的持续时间设置                 图2-50  按组计划的减压设置

    3.延迟时间设置

    在图2-43所示的计划生成器的页面中,单击“Scenario Start Time”按钮,设置延迟时间方案。打开“Scenario Start(方案开始)”对话框后,其中已选中默认选项“Without delay”(无延迟),如图2-51所示。

    文本框:  
图2-51  按组计划的延迟时间设置

选择第二项,输入要将方案的开始时间延迟的时间量。

    选择第三项,可指定方案开始的具体时间和日期。

    在图2-43所示的计划生成器的页面中,右下方有个“Load Preview”(加载预览图),根据设置的方案,显示已定义的方案计划图。

    2.2.3  配置方案

    1.配置方案运行时设置

    选择“Tools”>“Options”。在“Options”对话框有“Run-Time Settings”(运行时设置)、“Timeout”(超时)、“Run-Time File Storage”(运行时文件存储)、“Path Translation Table”(路径转换表)等选项卡。

    (1)“Run-Time Settings”选项卡

    “Run-Time Settings”(运行时设置)选项卡如图2-52所示。

    Ÿ   Vuser Quota(Vuser配额):要防止系统过载,可以设置Vuser活动的配额。Vuser配额适用于所有负载生成器上的Vuser。其中,“Number of Vusers that may be initialized at one time all load generators”(一次可以初始化的Vuser数——所有负载生成器)用来设置负载生成器一次可以初始化的最大Vuser数,默认的最大数目为999。

    图2-52  运行时设置

    Ÿ   When stopping Vusers:此组合框中的选项用于控制在单击“停止”按钮时Vuser停止运行的方式。其选项依次为:

    Ø Wait for the current iteration to end before stopping(退出前等待当前迭代结束):指示LoadRunner允许Vuser在停止前完成正在运行的迭代。Vuser将移动到“正在逐步退出”状态,然后逐渐退出方案。

    Ø Wait for the current action to end before stopping(退出前等待当前操作结束):指示LoadRunner允许Vuser在停止前完成正在运行的操作。Vuser将移动到“正在逐步退出”状态,然后逐渐退出方案。

    Ø Stop immediately(立即停止):指示LoadRunner立即停止运行Vuser。Vuser将移动到“正在退出”状态,然后立即退出方案。

    Ÿ   Use random sequence with seed:勾选此复选框,表示允许LoadRunner使用随机顺序的种子数。每个种子值代表用于测试执行的一个随机值顺序。每当使用该种子值时,会将相同顺序的值分配给方案中的Vuser。该设置适用于使用Random方法从数据文件中分配值的参数化Vuser脚本。它还将影响录制的思考时间的随机百分比,如果在测试执行中发现问题,并且要使用相同的随机值顺序重复该测试,请启用该选项。

    (2)“TimeOut”选项卡

    “TimeOut”(超时)选项卡如图2-53所示。“Command Timeout”(命令超时)是各种LoadRunner命令的最长时间限制。在控制台发出命令时,可以设置负载生成器或Vuser执行该命令的最长时间。如果在超时间隔内没有完成该命令,控制台将发布一条错误消息。

    图2-53  超时设置

    Ÿ   Enable timeout checks:即启用超时检查,指示LoadRunner在控制台发出命令后监视负载生成器和Vuser的状态。如果负载生成器或Vuser在指定的超时间隔内没有完成命令,控制台将发布一条错误消息。如果禁用超时限制,LoadRunner将无限长地等待负载生成器进行连接和断开连接,并且等待执行Initialize、Run、Pause和Stop命令。

    Ÿ   Connect:在此数值框中输入LoadRunner等待连接到任何负载生成器的时间限制值。如果在该时间内连接不成功,负载生成器的状态将更改为“失败”,默认连接超时是120秒。

    Ÿ   Disconnect:在此数值框中输入LoadRunner等待从任何负载生成器断开连接的时间限制值。如果在该时间内断开连接不成功,负载生成器的状态将更改为“失败”。默认的断开连接超时是120秒。

    LoadRunner承认活动Vuser的数量会影响超时值。例如,1000个Vuser尝试初始化将比10个Vuser尝试初始化花费更长的时间。LoadRunner将基于活动Vuser的数量向指定的超时值中添加内部值。

    Ÿ   Init:在此数值框中输入Initialize命令的超时值,默认的时间限制是180秒。

    Ÿ   Run:在此数值框中输入Run命令的超时值,默认的时间限制是120秒。

    Ÿ   Pause:在此数值框中输入Pause命令的超时值,默认的时间限制是120秒。

    Ÿ   Stop:在此数值框中输入Stop命令的超时值,默认的时间限制是120秒。

    Ÿ   Update Vuser elapsed time every(更新Vuser已用时间):指定LoadRunner更新在“Vuser”对话框中的“Elapsed Time”(已用时间)列中显示的值的频率。默认每隔4秒更新一次Vuser已用时间。

    如果选择一个Vuser并单击“Init”(初始化)按钮,LoadRunner将检查该Vuser在180秒(默认的“初始化”超时时间)内是否达到了“就绪”状态;如果没有达到,控制台将发布一条消息,指出该“初始化”命令超时。

    (3)“Run-Time File Storage”选项卡

    “Run-Time File Storage”(运行时文件存储)选项卡页面如图2-54所示。

    图2-54  运行时文件存储设置

    存储的脚本和结果可以使用下列选项之一:

    Ÿ   On the current Vuser machine(在当前Vuser计算机上):指示控制台将运行时文件保存在运行Vuser脚本的计算机上。在基于NT的计算机上,这些结果将保存到由TEMP或TMP环境变量定义的目录中。在UNIX计算机上,这些结果将保存到由 TMPDIR环境变量定义的目录中。如果没有定义TMPDIR环境变量,这些结果将保存到/tmp目录。

    Ÿ   On a shared network drive(在共享网络驱动器上):指示控制台将方案结果和/或Vuser脚本保存在共享网络驱动器上。共享网络驱动器是控制台和方案中的所有负载生成器对其拥有读写权限的驱动器。如果选择将结果保存到共享网络驱动器,可能需要执行路径转换。路径转换确保远程负载生成器可以识别指定的结果目录。如果指定所有Vuser在某个共享位置上直接访问其Vuser脚本,则在运行时不会传输任何脚本文件。该替代方法在以下两种情况可能很有用:

    Ø 文件传输设备无法工作。

    Ø  Vuser脚本文件太大,因此要花费很长时间进行传输。切记,Vuser脚本文件在方案运行期间仅传输一次。

    (4)“Path Translation Table”选项卡

    “Path Translation Table(路径转换表)”选项卡如图2-55所示。

    图2-55  路径转换表

    如果指定了运行时文件存储的共享网络驱动器,可能需要执行“路径转换”,路径转换是LoadRunner用来转换远程路径名的一种机制。在典型的性能测试设备配置方案中,根据实际情况,多台负载生成器(计算机)会以不同方式映射共享网络驱动器。

    2.运行环境设置

    操作后出现“Run-Time Setting”窗口,其中有不同的标签页。下面对运行时经常需要配置的标签页进行简要的配置说明。

    (1)“General:Miscellaneous”标签页(如图2-56所示)

    此界面为运行期间针对某些特殊功能,例如出现错误时如何处理等的一些辅助设置,一般的情况下不需要改动,其中有三项供用户设置。

    图2-56  环境设置

     “Error Handing”栏设置LoadRunner在遇到错误时的处理方法,一般情况下不需要改动。此选项下有三个复选框,分别为运行期间遇到错误不同的处理方法,

    Ÿ   Continue on error:选择此项后,如果运行时出现错误,将继续执行脚本,不会因为错误出现而停止,以此来保证脚本整个运行过程的完整性。

    Ÿ   Fail open transactions on lr_error message:选择此项后,如果运行时出现错误,系统会在事先脚本中插入的lr_error_message函数中显示出错误,此项需要与一些函数进行配合使用。

    Ÿ   Generate snapshot on error:选择此项后,如果运行时出现错误,系统会根据错误的级别将错误界面形成快照记录下来,运行结束后可以打开错误窗口进行查看。

    “Multithreading”栏用于确定Vuser运行时为多线程还是多进程,默认是多线程,一般不需要修改。如果选择“Run Vuser as a process”,则场景运行时会为每个Vuser创建一个进程;如果选择“Run Vuser as a thread”,则会将每个Vuser作为一个线程来运行,在任务管理器中只看到一个mmdrv.exe,这种方式的运行效率更高,能造成更大的压力。

    “Automatic Transactions”栏默认选择的是第一项“Define any actions as a transcation”,但如果需要把脚本的每一步都当作事务,可以选择第二项“Define any step as a transcation”,这样可以省去多次添加事务的烦琐操作。

    (2)“General:Think Time”标签页(如图2-57所示)

    图2-57  思考时间设置

    Ÿ   Ignore think time(忽略录制思考时间):选择该项,VuGen在脚本回放过程中将不执行Lr_think_time()函数,这样将给服务器造成更大的压力。

    Ÿ   Replay think time(使用录制思考时间):如选中该项,依次有以下4种选择:

    Ø  As record:按照录制过程中的Think Time值回放脚本,使用lr_think_time函数中显示的参数。

    Ø  Multiply recorded think time by:按照录制过程中的Think Time值的整数倍回放脚本,这种方法可以增加或减少在回放脚本期间应用的思考时间。

    例如,如果录制思考时间为4秒,则可以指示Vuser用2乘以该值,即总共为8秒。要将思考时间减少至2秒,可以用0.5乘以录制时间。

    Ø  Use random percentage of recorded think time:指定一个最小值和一个最大值,可设置Think Time值的范围,通过指定Think Time的范围,取其中的一个随机数的值来回放脚本。

    例如,如果Think Time参数为4,并且指定最小值为该值的50%,而最大值为该值的150%,则Think Time的最小值为2(50%),而最大值为6(150%)。

    Ø  Limit think time to:限制Think Time的最大值,这样VuGen在回放脚本过程中就会把脚本中大于该限制值的Think Time值用该限制值来代替。

    (3)“NetWork:Speed Simulation”标签页(如图2-58所示)

    图2-58  网络配置

    此界面为带宽的选择:选择能够最好地模拟所测试的环境的带宽,带宽越大,给Web服务器造成的压力就越大。为了方便选择带宽的大小,提供了几种选项,自上而下依次表示:

    Ÿ   Use maximum bandwidth(使用最大带宽):此项为默认选项,一般情况下运行场景不会考虑带宽大小情况,Vuser就按照网络上的最大可用带宽来运行。

    Ÿ   Use bandwidth(使用带宽):指明Vuser要模拟的特定带宽级别。如果此软件程序运行时要考虑带宽大小情况,需要规定带宽范围或者需要特定的带宽级别,就可以选择此项进行设置,可以选择从14.4K至512K bps范围内的几个带宽级别,以便模拟调制解调器、ISDN或DSL。

    Ÿ   Use custom bandwidth(使用自定义带宽):指明Vuser进行模拟的带宽限制,以位为单位指定带宽,若选择此项用户可以自己手动添加想要的带宽大小,1K=1024。

    (4)“Internet Protocol:Preferences”标签页(如图2-59所示)

    这里仅仅对两个经常需要改动的选项进行说明。

    “Checks”栏下的Enable Image and text check”:启用Image/Text检查。默认情况下此选项是没有选中的。如果在前面设置了检查点,需要先选中该项,否则运行时LoadRunner不会执行检查这个步骤。

    图2-59  启用检查点设置

     “Advanced”栏下的“Non-critical resource error as warnings”:默认选中该项,这样一些不是特别重要的资源问题(比如一个小图片)出现错误时,LoadRunner仅仅把它们当作警告,不会当作错误,至于到底哪些资源不是特别重要,请选择“Recording Option”>“Advanced”>“Non-Resources”进行设置。

    (5)“Internet Protocol:ContentCheck”标签页(如图2-60所示)

    图2-60  错误页面处理设置

    这里的设置是为了让VuGen检测何种页面为错误页面。如果被测的Web应用没有使用自定义的错误页面,那么这里不用作更改;如果被测的Web应用使用了自定义的错误页面,那么这里需要定义,以便让VuGen在运行过程中检测服务器返回的页面是否包含预定义的字符串,进而判断该页面是否为错误页面。如果是,VuGen就停止运行,指示运行失败。

    Ÿ   “Enable ContentCheck during replay”:默认选中此项,表示VuGen在回放脚本的过程中会检查页面是否包含错误信息。

    Ÿ   “New Application”:新建一类应用程序,比如ASP.NET或者JSP等。

    Ÿ   “New Rule”:在该应用下新建规则,规则中包含字符串或者字符前缀和后缀。

    Ÿ   “Set as Default”:默认情况下,当前所作的更改只适用于当前的脚本,如果想让更改适用于本机所有脚本的话,单击该按钮即可。

    Ÿ   “Import/Export”:利用该按钮可以把定义好的规则导入和导出。

    其他的标签设置采用默认值即可,这里不再详细地介绍。

    2.2.4  方案模式类型

    方案模式的选择有两种情况:一种是百分比方案模式,一种是面向目标的方案模式。在实际测试工作过程中需要根据这两个方案不同的特点来进行选择。

    1.百分比方案模式

    在设计常规手动方案时,需要创建Vuser组,为它们分配脚本、负载生成器计算机以及Vuser。在百分比模式下,可以定义方案中要使用的Vuser总数,并为每个脚本分配负载生成器和占总数一定百分比的Vuser。

    在百分比模式下创建方案时,需要定义方案中要使用的Vuser总数,而不是每个脚本的Vuser数。请在“Scenario Schedule”对话框的“Total Number of Vuser”文本框中输入该数字。

    图2-61  添加测试Vuser人数

    在“Scenario Scripts”“(方案脚本)”窗口中显示了用户在“New Scenario”(新建方案)对话框中选择的脚本,以及在Vuser组模式下定义的全部脚本的列表。

    图2-62  百分比方案模式

    “%”列显示自动分配到每个Vuser脚本的Vuser在总数中所占的百分比。在方案执行期间,每个脚本运行的Vuser数由该百分比确定。对每个Vuser脚本,默认为所添加的负载生成器都可以执行这个脚本,所以“Load Generator(负载生成器)”列自动包含所有负载生成器,可以根据情况对某些负载生成器进行禁用。

    控制台监视Windows负载生成器计算机的CPU占用情况。当一台Windows负载生成器计算机的CPU过载时,控制台将停止向该计算机加载Vuser,并自动地在方案中其他的负载生成器之间分配Vuser。

    可以使用“Generators”(负载生成器)对话框中的图标监视计算机CPU的占用率。当负载生成器的CPU占用率较高时,在该负载生成器名左侧的图标中将显示黄条。当计算机过载时,该图标将显示红条。

    2.面向目标的方案模式

    在面向目标的方案中,用户可以定义自己希望实现的测试目标,LoadRunner 将根据定义的目标自动为用户创建一个方案。在一个面向目标的方案中,可以定义5种类型的目标:Vuser数、每秒点击次数(仅Web Vuser)、每秒事务数、每分钟页面数(仅Web Vuser)或方案的事务响应时间。

    按照以往经验,如果知道了用户总数,则选面向目标的方案模式来测试“并发的用户数”等性能指标;如果知道了服务器处理能力,则选面向目标的方案模式来测试“每秒点击次数”、“每秒事务数”和“每分钟页面数”;如果期望得到完成一个事务所需要的时间,则可以选择“方案的事务响应时间”模式测试其响应时间(假设业务需要登录时间不超过5秒,则可以设定最大接受事务响应时间为5秒钟,来测试这段时间内可以有多少用户成功登录)。

    确定方案目标后,可以通过“Edit Scenario Goal”(编辑方案目标)对话框对方案目标进行具体定义。首先,在“Scenario Goal”(方案目标)窗口中单击“Edit Scenario Goal”(编辑方案目标)按钮,或选择“Scenario”>“Goal Definition”,打开“Edit Scenario Goal”对话框,如图2-63所示。

    在“Goal Profile Name”下拉框中选择一个目标配置文件名。如果要输入新名称,请单击“New”按钮,在“New Goal Profile”(新建目标配置文件)对话框中输入新的目标配置文件名称,然后单击“OK”按钮,此时在“Goal Profile Name”下拉列表框中将出现新建的目标配置文件名。

    在“Define Scenario Goal”(定义方案目标)框中,选择“Goal Type”(目标类型),在其选择的类型中有以下5种类型可以选择:

    图2-63  编辑方案目标

    (1)Vital Vusers(虚拟用户):输入测试方案运行时要达到的Vuser目标数,如图2-64所示,运行这种面向目标的方案与运行手动方案类似。

    控制台将尽量使用最少数量的Vuser来达到所定义的目标。如果使用最小Vuser数不能达到该目标,则控制台将逐渐增加Vuser数,直到达到所定义的最大数。如果使用所指定的最大Vuser数仍不能达到事先指定的目标,控制台将增加Vuser数,并再次执行方案。

    图2-64 “Vuser”目标类型

    (2)Hits per Second(每秒点击次数):输入方案运行时期望达到的每秒点击次数(每秒HTTP请求数)目标值,如图2-65所示,并为该方案设置最大和最小Vuser数。

    图2-65 “每秒点击次数”目标类型

    (3)Transactions per Second(每秒事务数):输入方案运行时达到的每秒事务数的目标值,如图2-66所示,并为该方案设置最大和最小Vuser数。此外,还需要为方案选择一个静态脚本事务作为测试对象,或者输入已经记录在“Transaction Name”(事务名)框中的自动脚本事务名。

    图2-66 “每秒事务数”目标类型

    (4)Transaction Response Time(事务响应时间):输入方案运行时达到的事务响应时间的目标值,如图6-67所示,并为该方案设置最大和最小Vuser数。此外,还需要为方案选择一个静态脚本事务作为测试对象,或者输入已经记录在“Transaction Name”(事务名)框中的自动脚本事务名。

    图2-67 “事务响应时间”目标类型

    所指定的“事务响应时间”应该是一个预定义的阈值。例如,如果希望用户在5秒钟之内登录到规定的电子商务站点,请将可接受的最长事务响应时间指定为5秒,将最大和最小Vuser数设置为希望能够同时提供服务的最大和最小用户数。

    如果方案没有达到用户定义的最大事务响应时间,则服务器能够在合理的时间间隔内,对要求同时提供服务的指定数量的用户做出响应。如果在仅执行部分Vuser请求后就达到定义的响应时间,或如果接收到消息,提示如果控制台使用定义的最大Vuser数,响应时间将超出指定值,那么,就应该考虑修补应用程序或升级服务器的软硬件。

    (5)Pages per Minute(每分钟页面数):输入方案运行时达到的每分钟下载页面的目标值,如图6-68所示,并为该方案设置最大和最小Vuser数。

    图2-68 “每分钟页面数”目标类型

  • LoadRunner分析测试结果

    2009-03-09 16:22:53

    2.3  LoadRunner分析测试结果

    要查找系统瓶颈,就必须分析LoadRunner获取的性能指标数据。在LoadRunner场景运行的同时我们获取了大量的数据,可以根据以下几种方式分析这些数据:

    1.查看Vuser Log文件,这些文件包括了场景运行过程中每个用户的跟踪数据,Vuser Log文件一般放在脚本目录中;

    2.在控制台的输出窗口查看场景的执行过程信息;

    3.使用Analysis模块分析执行结果图表;

    4.使用直接生成的图表查看原始数据——Graph Data或者Raw Data;

    5.让LoadRunner自动生成HTML或Word格式的测试报告,通过报告进行分析。

    LoadRunner的Analysis模块是分析系统的性能指标的一个主要工具,它能够直接打开场景的执行结果文件,将场景数据信息生成相关的图表显示出来。Analysis集成了数据统计分析功能,允许测试员对图表进行比较和合并等多种操作,分析后的图表能够自动生成测试员需要的测试报告文档。

    在运行方案时,数据将存储在结果文件中,扩展名为.lrr。Analysis是处理收集的结果信息并生成图和报告的实用程序。Analysis将活动图的显示信息和布局设置存储在扩展名为.lra的文件中。

    在运行方案时,默认情况下所有Vuser信息将存储在每个Vuser主机(每个运行场景的机器)中。方案执行之后,这些结果会自动进行整理或合并,即将所有主机的结果传输到结果目录中(一般可以使用TD或者其他质量管理工具进行缺陷管理工作,结果目录将因使用的软件和配置情况而异)。通过在控制台窗口中选择““Results”>““Auto Collate Results”(自动整理结果),并清除该选项旁边的复选标记,可以禁用自动整理。要手动整理结果,请选择“Results”>“Collate Results”(整理结果)。如果方案执行后这些结果还没有进行整理,在生成分析数据之前,Analysis将对其进行整理。

    文本框:  
图2-69 “General”选项卡

场景运行完毕,在结果目录下会自动保存一个扩展名为lrr的结果文件,Analysis能够打开这个结果文件,加载该文件时自动处理lrr文件内的结果信息,并自动生成相应的结果图表.

    2.3.1  配置数据选项

    在使用Analysis分析场景结果之前,首先要明确结果文件中收集了哪些信息。默认情况下,各个Vuser的执行结果数据都是存放在各个Vuser所在的机器上的,场景执行结束后,才被系统自动整理合并后放置到结果目录下,LoadRunner是否执行这个整理合并操作是受控制台中的“Auto Collate Results”选项控制的。所以要进行相应配置,下面做一简要介绍。

    选择“Tools”>“Options”,出现配置界面,分别有“General”(常规)、“Result Collection”(结果集合)、“Database”(数据库)和“Web Page Breakdown”(网页细分)四个选项卡。

    1.“General”选项卡(如图2-69所示)

    在此页面可以设置存储和显示的日期格式,一种为欧洲日期格式(dd/mm/yyyy),另一种为美国日期格式(mm/dd/yyyy)。

    如果要选择文件浏览器打开的目录位置,有“Open at most recently used directory”(打开最近一次使用目录位置)和“Open at specified directory”(在指定目录打开文件)两种形式可供选择。

    对于存储临时文件的目录位置,可以设置在Windows 临时目录中,也可以通过输入要存放的目录位置,为保存的临时文件指定存放目录。

    Analysis摘要报告包含一个事务百分比列,默认为90%的事务响应时间(90%是一个统计响应时间的参数,表明该事务所有的运行次数中,90%的次数落在这个响应时间内),此数值如没有特殊要求不用改动。

    2.“Result Collection”选项卡(如图2-70所示)

    通过“Result Collection”选项卡可以配置 Analysis 以生成和显示摘要数据或完整数据。

    图2-70 “Result Setting”选项卡

    “完整数据”指已经过处理的可以在Analysis工具内使用的结果数据,可以存储、筛选和操纵这些数据。“摘要数据”指原始的、未处理的数据。摘要图包含常规信息(如事务名和次数),而且只支持部分筛选选项。

    在“Result Collection”选项卡中,有3项需要配置,分别为“Data Source”(数据源显示情况)、“Data Aggregation”(数据聚合方式)和“Data Time Range”(设置数据时间范围)。

    下面对“Options”对话框中的“Result Setting”选项卡进行配置说明,如图2-70所示。

    首先是选择数据源的数据显示情况,3个选项的含义分别为:

    Ÿ   Generate summary data only(仅生成摘要数据):仅查看摘要数据,Analysis不会处理数据以用于筛选和分组等高级用途。

    Ÿ   Generate complete data only(仅生成完整数据):仅查看经过处理的完整数据,不显示摘要数据。

    Ÿ   Display summary while generating complete data(生成完整数据时显示摘要数据):在处理完整数据的时候,能够查看摘要数据。在处理完整数据之后,查看处理后的完整数据。

    其次是选择数据的聚合方式,如果选择生成完整数据,Analysis将通过内置数据聚合公式或定义的聚合设置来聚合生成的数据。为了减小数据库,缩短在大方案中的处理时间,必须进行数据聚合。

    在“Data Aggregation”部分的设置默认为第一项“Automatically aggregate data to optimize performance”,使用内置数据聚合公式聚合数据、第二个选项仅对Web数据进行聚合“Automatically aggregate Web data only”、还可以自定义聚合的设置,即选择第三个选项“Apply user-defined aggregation”,单击其后面的自定义配置按钮,打开“Data Aggregation Configuration”(数据聚合配置)对话框,进行自定义聚合和粒度设置,如图2-71所示。

    在图2-71所示的对话框中,首先选择要聚合的数据类型,其中列出要聚合数据的图的类型,有事务(响应时间、每秒)、Web(每秒点击次数、吞吐量、每秒页数、HTTP返回代码)、监视器、数据点和脚本错误。在各选项前面的复选框上打钩即为选中。

    然后再选择要聚合的图属性,包括Vuser ID、组名和脚本名,如果不希望聚合失败的Vuser数据,请选择“Do not aggregate failed Vusers”(不聚合失败的Vuser)。

    图2-71  数据集合配置图

    最后对图形的显示粒度进行设置,粒度的单位为秒,最小的粒度是1秒,最大的粒度是图的时间范围的一半。在此设置后,随着图形时间范围的增大,在其他地方可以对粒度进行更改,在后面会对更改粒度的方法进行简要介绍。还可以选择专门指定Web数据的自定义粒度,默认值为5秒。

    确定后,单击“OK”按钮关闭“数据聚合配置”对话框。

    在“Result Setting”选项卡页面中最后一项“Data Time Range”就是设置数据时间范围,默认的范围为“All of the Scenario”(所有方案),即显示方案整个持续时间内的数据。单击“Apply now on active session”按钮后,将当前设置应用到当前会话中。

    3.“Database”选项卡

    默认情况下,LoadRunner 将Analysis结果数据存储在Access 2000数据库中。如果Analysis结果数据超过2GB,建议用户将它存储在SQL Server或MSDE计算机上,此时可以通过如下配置进行,如图2-72所示。

    如果选择SQL Server数据库,则需要配置一下后面的选项。在“Server Name”文本框中选择或输入运行SQL Server/MSDE的计算机的名称。在此,可以勾选“Use Windows intergrated security”(使用Windows集成安全性)复选框,这种情况下将允许用户使用Windows登录,而不必手工指定SQL Server的用户名和密码。

    Ÿ   “Logical storage location”(逻辑存储位置):输入要在其中存储永久和临时数据库文件的SQL Server/MSDE计算机上的共享目录。例如,如果SQL Server的名称是fly,则输入“\\fly\<Analysis数据库>\”。

    图2-72  数据库配置选项

    存储在SQL Server/MSDE计算机上的Analysis结果仅可以在计算机的本地LAN上进行查看。

    Ÿ   “Physical storage location”(物理存储位置):输入与逻辑存储位置对应的SQL Server/MSDE计算机上的真实驱动器和目录路径。例如,如果 Analysis数据库映射到名为fly 的SQL Server,并且fly 映射到驱动器D,则输入“D:\<Analysis数据库>”。

    如果SQL Server/MSDE和Analysis位于同一台计算机上,则逻辑存储位置和物理存储位置是相同的。

    Ÿ   “Test Parameters”(测试参数):如果用于Access,则允许用户连接到Access数据库并验证计算机上的“列表分隔符”注册表选项与该数据库计算机上的是否相同。

    如果用于SQL Server/MSDE,则允许用户连接到SQL Server/MSDE计算机,并查看指定的共享目录是否位于服务器上,以及在该共享服务器目录上是否有写入权限。如果有,Analysis会将共享的服务器目录与物理服务器目录同步。

    Ÿ   “Compact Database”(压缩数据库):在配置和设置Analysis会话时,包含结果的数据库可能变得零碎。因此,可能使用过多的磁盘空间。通过“Compact database”(压缩数据库)按钮可以修复和压缩这些结果并且优化Access数据库。

    4.“Web Page Breakdown”选项卡(如图2-73所示)

    在此选项卡中选择URL的形式,可以选择单独显示每个URL(Display individual URLs)或者显示合并URL的平均值(Display an average of merged URLs),即将来自同一脚本步骤的URL合并成一个URL,然后使用合并(平均)数据点显示它。测试人员可以根据实际需求做相应的设置。

    图2-73 “Web Page Breakdown”选项卡

    文本框:  
图2-74  打开图列表

2.3.2  图表分析说明

    当把各种数据结果生成分析图表时,为了更好地对结果进行分析,需要对这些分析图表进行筛选,合并或者关联,便于测试人员得到想要的数据,所以下面介绍几个常用的分析图表的技巧。

    1.打开图。除了系统提示的默认的图表外,测试人员还可以查看其他包含数据的图表。方法是:

    在如图2-74的图表列表中双击“New Graph”,弹出“Open a new Graph”对话框,对话框中所有名称为蓝色的图表均为包含数据的图表,如图2-75所示。

    左边窗口显示能够获得数据的图形列表,右边显示在左边窗口列表中所选择图形的基本信息。选中要打开的图形,单击“Open Graph”按钮,将在数据图列表中显示出该图,选择完毕后,单击“Close”按钮关闭此对话框。

    在整个分析结果界面分为三部分,如图2-76所示。在图2-76所示页面中,上面左半部分为要显示的数据名称列表,右半部分为整个场景数据的图形显示,下面则显示运行监控数据。每打开一个新图,在数据名称列表中都将添加对应的指标。

    图2-75  打开一个新图

    图2-76  分析结果页面

    2.在图形显示的区域单击鼠标右键将弹出图2-77所示的菜单,下面将对此菜单所提供的功能做一下介绍。

    (1)设置筛选条件(Set Filter/Group By)

    选择“View”(视图)>“Set Filter/Group By”(设置筛选器/分组方式),出现筛选器的对话框,例如打开事务摘要的筛选器,如图2-78所示。

       

    图2-77  图形区域的右键菜单                      图2-78  图形设置

    在图2-78所示对话框中为“Criteria”(条件)和“Values”(值)字段选择值。

    Ÿ   Criteria:选择“=”(等号)或“<>”(不等号)。

    Ÿ   Values:从“Values”列表中选择一个值。筛选条件分为三种值类型(离散、连续和基于时间)。

    ¡ 离散值是一个明确的整数值,例如“事务名”或“Vuser ID”。要求在已经包含在筛选器中的固有值中选取,不可以自定义该数值。

    注释:可以使用“Transaction Hierarchical Path”(事务父树路径)条件来筛选子事务。选择<事务名>可以筛选此事务的子事务;选择“无”可以筛选父事务;选择“未知”可以筛选所有父级未知的子事务(这种情况通常由会话期间的嵌套错误引起)。

    ¡ 连续值是一个变量维度,可以在最小值和最大值范围限制内取任何值,例如“事务响应时间”。可以在“设置维度信息”对话框中设置每个度量的维度信息。

    ¡ 基于时间的值是基于相对于方案开始时间的值。“Scenario Elapsed Time”(方案已用时间)是使用基于时间值的唯一条件。可以在“Scenario Elapsed Time”对话框中指定基于时间的值。

    Ÿ   Group By(分组方式):使用这些设置来对图显示按组排序。

    Ÿ   Available groups(可用组):选择排序所依据的组,单击右箭头可以将该组加入到“选定组”内。

    Ÿ   Selected groups(选定组):显示所有选定组的列表,结果将按这些组排序。要删除某个组,可以选择该组并单击左箭头。要更改结果分组的顺序,请选择要移动的组,并单击向上或向下箭头,直到它们按所需顺序排列。

    Ÿ   Set Default(设置默认值):设置每个筛选条件的默认条件和值。

    Ÿ   Cancel(全部清除):删除用户在对话框中输入的所有信息。

    文本框:  
图2-79  设置时间粒度

(2)Set Granularity(设置或更改粒度)

    在图2-77所示的菜单单击“Set Granularity”选项,将出现图2-79所示的对话框,在此框可设置时间粒度。

    通过更改X轴的粒度(比例),可以使图便于阅读和分析。为确保可读性和清晰性,Analysis 在大于等于500秒的范围内自动调整图的最小粒度。如果要使数据库减小,可增加粒度。如果要重点关注更详细的结果,可减少粒度。

    在图2-80中,使用不同的粒度(1、5,10)来显示每秒点击次数,其中Y轴表示在粒度间隔内的每秒点击次数。对于粒度1,Y轴显示方案中每1秒期间的每秒点击次数(如图2-80(a)所示)。对于粒度5,Y轴显示方案中每5秒期间的每秒点击次数(如图2-80(b)所示)。

     

    (a)                                       (b)

    图2-80  不同的粒度每秒点击次数图

    (c)

    图2-80  不同的粒度每秒点击次数图(续)

    文本框:  
图2-81  选择查看的原始数据时间段

从图2-80可以看出,粒度越低,结果越详细。例如,在图2-80中使用较低的粒度,可以看到没发生点击的间隔。使用更高粒度有助于研究整个方案中的总体Vuser行为。通过使用更高粒度来查看同一个图,可以很容易地发现,总体上大约平均每秒点击1次。

    (3)View Raw Data(查看原始数据)

    在图2-77所示的右键菜单中单击“View Raw Data”,将弹出“Raw Data”对话框。

    首先设置显示时间范围,如图2-81所示。单击“OK”按钮确定后,将在分析结果页面的数据列表区域,根据所选择的时间范围显示出原始数据,如图2-82所示。

    图2-82  显示的原始数据

    (4)Auto Correlate(自动关联图)

    在图2-77所示的右键菜单中选择“Auto Correlate”,打开“Auto Correlate”(自动关联)对话框,如图2-83所示,图中显示的数据范围为选定的度量,如不选定则显示整个运行结果的度量。

    通过“Auto Correlate”对话框中的“Time Range”(时间范围)选项卡,可以为相关联的度量图指定方案时间范围。

    首先要在“Measurement to Correlate”下拉列表中选择要关联的度量,单击“Display”按钮显示关联整个方案时间范围的值。在“Suggest Time Range by”下拉列表框中可以选择三种时间范围的方式(即Analysis自动划分方案中度量的最重要时间段),依次为:

    Ÿ   趋势:选择关联度量值变化趋势相对稳定的一段时间范围。

    Ÿ   功能:选择关联度量值变化相对稳定时间段内,选择其中一小段大体与整个趋势相似的时间范围。

    Ÿ   最佳:选择关联度量值发生明显变化趋势的一段时间范围。

    图2-83  自动关联时间范围

    指定方案时间范围也有两种方式,一种是手动填写具体的开始和结束时间,另一种是使用绿色和红色的垂直拖动条来指定起止时间。

    通过“Auto Correlate”对话框中的“Correlation Options”(关联选项)选项卡,可以设置要关联的图、数据间隔和输出选项,如图2-84所示。

    首先,要在左边的窗口(Select Graphs for Correlation)中选择希望其度量与选定度量相关联的图。然后,在“Data Interval”单组合框中选择计算关联度量轮询之间的间隔,可以设置为自动值(Automatic),还可以输入一个具体的值。最后,在“Output”组合框中选择显示输出的级别。

    图2-84  设置自动关联选项

    (5)Comments(注释添加与编辑)

    首先,选择要添加注释的位置,选择图2-77中“Comments”菜单下的“Add Comment”(添加注释)选项,打开“Add Comments”对话框,如图2-85所示。

    在“Text”框中输入要添加注释的内容。在“Add Comments”对话框中可以选择插入注释的位置及设置注释框的大小,还可以通过Format(格式)、Text(文本)、Gradient(渐变)和Shadow(阴影)等选项卡,对所添加的注释进行编辑、调整和格式化。

    如果想修改或删除注释,请选中该注释,然后选择“Comments”>菜单中的“Edit Comments”选项,打开“Edit Comments”对话框,如图2-86所示。

                  

    图2-85  添加注释                               图2-86  编辑注释

    对注释进行编辑和删除,编辑完后关闭此对话框即可。

    3.在图2-75所示的数据列表区域单击鼠标右键将弹出如图2-87所示的菜单,下面简单介绍此菜单上的各选项。

    (1)Show:显示图中某个度量。

    (2)Hide:隐藏图中某个度量。

    (3)Show only selected:只突出显示所选择的度量。

    (4)Show all:显示图中所有可用的度量。

    (5)Configure measurements(设置度量):单击此项将打开“Measurement Options”(度量选项)对话框,如图2-88所示,通过该对话框可以配置度量选项(例如,设置颜色和度量比例)。

                   

    图2-87  数据列表右键菜单                         图2-88  度量选项

    在“Measurement”下拉列表内选择要配置的度量,还可以单击“Change Color”按钮改变其显示的颜色,在下面的“Scale”组合框中可以设置度量的比例,其选项依次为:

    Ÿ   Set measurement scale to(将度量比例设置为X):设置度量的比例。

    Ÿ   Set automatic scale for all measurements(为所有度量设置自动比例):使用优化的自动比例来显示图中每个度量。

    Ÿ   Set scale 1 for all measurements(为所有度量设置比例=N):将图中所有度量的比例设置为1。

    Ÿ   View measurement trends for all measurements(查看所有度量的度量趋势):按照以下公式对图中Y轴的值归一化:

    新Y值=(以前的Y值-以前值的平均值)/以前值的STD。

    (6)Show measurement description(显示度量描述):单击此项将弹出“Measurement Description”(度量描述)对话框,其中包括名称、监视器类型以及选定度量的描述,如图2-88所示。

    (7)Animate selected line(激活选定线):将选定度量显示为闪烁线。当选中此菜单项后,每当选择一个度量值后,该线形的显示有一个从粗到细的过程。

    图2-89  度量描述

    (8)Configure columns(配置列):选择此菜单将打开“Legend Column Options”(图例列选项)对话框,如图2-90所示,通过该对话框可以配置图2-76页面中“Legend”选项卡中显示的列。

    图2-90  图例列选项

    在“Legend Columns Options”对话框中可以选择要查看的列、每列的宽度以及列的排序方法。在左边的窗口(Available Columns)中显示可用于选定度量的列。默认情况下,将显示所有可用列。在右边显示所选定列的名称及长度,还可以对宽度进行修改。在“Sort By”组合框中可选择所选列的排序方式:升序(Ascending)和降序(Descending)。但在排序前应先选择度量数据进行排序所依据的列。

    4.合并图

    使用Analysis可以将同一方案的两个图的结果合并到一个图中。通过合并,可以一次比较几个不同的度量。例如,可以制作一个合并图,以已用时间的函数的形式显示网络延迟和正在运行的Vuser的数量。

    要合并图,这些图的X轴的度量单位必须相同。例如,可以合并“Web吞吐量和每秒点击次数”图,因为它们具有公用的X轴:方案的已用时间。

    首先创建合并图:在树视图中选择一个图或选择其选项卡,将其激活。选择“视图”>“合并图”,或者单击“合并图”。将打开“合并图”对话框,显示活动图的名称。

    显示X轴与当前图相同的活动图,Analysis提供三类合并方式:

    (1)叠加:重叠共用同一X轴的两个图的内容。合并图左侧的Y轴显示当前图的值。右侧的Y轴显示已合并图的值。叠加图的数量没有限制。叠加两个图时,这两个图的Y轴分别显示在图的右侧和左侧。覆盖两个以上的图时,Analysis只显示一个Y轴,相应地缩放不同的度量。

    在图2-92中,“吞吐量-每秒点击次数”图被另一个图叠加。

    (2)平铺:查看在平铺布局(一个图位于另一个之上)中共用同一个X轴的两个图的内容。在图2-93中,“吞吐量-每秒点击次数”图将被平铺(一个在另一个之上)。

    (3)关联:绘图时区分两个图彼此的Y轴。活动图的Y轴变为合并图的X轴。被合并图的Y轴作为合并图的Y轴。

    在图2-94中,“吞吐量-每秒点击次数”图彼此关联。X轴显示每秒的字节数(“吞吐量”度量),Y轴显示每秒的点击次数。

              

    图2-91  合并图                      图2-92  叠加的“吞吐量-每秒点击数”图

             

    图2-93  平铺的“吞吐量-每秒点击数”图                    图2-94  合并关联

    合并图的标题:输入合并图的标题。此标题将出现在 Analysis 窗口左窗格的树视图中。

    2.3.3  分析报告类型

    Analysis提供了非常详尽的分析结果报告。除了前面提到的分析摘要报告(Analysis Summary)外,Analysis还提供了事务活动报告(Activity Report)、事务性能报告(Performance Reports)、HTML与Word报告等三大类报告。

    1.分析摘要报告

    分析摘要报告提供有关执行方案的一般信息。此报告始终存在于树视图中,也可选择Analysis窗口中的“Analysis Summary”选项卡获取此报告。

    摘要报告列出关于方案运行的统计信息,并提供指向下列各图的链接:正在运行的Vuser、吞吐量、每秒点击次数、每秒HTTP响应数、事务摘要和平均事务响应时间,如图2-95所示。

    在Analysis Summary页面底部,显示包含方案的事务数据的表。该数据中包含一个“90 Percent”列,指示90%的事务的最大响应时间。

    图2-95 “分析摘要报告”页面

    2.事务活动报告

    事务活动报告提供关于Vuser数量和方案运行期间执行的事务数量的信息。可用的活动报告有“方案执行报告”、“失败的事务报告”和“失败的Vuser报告”三种。

    (1)Scenario Execution Report(方案执行报告)

    方案执行报告是一种活动报告,提供关于在方案运行期间发生的主要事件的详细信息,其中包括每个Vuser的信息。在报告中可以看到每组Vuser的执行主机名称、就绪时间、开始执行时间、持续时间、终止/结束时状态等,如图2-96所示。

    在分析结果时,方案执行报告主要用于了解用户的整体情况。

    (2)Failed Transaction Report(失败的事务报告)

    失败的事务报告是一种活动报告,提供已完成但失败了的事务的开始时间、结束时间和持续时间的详细信息,如图2-97所示。

    在通过此报告查找到哪些事务在执行期间发生问题后,还可以结合应用程序的日志、数据库变化情况等对问题进一步定位。

    图2-96  方案执行报告

    图2-97  失败的事务报告(按Vuser)

    (3)失败的Vuser报告(Failed Vusers Report)

    失败的Vuser报告是一种活动报告,提供关于方案执行期间处于“错误”、“停止”或“已完成:失败”状态下的所有Vuser的详细信息,如图2-98所示。报告中的“Ready At”和“Running At”与计算机的系统时钟有关。

    图2-98  失败的Vuser报告

    与方案执行报告相比,失败的Vuser报告显示的是出现问题的Vuser的执行情况,可以进一步分析哪些用户出现问题。

    3.事务性能报告

    事务性能报告用于分析Vuser性能和事务时间。可用的性能报告有“数据点”报告、“详细的事务(按Vuser)”报告和“事务性能摘要(按Vuser)”报告三种。

    (1)“数据点”报告

    使用LoadRunner记录自己的分析数据时可以记录外部函数或变量的值。LoadRunner将使用收集的数据创建数据点图和报告。

    “数据点”报告是一种性能报告,它列出每个组的各个Vuser数据点的名称、值以及记录该值的时间,如图2-99所示。

    图2-99 “数据点”报告

    通过报告中的部分数据点,可以了解随机数的取值情况,进而深入分析程序的执行情况。

    (2)“详细的事务(按Vuser)”报告

    “详细的事务(按Vuser)”报告是一种性能报告,提供方案运行期间每个Vuser执行的所有事务的列表,以及每个事务执行时间的详细信息,如图2-100所示。

    图2-100 “详细的事务(按Vuser)”报告

    “详细的事务(按Vuser)”报告详细地描述了用户执行事务的先后顺序以及具体细节。此报告针对某一具体事务还提供如下一些值:

    Ÿ   Start time(起始时间):事务开始时的系统时间。

    Ÿ   End time(结束时间):事务结束时的实际系统时间,包括思考时间和浪费的时间。

    Ÿ   Duration(持续时间):采用以下格式的事务持续时间,时:分:秒:毫秒,该值包括思考时间,但不包括浪费的时间。

    Ÿ   Think time(思考时间):在事务期间发生延迟的Vuser思考时间。

    Ÿ   Wasted time(浪费的时间):不属于事务时间或思考时间的LoadRunner内部处理时间(主要是RTE Vuser)。

    Ÿ   Result(结果):最后的事务状态(“通过”或“失败”)。

    通过详细的事务报告分析人员就能了解每个Vuser的执行细节。

    (3)“事务性能摘要(按Vuser)”报告

    “事务性能摘要(按Vuser)”报告是一种性能报告,显示每个Vuser在方案运行期间执行事务所需的时间。该报告表明事务是否成功,以及每个Vuser的最小、最大和平均时间,如图2-101所示。当方案具有多种不同类型的Vuser,并且需要具体描述每种类型的性能时,通过此报告可以查看每种类型用户的性能。

    图2-101 “事务性能摘要(按Vuser)”报告

    4.HTML与Word报告

    HTML报告的内容与Analysis窗口中显示的报告内容相同。分析摘要报告就是典型的HTML报告。在Analysis窗口中打开结果分析文件,添加或删除图表的操作,以此来确定HTML报告的保存内容。指定报告路径和文件名后即可保存HTML报告。以后打开报告网页即打开该报告。

    在生成的Word报告中,通常以图和表的形式自动汇总并显示测试中的重要数据。此外,它还可以显示和描述当前Analysis会话中的所有图。同样,在Analysis窗口中打开的结果分析文件,通过添加或删除图表的操作,可以确定HTML报告的保存内容。

    单击菜单栏“Reports”>“Microsoft Word Reports”打开报告格式设置对话框,如图2-102所示。

    该对话框有三个选项卡:“格式”、“主内容”和“其他图”。

    (1)“格式”选项卡

    在“格式”选项卡中,可以指定报告的路径和名字,还可以输入报告标题、作者、公司徽标等信息。报告中还包含一些可选项,其含义如下:

    Ÿ   标题页:将封面附加到报告。

    Ÿ   目录:将目录附加到报告,并置于封面之后。

    Ÿ   图详细信息:显示图的详细信息,包括图筛选器和粒度。这些详细信息还显示在图下方的“描述”选项卡中。

    Ÿ   图描述:显示图的简短描述。该描述内容与 Analysis 窗口“Details”(描述)选项卡中显示的描述内容相同。

    Ÿ   度量描述:将各类型监视度量的描述附加在报告附录中。

    (2)“主内容”选项卡

    “主内容”选项卡中提供的选项能够使报告收录最重要性能数据的图表,还可以收录一份高级执行摘要以及方案信息,以提供对该测试的概述,其界面如图2-103所示。报告中包含以下几个选项:

    Ÿ   执行摘要:包括LoadRunner测试高级摘要或总结,适用于高级管理。执行摘要通常将性能数据与企业目标相比较,以非技术性语言说明重要的结果和结论,并提出建议。

     

    图2-102  Word报告“格式”选项卡界面       图2-103  Word报告“主内容”选项卡界面

    Ÿ   方案配置:定义测试的基本架构,包括结果文件的名称、控制台计划程序信息、脚本和运行时设置。

    Ÿ   用户的影响:帮助用户查看Vuser负载对性能时间的总体影响的图,此项功能最适用于分析渐进负载测试。

    Ÿ   每秒点击次数:适用于Web测试,显示在负载测试的每秒期间,Vuser在Web服务器上的点击次数。它可以帮助您根据点击次数来评估Vuser产生的负载。

    Ÿ   服务器性能:显示服务器上资源使用率的摘要图。

    Ÿ   网络延迟:显示计算机之间网络路径的延迟。

    Ÿ   Vuser负载方案:显示负载测试的每秒期间,执行Vuser脚本的Vuser数及其状态。该图有助于确定服务器在特定时刻的Vuser负载。

    Ÿ   事务响应时间:显示在负载测试的每秒期间,执行事务所花费的平均时间。该图帮助您确定服务器性能是否在设定的事务性能可接受时间范围之内。

    Ÿ   术语:对报告中特殊词汇的解释。

    (3)“其他图”选项卡

    “其他图”选项卡中的选项用于设置在报告中收录当前Analysis会话中生成的图,其界面如图2-104所示。

    图2-104  Word报告“其他图”选项卡界面

    在报告中包含以下几个选项:

    Ÿ   图注释:选择该选项,以包括Analysis窗口“用户注释”选项卡中为图输入的文本。

    Ÿ   添加:添加Analysis会话尚未生成的其他LoadRunner图。所选择的图将被生成并添加到Word报告中。

    Ÿ   删除:删除Analysis会话已经生成的其他LoadRunner图。

    Ÿ   向上:可以调整所选定内容的位置,每点击一次向上移动一项。

    Ÿ   向下:可以调整所选定内容的位置,每点击一次向下移动一项。

    Ÿ   选中选定内容:选择所选的一项内容,该项显示在蓝色框中,单击该按钮该项前的复选框显示对号,即为选中。

    Ÿ   取消选中选定内容:选择已选的一项内容,该项显示在蓝色框中,单击该按钮该项前的复选框中对号消失,即取消该内容的选择。

    配置好后单击“OK”按钮,将开始生成Word报告。

     

  • 性能测试需要关注的性能点

    2009-03-09 14:58:38

    性能测试需要关注的性能点

    我们站在管理员的角度考虑需要关注的性能点

      1、 相应时间

      2、 服务器资源使用情况是否合理

      3、 应用服务器和数据库资源使用是否合理

      4、 系统能否实现扩展

      5、 系统最多支持多少用户访问、系统最大业务处理量是多少

      6、 系统性能可能存在的瓶颈在哪里

      7、 更换那些设备可以提高性能

      8、 系统能否支持7×24小时的业务访问

      再次,站在开发(设计)人员角度去考虑

      1、 架构设计是否合理

      2、 数据库设计是否合理

      3、 代码是否存在性能方面的问题

      4、 系统中是否有不合理的内存使用方式

      5、 系统中是否存在不合理的线程同步方式

      6、 系统中是否存在不合理的资源竞争

      那么站在性能测试工程师的角度,我们要关注什么呢?

      一句话,我们要要关注以上所有的性能点。

231/212>
Open Toolbar