发布新日志

  • Loadrunner中的Browser Emulation选项分析

    2010-08-23 17:17:00

    Loadrunner中的Browser Emulation选项分析

    首先说一下,各个选项的含义:
    Check for newer versions of stored pages every visit to the page选项
    该设置将指示浏览器检查指定 URL 的较新(与存储在缓存中的 URL 相比)版本。启用该选项时,VuGen 将向 HTTP 标头中添加“If-modified-since”属性。此选项将打开页面的最新版本,但将在场景或会话执行期间生成更大的流量。默认情况下,浏览器不检 查较新的资源,因此禁用该选项。配置该选项以匹配要模拟的浏览器中的设置。
    Download non-HTML resources选项
    该选项指示 Vuser 在回放期间访问网页时加载图形图像。其中包括同页面一起录制的图形图像,还包括未明确同页面一起录制的图形图像。当实际用户访问网页时,需要等待图像加 载。因此,如果尝试测试整个系统(包括终端用户时间),请启用该选项(默认情况下启用)。要提高性能并且不模拟实际用户,请禁用该选项。
    注意:如果在图像检查中遇到了差异,请禁用该选项,因为每次访问网页时,一些图像会随之改变(例如,广告横幅)。
    Simulate a new user on each iteration选项
    指示 VuGen 将各个迭代之间的所有 HTTP 上下文重置为 init 部分结束时相应的状态。使用该设置,Vuser 可以更准确地模拟开始浏览会话的新用户。它将删除所有 Cookie,关闭所有 TCP 连接(包括 Keep-Alive 连接),清除模拟浏览器的缓存,重置 HTML 帧层次结构(帧编号将从 1 开始)并清除用户名和密码。默认情况下启用该选项。
    Clear cache on each iteration选项
    每次迭代时清除浏览器缓存,以模拟第一次访问网页的用户。清除该复选框可以禁用此选项并允许 Vuser 使用浏览器缓存中存储的信息,模拟近期访问过该网页的用户。

    再来说说,我的想法:

    性能测试是一门综合性的技术,它对测试人员要求很高,不仅仅需要了解性能测试工具的应用,而且还需要你了解操作系统、数据库、应用软件等多方面的知 识。从这里我们也可以看到针对lr的不同参数的设置,而引起了测试数据的不同。lr的设置对应着IE的一些相关设置。这里就表现出了我们不仅仅要熟悉 lr,还要深入了解lr和IE的对应关系。相信如果我们了解并应用好这些设置以后,我们在用户现场、产品入围等多种情况下,一定会取得您意想不到的惊喜!


    我们可以看到不同的选项对服务器所产生的问题负载是不同的,负载主要产生在连接数和下载数据包的大小的不同。我们已经明确了解到了不同的选择对服务器可能 导致的影响,那么我们怎样将它运用到实际的性能测试场景中去呢,我对此也经常感觉迷惑!从我这边来往往有几种组合策略来处理:
    第一:最轻松的策略:下载所有的资源、去产生最大可能的连接数去和服务器交互。
    (我尝试过,我们心中总有这么一个概念:系统如果最大的负载都能承受下去了,那么现实过程中有着缓存的机制,那么这个性能肯定能过关说句实在话,如果这样做多了,良心会不安的!呵呵!开发知道了会对我们大声指责的!
    第二:模拟。实际性能测试本身就是在模拟过程,模拟的过程越精确,那么我们的性能测试结果越准确。在性能测试中一共有三类模拟的过程,而这个我把它归在 “操作行为的模拟”这一类上。我们在回头看LoadRunner的这几个设置选项,这些选项我把它分了两类的模拟设置:IE行为的模拟以及程序行为模拟。
    IE行为的模拟(对应tacy里面介绍的ABCD):IE可以设置不同的策略来进行cache资源或者数据,那么我们 回到实际用户操作中来,用户会按照什么策略来设置IE这些选项呢?聪明的用户肯定会利用浏览器的cache来加快运行速度,但是从我们实际调研过程中呢, 感觉大多数用户基本上都会采用浏览器的本身的设置,不会做过得的变动。除非开发程序自动对这个进行限制或者提醒。所以这个选项我大多采用浏览器的默认设置 或者程序操作说明书的要求去设定它!但是也会考虑新用户以及老用户的比例来做不同的设置策略.
    程序行为的模拟:有些程序在javascript中设置把cache清除,要求每次操作必须重新建立连接,我们将采取这种策略去模拟它,所以这个行为的模拟我们往往会看程序设定的情况来设置
    在这个设置中,我感觉LR有一个不太好的地方,如果我设置新用户(以及文件保留过期的用户)的操作以及老用户的设置这些选项时,我不得不把同样的脚本在 controller放两个,然后设置不同的run time setting选项来模拟现实情况,这一点Webload好像就比它强一点!

  • 深入理解Loadrunner中的Browser Emulation

    2010-08-23 15:41:09


    一:基本介绍

    在Loadrunner的使用中,对于Run-time Settings下的browser emulation设置是比较容易让人产生困惑的地方。下面我们结合sniffer来具体看看每个选项的用途,以及对测试的影响。

    clip_image002

                                                   Browser Emulation 图

    二:案例和工具

    1. 测试案例:

    打开网站首页两次,对比不同Browser Emulation设置下loadrunner的行为,脚本如下。

    Action()
    {
    web_url("www.primeton.com",
    "URL=http://www.primeton.com/",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=",
    "Snapshot=t2.inf",
    "Mode=HTML",
    LAST);

    web_url("www.primeton.com",
    "URL=http://www.primeton.com/",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=",
    "Snapshot=t2.inf",
    "Mode=HTML",
    LAST);

    return 0;
    }

    2. sniffer工具

    开源工具:Wireshark(前身是ethereal)(www.wireshark.org)

    三:测试过程

    为了方便描述,我们约定用:

    A代表Simulate browser cache

    B代表Cache URLs requiring content(HTMLs)

    C代表Check for newer versions of stored pages every visit to the page

    D代表Download non-HTML resources

    E代表Simulate a new user on each iteratioin

    F代表Clear cache on each iteration

    首先设置Run Logic中的iteration为2。让Action运行两次,看看循环运行脚本两次,数据包和连接数的变化。

    1. 去掉所有选项

    结果:共获取数据包95个,建立连接1个(红色标识),断开连接1个(蓝色标识)

    No.     Time        Source            Destination       Protocol Info
    1 0.000000 192.168.1.61 203.81.29.137 TCP 13835 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    2 0.036053 203.81.29.137 192.168.1.61 TCP http > 13835 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    92 1.415887 192.168.1.61 203.81.29.137 TCP 13835 > http [FIN, ACK] Seq=817 Ack=71762 Win=257760 Len=0
    94 1.449960 203.81.29.137 192.168.1.61 TCP http > 13835 [FIN, ACK] Seq=71762 Ack=818 Win=16464 Len=0

    在这种情况下,数据包非常少(没有选择下载资源文件入css,js,gif等),而且你可以看到,打开4次首页,只建立了一个tcp连接。

    这时,你即使选择A,发现数据包的数量量页没有变化,因为cache主要还是针对资源文件

    2. 选择E(F)

    结果:共获取数据包102个,建立连接2个(红色标识),断开连接2个(蓝色标识)

    No.     Time        Source            Destination       Protocol Info
    1 0.000000 192.168.1.61 203.81.29.137 TCP 13886 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    2 0.037013 203.81.29.137 192.168.1.61 TCP http > 13886 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    48 0.618117 192.168.1.61 203.81.29.137 TCP 13886 > http [FIN, ACK] Seq=409 Ack=35882 Win=257760 Len=0
    49 0.644106 192.168.1.61 203.81.29.137 TCP 13887 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    51 0.651919 203.81.29.137 192.168.1.61 TCP http > 13886 [FIN, ACK] Seq=35882 Ack=410 Win=16872 Len=0
    53 0.676377 203.81.29.137 192.168.1.61 TCP http > 13887 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    99 1.310379 192.168.1.61 203.81.29.137 TCP 13887 > http [FIN, ACK] Seq=409 Ack=35882 Win=257760 Len=0
    101 1.347949 203.81.29.137 192.168.1.61 TCP http > 13887 [FIN, ACK] Seq=35882 Ack=410 Win=16872 Len=0

    在这种情况下,数据包非常少(没有选择下载资源文件入css,js,gif等),对比第一种情况,你会发现它建立了两个连接,这就是E的作用,它对于每次迭代都当成一个新的用户,需要重新建立连接。

    3. 选择DE(F)

    结果:共获取数据包1782个,建立连接6个(红色标识),断开连接6个(蓝色标识)

    No.     Time        Source            Destination       Protocol Info
    1 0.000000 192.168.1.61 203.81.29.137 TCP 14016 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    2 0.037911 203.81.29.137 192.168.1.61 TCP http > 14016 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    6 0.107432 192.168.1.61 203.81.29.137 TCP 14017 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    9 0.141816 203.81.29.137 192.168.1.61 TCP http > 14017 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    426 3.334889 192.168.1.61 203.81.29.137 TCP 14017 > http [FIN, ACK] Seq=1852 Ack=150284 Win=257484 Len=0
    428 3.372253 203.81.29.137 192.168.1.61 TCP http > 14017 [FIN, ACK] Seq=150284 Ack=1853 Win=16998 Len=0
    448 4.395488 192.168.1.61 203.81.29.137 TCP 14020 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    457 4.439604 203.81.29.137 192.168.1.61 TCP http > 14020 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    859 7.593610 192.168.1.61 203.81.29.137 TCP 14016 > http [FIN, ACK] Seq=2849 Ack=377404 Win=257484 Len=0
    870 7.659680 203.81.29.137 192.168.1.61 TCP http > 14016 [FIN, ACK] Seq=377404 Ack=2850 Win=15935 Len=0
    888 8.511308 192.168.1.61 203.81.29.137 TCP 14020 > http [FIN, ACK] Seq=1602 Ack=208150 Win=257760 Len=0
    890 8.549451 203.81.29.137 192.168.1.61 TCP http > 14020 [FIN, ACK] Seq=208150 Ack=1603 Win=17280 Len=0
    892 8.566246 192.168.1.61 203.81.29.137 TCP 14022 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    893 8.601893 203.81.29.137 192.168.1.61 TCP http > 14022 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    899 8.702628 192.168.1.61 203.81.29.137 TCP 14023 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    904 8.741807 203.81.29.137 192.168.1.61 TCP http > 14023 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    1298 11.809456 192.168.1.61 203.81.29.137 TCP 14022 > http [FIN, ACK] Seq=1550 Ack=159770 Win=257484 Len=0
    1310 11.878665 203.81.29.137 192.168.1.61 TCP http > 14022 [FIN, ACK] Seq=159770 Ack=1551 Win=17280 Len=0
    1341 12.771707 192.168.1.61 203.81.29.137 TCP 14026 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    1348 12.813950 203.81.29.137 192.168.1.61 TCP http > 14026 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    1759 16.032952 192.168.1.61 203.81.29.137 TCP 14023 > http [FIN, ACK] Seq=3151 Ack=367918 Win=257484 Len=0
    1761 16.068296 203.81.29.137 192.168.1.61 TCP http > 14023 [FIN, ACK] Seq=367918 Ack=3152 Win=17280 Len=0
    1779 16.983042 192.168.1.61 203.81.29.137 TCP 14026 > http [FIN, ACK] Seq=1602 Ack=208150 Win=257760 Len=0
    1781 17.016836 203.81.29.137 192.168.1.61 TCP http > 14026 [FIN, ACK] Seq=208150 Ack=1603 Win=17280 Len=0

    在这种情况下,数据包的数量非常大,连接也很多,由于没有cache功能,每次打开页面都需要重新下载所有的资源文件。

    4. 选择ADE

    结果:共获取数据包525个,建立连接3个,断开连接3个(不再标识了,syn即为连接请求,fin即为断开请求)

    No.     Time        Source            Destination       Protocol Info
    1 0.000000 192.168.1.61 203.81.29.137 TCP 14189 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    2 0.033657 203.81.29.137 192.168.1.61 TCP http > 14189 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    6 0.100636 192.168.1.61 203.81.29.137 TCP 14190 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    9 0.133703 203.81.29.137 192.168.1.61 TCP http > 14190 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    429 3.383748 192.168.1.61 203.81.29.137 TCP 14190 > http [FIN, ACK] Seq=1852 Ack=150284 Win=257484 Len=0
    431 3.418556 203.81.29.137 192.168.1.61 TCP http > 14190 [FIN, ACK] Seq=150284 Ack=1853 Win=16998 Len=0
    471 4.352071 192.168.1.61 203.81.29.137 TCP 14189 > http [FIN, ACK] Seq=1504 Ack=235576 Win=257760 Len=0
    472 4.380312 192.168.1.61 203.81.29.137 TCP 14192 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    474 4.389778 203.81.29.137 192.168.1.61 TCP http > 14189 [FIN, ACK] Seq=235576 Ack=1505 Win=17280 Len=0
    476 4.413220 203.81.29.137 192.168.1.61 TCP http > 14192 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    522 5.078068 192.168.1.61 203.81.29.137 TCP 14192 > http [FIN, ACK] Seq=409 Ack=35882 Win=257760 Len=0
    524 5.115099 203.81.29.137 192.168.1.61 TCP http > 14192 [FIN, ACK] Seq=35882 Ack=410 Win=16872 Len=0

    在这种情况下,cache发挥作用,数据包对比第三种情况大大减少,几乎等于打开一次首页的数据量(449个数据包),只有第一次打开页面需要完整下载页面(包括资源文件),后面的三次打开页面都只要下载HTML页面(不包括资源文件)。

    5. 选择ADEF

    选择F之后我们看看结果:共获取数据包942个,建立连接4个,断开连接4个

    No.     Time        Source            Destination       Protocol Info
    1 0.000000 192.168.1.61 203.81.29.137 TCP 14292 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    2 0.034524 203.81.29.137 192.168.1.61 TCP http > 14292 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    6 0.102314 192.168.1.61 203.81.29.137 TCP 14294 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    9 0.139752 203.81.29.137 192.168.1.61 TCP http > 14294 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    426 3.791111 192.168.1.61 203.81.29.137 TCP 14294 > http [FIN, ACK] Seq=1852 Ack=150284 Win=257484 Len=0
    428 3.824970 203.81.29.137 192.168.1.61 TCP http > 14294 [FIN, ACK] Seq=150284 Ack=1853 Win=16998 Len=0
    468 6.213276 192.168.1.61 203.81.29.137 TCP 14292 > http [FIN, ACK] Seq=1504 Ack=235576 Win=257760 Len=0
    469 6.244052 192.168.1.61 203.81.29.137 TCP 14297 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    471 6.249564 203.81.29.137 192.168.1.61 TCP http > 14292 [FIN, ACK] Seq=235576 Ack=1505 Win=17280 Len=0
    473 6.279647 203.81.29.137 192.168.1.61 TCP http > 14297 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    479 6.374967 192.168.1.61 203.81.29.137 TCP 14298 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    484 6.419597 203.81.29.137 192.168.1.61 TCP http > 14298 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    897 9.858493 192.168.1.61 203.81.29.137 TCP 14297 > http [FIN, ACK] Seq=1550 Ack=159770 Win=257484 Len=0
    899 9.895188 203.81.29.137 192.168.1.61 TCP http > 14297 [FIN, ACK] Seq=159770 Ack=1551 Win=17280 Len=0
    939 12.840029 192.168.1.61 203.81.29.137 TCP 14298 > http [FIN, ACK] Seq=1806 Ack=226090 Win=257760 Len=0
    941 12.876120 203.81.29.137 192.168.1.61 TCP http > 14298 [FIN, ACK] Seq=226090 Ack=1807 Win=17076 Len=0

    在这种情况下,由于选择了F,在迭代的时候清除了cache,所以每次迭代都需要重新下载资源文件。数据包差不多等于第三种情况的一半,约等于打开两次首页的数据量(449×2个数据包)。

    6. 关于BC选项

    C的解释(Check for newer versions of stored pages every visit to the page

    C比较容易理解,类似IE设置中的每次检查,如果不设置C,LR对于已经cache的文件就不会重新向服务器请求,如果选择C,你就可以在数据包中发现很多304信息。

    B的解释(Cache URLs requiring content(HTMLs)

    LR对于资源文件的cache并不会真正cache在内存中或者在磁盘上,这个选项表示:对于一些需要用到的关联,校验,页面解析内容真正cache在内存中,减少客户端的重复工作。

    当然如果你想把GIF也cache到内存中,你可以在Advanced中设置,选择Specify URL requiring content in addition to HTML pages,加入条目image/gif,并勾选。当Vuser运行的时候,你可以对比一下mmdrv.exe进程的内存消耗(内存占用会更多)。

    四: 结论

    通过上面的测试分析,我们大概知道了每个选项的真正含义,你需要根据你的测试目的来选择合适的设置:

    1、 对于一个具体的应用测试,对于前端Web Server不可忽略,缺省设置非常合适,不需要调整(有时候需要考虑把C选上)

    注意:很多人在录制脚本的时候,习惯把登入操作放到vuser_init中,这时候缺省设置可能会抛错,建议把这类的操作都放入到action中

    2、 如果你更关注后端应用服务器的性能或者说做一些架构的验证分析,那你缺省设置对于你来说就不合适了,你需要选择取消所有的设置项。

    当然你也可以根据自己的具体情况做不同调整,但是一定要真正理解这些选项的具体含义才能做到不犯错误

  • LoadRunner脚本回放问题及解决

    2009-11-05 10:17:42

    LoadRunner脚本回放问题及解决 

    document.body.oncopy = function() { if (window.clipboardData) { setTimeout(function() { var text = clipboardData.getData("text"); if (text && text.length>300) { text = text + "\r\n\n本文来自CSDN博客,转载请标明出处:" + location.href; clipboardData.setData("text", text); } }, 100); } } function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}

    【以下错误转自网帖】

    在运行脚本回放过程中,有时会出现错误,这在实际测试中是不可避免的,毕竟 自动录制生成的脚本难免会有问题,需要运行脚本进行验证,把问题都解决后才加入到场景中进行负载测试。下面结合常用的协议(如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”安装上即可。

    【此外在自己入门性能测试过程中也遇到些其他错误,而通常这些错误也会让人头疼的很】

    1、LoadRunner 在录制(Recording)或是重播(replay)时,会出现自动退出现象,而并没有任何提示信息,这个多数是软件问题,LoadRunner 8.1并不能很好的支持IE7,除了 LoadRunner 8.1 fp4版本打上相应的IE补丁,才可以使用。个人推荐,若是采用8.1版本,就最好使用IE6,若是采用9.1版本,则支持IE7

    2、在录制时,并不能读取数据,以Web/HTTP协议为例,排除一些其他环境错误(比如必须具备Client Server端通信,数据保护必须只用于Windows 程序),重装一次就OK了,并且无需卸载,直接安装,问题就可以解决

    PS:多注意看LoadRunner相应版本的运行环境和支持环境,这样就会剩下很多不必要的麻烦,比如IE版本的问题

  • LoadRunner7.8测试流程(转载)

    2007-09-04 16:05:53

    LoadRunner7.8测试流程

    2007-09-04 10:56:38 / 个人分类:性能测试

    Loadrunner中参数设置详细分析,相信对大家会有用的,这个版本是基于7.8的。
    /dZ)Q;i f$df!u0做负载或者压力测试时,很多人选择使用了Loadrunner测试工具。该工具的基本流程是先将用户的实际操作录制成脚本,然后产生数千个虚拟用户运行脚本(虚拟用户可以分布在局域网中不同的PC机上),最后生成相关的报告以及分析图。但是在录制脚本的过程中会遇到很多实际的问题,比如不同的用户有不同的使用数据,这就牵涉到参数的设置问题。本文就Loadrunner中参数的设置进行说明,希望对大家有所帮助。
    `?7PH(T @+dCP0Q0    在录制程序运行的过程中,VuGen(脚本生成器)自动生成了包含录制过程中实际用到的数值的脚本。如果你企图在录制的脚本中使用不同的数值执行脚本的活动(如查询、提交等等),那么你必须用参数值取代录制的数值。这个过程称为参数化脚本。
    rs w,Vh8_3~0    本文主要包括如下内容:理解参数的局限性、建立参数、定义参数的属性、理解参数的类型、为局部数据类型设置参数的属性、为数据文件设置参数的属性、从已经存在的数据库中引入数据。
    W"Mw*a1k+v0V0    除了GUI,以下的内容适合于各种类型的用户脚本。
    一、关于参数的定义
    "]J"[e,L^3f0    在你录制程序运行的过程中,脚本生成器自动生成由函数组成的用户脚本。函数中参数的值就是在录制过程中输入的实际值。51Testing软件测试网 cA:qh9Y _4s,V k7@
        例如,你录制了一个Web应用程序的脚本。脚本生成器生成了一个声明,该声明搜索名称为“UNIX”的图书的数据库。当你用多个虚拟用户和迭代回放脚本时,也许你不想重复使用相同的值“UNIX”。那么,你就可以用参数来取代这个常量。结果就是你可以用指定的数据源的数值来取代参数值。数据源可以是一个文件,也可以是内部产生的变量。
    /^i"M-Gfm0    用参数表示用户的脚本有两个优点:
    B-{E4eerix0① 可以使脚本的长度变短。51Testing软件测试网{Q8HeR#s3R$@
    ② 可以使用不同的数值来测试你的脚本。例如,如果你企图搜索不同名称的图书,你仅仅需要写提交函数一次。在回放的过程中,你可以使用不同的参数值,而不只搜索一个特定名称的值。
    EjI c^sq2OuI0    参数化包含以下两项任务:
    .K H"m4z$~k0① 在脚本中用参数取代常量值。51Testing软件测试网'AZl5T%D&xYEH*x
    ② 设置参数的属性以及数据源。
    e0f@QaPD _8B0    参数化仅可以用于一个函数中的参量。你不能用参数表示非函数参数的字符串。另外,不是所有的函数都可以参数化的。
     
    二、参数的创建
    ib,p2SIES,a0    可以指定名称和类型来创建参数。不存在对脚本中参数个数的限制。在Web程序的用户脚本中,你可以使用如下过程在基于文本的脚本视图中创建参数。或者,也可以在基于图标的树形视图中创建参数。51Testing软件测试网6~0i-B+p;h L._(TU
        在基于文本的脚本视图中创建一个参数:51Testing软件测试网{N|u\.V$Hw;K
    1、 将光标定位在要参数化的字符上,点击右键。打开弹出菜单。51Testing软件测试网I%Qt ^"sh M
    2、 在弹出菜单中,选择“Replace with a Parameter”。选择或者创建参数的对话框弹出。51Testing软件测试网K{9K-eOjz5i1}'J
    3、 在“Parameter name”中输入参数的名称,或者选择一个在参数列表中已经存在的参数。51Testing软件测试网7YG ?v?2Xw7o
    4、 在“Parameter type”下拉列表中选择参数类型。51Testing软件测试网c0N`O y'H.\"C
    5、点击“OK”,关闭该对话框。脚本生成器便会用参数中的值来取代脚本中被参数化的字符,参数用一对“{}”括住。51Testing软件测试网? iH8~#]v ecz
        注意:在参数化CORBA或者General-Java 用户脚本的时候,必须参数化整个字符串,而不是其中的部分。另外注意:除了Web或者WAP,缺省的参数括号对于任何脚本都是 “{}”。你可以在“General Options”对话框中的“Parameterization”标签(Tools>General Options)中定义参数括号种类。51Testing软件测试网0}g,n&y[`L
    6、用同样的参数替换字符的其余情况,选中参数,点击右键,弹出菜单。从弹出的菜单中,选择“Replace More Occurrences”。搜索和替换对话框弹出。“Find What”中显示了你企图替换的值。“Replace With”中显示了括号中参数的名称。选择适当的检验框来匹配整个字符或者大小写。如果要搜索规则的表达式(.,!,?等等),选中“Regular Expression”检验框,然后点击“Replace”或者“Replace All”。51Testing软件测试网'M*\W7?elB
        注意:小心使用“Replace All”,尤其替换数字字符串的时候。脚本生成器将会替换字符出现的所有情况。
    D%Y$l*[ k2@9?D07、如果想用以前定义过的参数来替换常量字符串的话,选中该字符串,点击右键,然后选择“Use Existing Parameter”,子菜单“Use Existing Parameters”弹出。从子菜单“Use Existing Parameters”选择参数,或者用“Select from Parameter List”来打开参数列表对话框。51Testing软件测试网S c Xk9J+xO,x{:E
        注意:如果用以前定义过的参数来替换常量字符串的话,那么,使用“Parameter List”非常方便。同时,还可以查看和修改该参数的属性。
    '{ZzE5B2d08、对于已经用参数替换过的地方,如果想取回原来的值,那么,就在参数上点击右键,然后选择“Restore Original value”。
    +qD"Qj EeL8K.A1A]0    在Web用户脚本的树形视图中创建参数:
    -~`"[4Z J&k6q9D01、将光标定位在企图参数化的地方,点击右键,从弹出的菜单中选择“Properties”。则相关的属性对话框打开。
    J-X.@)R ]\A \02、点击在要参数化的参量的旁边的“ABC”形状的图标。“Select or Create Parameter”对话框打开。51Testing软件测试网e(l\ Gm^ H
    3、在“Parameter name”中输入参数的名称,或者从列表中选择一个已经存在的参数。51Testing软件测试网;B"wsUo C
    4、在“Parameter type”中输入参数的类型。
    (^4M K/|_&v%Mr Uj8?05、点击“OK”关闭该对话框。用户脚本生成器会用参数来替换最初的字符串常量,并用一个表格形状的图标替换“ABC”形状的图标。51Testing软件测试网_A9pN+A+Nt:L??
    6、要恢复参数化以前的值,点击图标,然后从弹出的菜单中选择“Undo Parameter”,则以前的值便会重现。
     
    三、定义参数的属性51Testing软件测试网\4@#t:c1x;F J(QQ
        创建参数完成后,就可以定义其属性了。参数的属性定义就是定义在脚本执行过程中,参数使用的数据源。在Web用户脚本中,你既可以在基于文本的脚本视图中定义参数属性,也可以在基于图标的树形视图中定义参数属性。下面的过程将教你如何在基于本文的脚本视图中定义参数属性。51Testing软件测试网G[9{7c%ga4Y1|7Q
        在基于文本的脚本视图中定义参数属性步骤:51Testing软件测试网7m9Etm5Aca5}'h
    1、 在参数上点击右键,有菜单弹出。51Testing软件测试网^&hw@3{q zM8y
    2、 在弹出的菜单中,选择“Parameter Properties”。参数属性对话框打开,显示和当前参数类型相关的属性。
    gaxM*sSL({03、 输入参数的属性值。51Testing软件测试网M9O ?%M \bf
    4、 点击“Close”关闭参数属性对话框。
    .k&z,o};TDoQ0    在Web用户脚本的树形视图中定义参数的属性:51Testing软件测试网h[*V$u,MJn)[9U
    1、将关标定位在参数上,然后点击右键,选择“Properties”。属性对话框打开。51Testing软件测试网7L8\6}#s0L$zt PX!s
    2、点击要定义属性的参数旁边的表格形状按钮,点击右键,选择“Parameter Properties”。参数属性对话框打开,和参数类型相关的属性显示出来。51Testing软件测试网!v:_Pb;e @T&@"E
    3、 输入参数的属性。51Testing软件测试网.Xh6f qL
    4、 点击“Close”关闭参数属性对话框。51Testing软件测试网)^wb ?z |z
        使用参数列表:51Testing软件测试网;r*w3D-AfT*~
      使用参数列表可以在任意时刻查看所有的参数,创建新的参数、删除参数,或者修改已经存在参数的属性。
    v-a*_M x-fk!{&hA01、 点击参数列表按钮或者用“Vuser>Parameter List”。参数列表对话框打开。
    *]fP)j as x_x p02、要创建新的参数,点击“New”按钮。新的参数则被添加在参数树中,该参数有一个临时的名字,你可以给它重新命名,然后回车。设置参数的类型和属性,点击“OK”,关闭参数列表对话框。51Testing软件测试网$ey}XP)y
        注意:不要将一个参数命名为“unique”,因为这个名称是用户脚本生成器本身的。用户脚本生成器创建新的参数,但是不会自动用该参数在脚本中替换任意选中的字符串。
    P3Vl+G'phOt-V03、要删除已有的参数,那么,要先从参数树中选择该参数,点击“Delete”,然后确认你的行为即可。51Testing软件测试网C4T4_)b*T:N2Pb
    4、要修改已有参数,那么,要先从参数树中选择该参数,然后编辑参数的类型和属性。
    四、理解参数的类型
    %O|/p6Q2F G)p_2Kak(q0  在你定义参数属性的时候,要指定参数值的数据源。你可以指定下列数据源类型的任何一种:51Testing软件测试网6iAW&Xl#Y3k1~
    Internal Data―― 虚拟用户内部产生的数据。51Testing软件测试网LgY.w7p QN/e`
    Data Files ――存在于文件中的数据。可能是已存在的文件或者是用脚本生成器新创建的。
    Iux$R6GF0User-Defined Functions―― 调用外部DLL函数生成的数据
    &U%mu%W"a$@LVw0  Internal Data包括以下几种:51Testing软件测试网%tx)G GL9i6K
    1、 Date/Time
    9L8z5Z] Qz!s"O5u D0  Date/Time用当前的日期/时间替换参数。要指定一个Date/Time格式,你可以从菜单列表中选择格式,或者指定你自己的格式。这个格式应该和你脚本中录制的Date/Time格式保持一致。
    )D dS Jj}+Xl X02、 Group Name
    cW pVg|-P0  Group Name 用虚拟用户组名称替换参数。在创建scenario的时候,你可以指定虚拟用户组的名称。当从用户脚本生成器运行脚本的时候,虚拟用户组名称总是None。51Testing软件测试网(c(]1^5}P5b _
    3、 Load Generator Name
    2tU8xw n%L7M0  Load Generator Name用脚本负载生成器的名称替换参数。负载生成器是虚拟用户在运行的计算机。
    u"{V v"x04. Iteration Number51Testing软件测试网.s6R@w#Gx\
      Iteration Number用当前的迭代数目替换参数。51Testing软件测试网#}!g9?F_)|l"U+{-w
    5、 Random Number
    ?\!\J:]0  Random Number用一个随机数替换参数。通过指定最大值和最小值来设置随机数的范围。51Testing软件测试网2ti X F%V
    6、 Unique Number51Testing软件测试网 l/m!J6fj
      Unique Number用一个唯一的数字来替换参数。你可以指定一个起始数字和一个块的大小。
    I0jB!f Q07、 Vuser ID
    2ms%~$[T0?$yF0  Vuser ID用分配给虚拟用户的ID替换参数,ID是由Loadrunner的控制器在scenario运行时生成的。如果你从脚本生成器运行脚本的话,虚拟用户的ID总是-1。
    五、数据文件51Testing软件测试网9J-U0IR&]~/XE#A
      数据文件包含着脚本执行过程中虚拟用户访问的数据。局部和全局文件中都可以存储数据。可以指定现有的ASCII文件、用脚本生成器创建一个新的文件或者引入一个数据库。在参数有很多已知值的时候数据文件非常有用。数据文件中的数据是以表的形式存储的。一个文件中可以包含很多参数值。每一列包含一个参数的数据。列之间用分隔符隔开,比如说,用逗号。
    h%CFN$M0  对数据文件设置参数属性
    G(lD;l,v0  如果使用文件作为参数的数据源,必须指定以下内容:文件的名称和位置、包含数据的列、文件格式,包括列的分隔符、更新方法。51Testing软件测试网$g[Q#k|Fr
      如果参数的类型是“File”,打开参数属性(Parameter Properties)对话框,设置文件属性如下:
    #{SQd!B+x G01、 在“File path”中输入文件的位置,或者点击“Browse”指定一个已有文件的位置。缺省情况下,所有新的数据文件名都是“parameter_name.dat”,注意,已有的数据文件的后缀必须是.dat。51Testing软件测试网|3B%D6Q,w(t
    2、点击“Edit”。记事本打开,里面第一行是参数的名称,第二行是参数的初始值。使用诸如逗号之类的分隔符将列隔开。对于每一新的表行开始一行新的数据。
    UwC,Z-i(Y-b0  注意:在没有启动记事本的情况下如果想添加列,就在参数属性对话框中点击“Add Col”,那么“Add new column”对话框就会弹出。输入新列的名称,点击“OK”。脚本生成器就会添加该列到表中,并显示该列的初始值。51Testing软件测试网"m8{q6UbS
    3、 在“Select Column”部分,指明包含当前参数数据的列。你可以指定列名或者列号。列号是包含你所需要数据的列的索引。列名显示在每列的第一行(row 0)。
    wZv/jQ04、 在“Column delimiter”中输入列分隔符,你可以指定逗号、空格符等等。
    M'e^(O@w"?bS05、 在“First data line”中,在脚本执行的时候选择第一行数据使用。列标题是第0行。若从列标题后面的第一行开始的话,那就在“First data line”中输入1。如果没有列标题,就输入0。51Testing软件测试网K V e"x5x.i
    6、 在“Select next row”中输入更新方法,以说明虚拟用户在脚本执行的过程中如何选择表中的数据。方法可以是:连续的、随机的、唯一的、或者与其它参数表的相同行。51Testing软件测试网7O+D/lU*Ce
      6.1、顺序(Sequential):该方法顺序地给虚拟用户分配参数值。如果正在运行的虚拟用户访问数据表的时候,它会取到下一行中可用的数据。
    FDI;{,F}0D0  6.2、随机(Random):该方法在每次迭代的时候会从数据表中取随机数51Testing软件测试网 K x/@-V }*]+X.~#Ah8m^
      6.3、 使用种子取随机顺序(Use Random Sequence with Seed):如果从Loadrunner的控制器来运行scenario,你可以指定一个种子数值用于随机顺序。每一个种子数值在测试执行的时候代表了一个随机数的顺序。无论你何时使用这个种子数值,在scenario中同样的数据顺序就被分配给虚拟用户。如果在测试执行的时候发现了一个问题并且企图使用同样的随机数序列来重复测试,那么,你就可以启动这个功能(可选项)。
    "_a!t2FH/B0K0  6.4、唯一(Unique):Unique方法分配一个唯一的有顺序的值给每个虚拟用户的参数。51Testing软件测试网6j-F dT'Z8t'b3` z!d
      6.5 、与以前定义的参数取同一行(Same Line As <parameter>):该方法从和以前定义过的参数中的同样的一行分配数据。你必须指定包含有该数据的列。在下拉列表中会出现定义过的所有参数列表。注意:至少其中的一个参数必须是Sequential、Random或者Unique。51Testing软件测试网)nn"\.h qNX
        如果数据表中有三列,三个参数定义在列表中:id1,name1和title1,如下:。
    tyA&S(Y0ID Name Title
    U:e3ek3?$CAo0132 Kim Manager
    8F1_ J#r7e6C0187 Cassie Engineer51Testing软件测试网0U`(@E1KG[
    189 Jane VP51Testing软件测试网'xFPaQF
        对于参数id1,你可以指示虚拟用户使用Random方法,而为参数name1和title1就可以指定方法“Same Line as id1”。所以,一旦ID“132”被使用,那么,姓名(Name)“Kim”和职位(Title)“Manager”同时被使用。
    7、Updta value on数据的更新方法
    7.1、Each iteration――每次反复都要取新值
    7.2、Each occurrence――只要发现该参数就重新取值
    7.3、Once――在所有的反复中都使用同一个值
    8、When out of values超出范围:(选择数据为unique时才可用到)
    8.1、Abort Vuser――中止
    8.2、Continue in a cyclic manner――继续循环取值
    8.3、Continue with last value――取最后一个值
    9、Allocate Vuser values in the Controller在控制器中分配值:(选择数据为unique时才可用到)
      9.1、 Automatically allocate block size――自动分配
      9.2、Allocate()values for each Vuser――指定一个值
    六、从已存在的数据库中导入数据51Testing软件测试网s$cR$To(^
      Loadrunner允许你利用参数化从已经存在的数据库中导入数据。可以使用下列两种方式之一:
    5KUd'~Vn)v,~01、 使用Microsoft Query(要求在系统上先安装MS Query)。51Testing软件测试网Z+zJBaS N-R `,R]
    2、 指定数据库连接字符串和SQL语句。
    Z6?\u6[ t0    用户脚本生成器在从数据库中导入数据的过程中提供了一个向导。在向导中,你指明如何导入数据-通过MS Query创建查询语句或者直接书写SQL语句。在导入数据以后,以.dat为后缀并作为正规的参数文件保存。要开始导入数据库中数据的过程,在参数属性对话框中点击“Data Wizard”,则,数据库查询向导弹出。
    O;|[,R6j9RD {3{0  要创建新的查询
    #? t'L M;Iq(c,{01、 选择“Create new query”。如果需要MS Query的帮助,选择“Show me how to use Microsoft Query”,然后点击“Finish”。
    !S8k)r*S J'QZ0如果你还没有安装Microsoft Query,Loadrunner会提示你这个功能不可用。在进行之前,从Microsoft Office中安装MS Query。51Testing软件测试网7`'jL0t f2F-^
    2、 在Microsoft Query中遵循以下步骤,导入期望的表和列。
    :w1x4po:QTg}0\03、 在完成数据的导入后,选择“Exit and return to Virtual User Generator”,然后点击“Finish”。在参数属性对话框中数据库记录以data文件的形式显示出来。51Testing软件测试网*}!_ duIB+vf|U)C
    要在MS Query中编辑并查看数据,选择“View data or edit in Microsoft Query”。若要结束,则选择“File>Exit and return to Virtual User Generator”返回到脚本生成器。
    jZ"si\]:D+S:Z-{ a04、 在“Select Column”部分,指定包含当前参数数据的列可以指定列号或者列名。注意:列标题默认为第0行(row 0)。
    R0Scg7I05、 从“Select next row”列表中选择一个更新方法来告诉虚拟用户在脚本指定的过程中如何选择表中的数据。可选项是:Sequential、Random、Unique或者Same Line As。其中每一项的含义文章前面已经讲述,就不再赘述。
    c {P1mv06、 如果选择“Advance row each iteration”,虚拟用户在每次迭代的时候会使用新的一行的数据而不是重复同样的数据。
    "o"K {*i Rb,g0  要指定数据库连接或者SQL语句51Testing软件测试网 J` q}ll
    1、 选择“Specify SQL Statement”,然后点击“Next”。51Testing软件测试网zh/R$?1GB
    2、点击“Create”指定一个新的连接字符串。选择数据源的窗口弹出。
    z.e)W)u&XX0_03、选择已有的数据源,或者点击“New”创建一个新的数据源。向导将提示你穿过创建ODBC数据源的过程。在完成后,连接字符串就会在连接字符串框中显示出来。
    H"Q ~7T;v(gB04、 在SQL框中,输入或者粘贴SQL语句。
    8fCnWC05、点击“Finish”继续SQL语句并导入数据。数据库记录将以data文件的形式显示在参数属性框中。51Testing软件测试网%L%BJM H/M)?$JG {b
    6、 在“Select Column”部分中,指定包含当前参数数据的列。你可以指定列号或者列名。
    Dw`9I(C2Y)p|T.X07、 从“Select next row”列表中选择一个更新方法来告诉虚拟用户在脚本指定的过程中如何选择表中的数据。可选项是:Sequential、Random、Unique或者Same Line As。
    %t H4N~jrU_'r MhPL3O08、 如果从Update out of values中,选择“each iteration”,虚拟用户在每次迭代的时候会使用新的一行的数据而不是重复同样的数据。
  • 压力测试和性能测试的区别(转载)

    2007-06-13 13:16:48

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

    2006-12-25 14:13:06 / 个人分类:测试技术

    性能测试就是用来测试软件在系统中的运行性能的。性能测试可以发生在各个测试阶段中,即使是在单元层,一个单独模块的性能也可以使用白盒测试来进行评估,然而,只有当整个系统的所有成分都集成到一起之后,才能检查一个系统的真正性能。

    性能测试经常和压力测试一起进行,而且常常需要硬件和软件测试设备,这就是说,常常有必要的在一种苛刻的环境中衡量资源的使用(比如,处理器周期)。外部的测试设备可以监测测试执行,当出现情况(如中断)时记录下来。通过对系统的检测,测试者可以发现导致效率降低和系统故障的原因。


    压力测试:对系统不断施加压力的测试,是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。例如测试一个 Web 站点在大量的负荷下,何时系统的响应会退化或失败。

    性能测试:在交替进行负荷和强迫测试时常用的术语。性能测试关注的是系统的整体。它和通常所说的强度、压力/负载测试测试有密切关系。所以压力和强度测试应该于性能测试一同进行。
    举例说明:针对一个网站进行测试,模拟10到50个用户就是在进行常规性能测试,用户增加到1000乃至上万就变成了压力/负载测试。如果同时对系统进行大量的数据查询操作,就包含了强度测试。

    性能测试(Performance) 正常使用的时间内系统完成一个任务需要的时间,多人同时使用的时候响应时间,在可以接受范围内.J2EE技术实现的系统在性能方面更是需要照顾的,一般原则是3秒以下接受,3-5秒可以接受,5秒以上就影响易用性了. 如果在测试过程中发现性能问题,修复起来是非常艰难的,因为这常常意味着程序的算法不好,结构不好,或者设计有问题。因此在产品开发的开始阶段,就要考虑到软件的性能问题

    压力测试 (Stress) 多用户情况可以考虑使用压力测试工具,建议将压力和性能测试结合起来进行.如果有负载平衡的话还要在服务器端打开监测工具,查看服务器CPU使用率,内存占用情况, 如果有必要可以模拟大量数据输入,对硬盘的影响等等信息.如果有必要的话必须进行性能优化(软硬件都可以).

    压力测试和性能的测试的区别是在于他们不同的测试目的

    压力测试是为了发现系统能支持的最大负载,他的前提是要求系统性能处在可以接受的范围内,比如经常规定的叶面3秒钟内响应;
    所以一句话概括就是:在性能可以接受的前提下,测试系统可以支持的最大负载。

    性能测试是为了检查系统的反映,运行速度等性能指标,他的前提是要求在一定负载下,如检查一个网站在100人同时在线的情况下的性能指标,每个用户是否都还可以正常的完成操作等。
    概括就是:在不同负载下(负载一定)时,通过一些系统参数(如反应时间等)检查系统的运行情况;
    比如我们说某个网站的性能差,严格上应该说‘在N人同时在线情况下,这个站点性能很差)

    总之,就像一个方程式:综合性能=压力数*性能指数,
    综合性能是固定的:
    压力测试是为了得到性能指数最小时候(可以接受的最小指数)最大的压力数
    性能测试是为了得到压力数确定下的性能指数
  • 数据统计

    • 访问量: 9826
    • 日志数: 9
    • 建立时间: 2007-06-13
    • 更新时间: 2010-08-23

    RSS订阅

    Open Toolbar