51Testing软件测试论坛

标题: 怎样才能测试WEB系统支持多少用户 [打印本页]

作者: linneiwei    时间: 2013-6-19 22:00
标题: 怎样才能测试WEB系统支持多少用户
1 怎样的性能测试结果才是有效的
1.1 错误观点
性能测试工具运行一定用户数都成功,则表示该服务器能支持这么多用户数。这是错误的。
解答:
A.        因为一次有效的测试结果,不只用户都运行成功,同时需要保证访问一个页面或一次交易的响应时间在合理范围。“2-5-8原则”,简单说,就是当用户访问一个页面或一次交易能够在2秒以内得到响应时,会感觉系统的响应很快;当用户在2-5秒之间得到响应时,会感觉系统的响应速度还可以;当用户在5-8秒以内得到响应时,会感觉系统的响应速度很慢,但是还可以接受;而当用户在超过8秒后仍然无法得到响应时,会感觉系统糟透了,或者认为 系统已经失去响应,而选择离开这个Web站点,或者发起第二次请求。
B.        测试场景不一定模拟了真实业务场景,因为浏览器是并发多线程多TCP完成一个页面的,而测试工具基本都是1,2个线程;对服务器的压力是不一样的,真实环境的TCP压力是性能测试工具虚拟环境的几倍。

2 影响WEB服务器性能指标的因素有哪些
为什么性能测试工具,需要提供事务(页面或交易、全脚本)指标、TCP连接、吞吐量、服务器资源监控、请求数/响应数。
1)        硬件资源:如CPU、内存、网卡吞吐量、I/O能力、SWAP交换能力
2)        线程数:这里介绍JAVA的WEB服务器,默认每线程占用的内存为2M,而32为系统JAVA进程(如tomcat、JBoss)占得空间只有2G(一般比这个小),因此线程数有限制;64为无限制线程,但CPU要跟得上
3)        TCP连接数:操作系统的TCP连接数理论值一般很大,操作系统对TCP连接设置有默认值(怎么配置,可以网上搜索,这里不介绍);但实际测试中TCP连接在几百,就出现测试的响应时间很长。抓包分析,原来是三次握手的SYN包服务器不及时响应,导致SYN重传(3秒后,9秒后)。
[attach]85745[/attach]
如果SYN丢了,则会重发,但是第一次是3秒后,第2次是在9秒后,如果重发才收到的SYN_ACK,则导致TCP连接超长,从而导致业务响应时间延长。
[attach]85746[/attach]
4)        响应时间:服务器响应时间小,用户体验才好,在大量用户并发的情况下,HTTP响应时间在用户忍受度下才是有效的,一般采用“2-5-8原则”。
5)        软件本身代码性能算法:这个不做介绍,如差的算法、查询数据库时间长等等。

3 测试人员经常遇到的一些常见问题及解答
3.1        为什么使用浏览器访问页面响应很快,1-2秒就完成;而使用测试工具却需要10几秒,甚至几十秒才完成脚本
解答:
A.        这是由于浏览器访问页面响应是并发的,同时并发多个线程(多个Socket),而性能测试工具基本是串行发送请求的。如果一个页面有100个资源(CSS、HTML、JS、图片),需要发送100个HTTP请求,如果使用6个线程(浏览器),则每个大概请求14个HTTP;如果使用一个线程(测试工具),则需要请求100个,时间当然大很多。下图为chrome浏览器调试工具显示的并发情况:
[attach]85747[/attach]
B.        另外浏览器具有缓存功能,如果之前访问了www.qq.com,会把一些图片缓存在浏览器临时目录,下次请求时发送的HTTP请求会带上If-Match或Etag等头域,WEB服务器判断资源没改变则会304响应,而不是回200 OK,这样减少资源的传输,所以时间就小。而有些测试工具是不携带这些头域(包括Loadrunner),因此回的响应是200 OK。所以测试人员默认真实测试时,可以考虑部分有缓存,部分没缓存。

3.2        性能测试工具是怎么模拟WEB虚拟用户
A.        录制
使用浏览器进行正常业务操作,性能测试工具录制下HTTP请求信息。一般需要记录URL与头域、内容、响应码。虽然不同的性能测试工具录制方式不一样(如loadrunner采用Hook,JMeter采用代理或badbody,kylinPET采用网卡抓包与代理),但都能实现录制正常业务的HTTP请求。
测试工具最好能录制出缓存头域,即If-Match或Etag,loadrunner好像不支持录制缓存头域。
B.        模拟用户
根据录制的脚本发送HTTP请求与接收响应,发送前替换参数(实现多用户不同参数值)、接收时关联参数(从接收的响应消息获取参数值,如Cookie、JSessionID)
下面简单列举使用过的性能测试工具是如何模拟的(工具运行一个用户,然后使用wireshark抓包分析得到的结论):
        Loadrunner:根据录制脚本发送HTTP请求,如果HTTP请求包括内嵌资源(如图片、CSS、JS),会启动第二个线程执行内嵌资源,即Loadrunner支持同时两个线程两个TCP连接。
        kylinPET(国产):可通过配置设置一个线程或者多个线程并发发送HTTP请求,多个线程并发及TCP连接数跟浏览器行为一样。
        JMeter:只有一个线程,一个TCP连接
        其他工具:本人没用过,请用过的兄弟姐妹可以补充下。通过wireshark抓包分析。

3.3        怎样才能测试出WEB服务器能支持多少真实用户,怎样的服务器调优参数才合理
解答:
这需要性能测试工具可以模拟出真实用户的行为,包括HTTP请求数、每用户并发线程与TCP连接数、思考时间、有无缓存。
为什么需要模拟真实用户的线程数与TCP连接数呢,上面提到过,WEB服务器的线程数与TCP连接数往往很低,这不是提高硬件就能轻松解决的,这也是服务器调优比较复杂的配置。
因此,只有尽最大能力模拟真实用户(浏览器或其它WEB客户端,可能不同浏览器的并发线程与TCP数都不一样)的行为的测试场景,测试结果才最真实,服务器调优才最有意义。


4 怎样才能测试系统支持多少用户
4.1 模拟真实用户的行为
只有模拟用户一样的行为才可以系统支持的测试用户数有效,因此需要模拟一样的并发数、TCP连接数、甚至可以是HTTP请求的时间间隔。用户可以是浏览器、智能手机、智能机顶盒,测试工具模拟他们一样的行为才是最有效的测试。

4.2 测试结果数据在合理范围
4.2.1 用户统计
成功数、失败数、每秒在线数、最大在线数,通过这些指标分析此次测试结果支持的用户数、用户最大数

4.2.2 点击率
每秒平均HTTP请求数、响应数。分析系统的处理能力

4.2.3 事务
事务成功、失败、时间,事务一般是整个脚本运行时间、或者一个页面或一个交易,通过结果分析,得出每个事物的时间是否合理,符合“2-5-8”原则,如果测试结果显示事物时间非常大,则表示系统支持不了此次测试的用户,因为用户的响应时间太大(像火车订票一样,太多用户导致响应时间长,用户无法忍受,则认为这个系统烂)。
当然,还需要查看事务的百分比,分析90%、80%、70%、60%的事务时间是否在合理范围。

4.2.4 TCP连接信息
TCP连接成功数、失败数、TCP三次握手时间。因为此次测试结果可能是由于服务器系统或网络的TCP的丢包与重传才导致延时大的。如果是服务器的原因,服务器收到TCP的SYN而不处理,可以通过调试服务器的TCP配置来优化。
怎么才知道是服务器的问题呢,这个需要性能测试工具能给出TCP连接时间(当前了解只有kylinPET可以支持),如果显示超过3秒,这时需要检查是网络还是服务器问题,可以在服务器端抓包(tcpdump或wireshark)然后分析TCP的SYN信息(个数、时间)

4.2.5 资源占用
服务器的CPU、内存、带宽、I/O是不是已经不足,导致系统上不去是哪个原因,根据原因进行调优或升级。
测试时需要考虑性能测试工具的CPU占用率,如果性能测试工具占用CPU很高,此次测试可能瓶颈是在工具,而导致测试结果是无效的。
作者: bingtang5    时间: 2013-6-20 10:33
沙发?顶楼主!好东西!
作者: icestick8586    时间: 2013-6-20 22:33
lz还有没有要发表的,继续哇,
作者: lin39320028    时间: 2013-6-24 14:54
不错,是个好东西。怪不得我们用loadrunner测试老是响应时间很长,跟浏览器响应时间差好多,总不知道是什么原因,原来是由于loadrunner并发数与浏览器不一样的问题。

使用了kylinPET的模拟浏览器功能,确实响应时间小啦,不错,顶国产
作者: patrick_1984    时间: 2013-6-24 15:40
学习下。一直在用LoadRunner 都11。5了。还是问题多多啊。
作者: wuwoyiran    时间: 2013-6-24 15:52
好东西,谢谢分享!
作者: linneiwei    时间: 2013-6-25 20:32
希望能与大家在性能测试技术领域一起进步,大家有测试方面的问题或总结,可以加群讨论或共享,群号:65917724
作者: mr.bee    时间: 2013-6-26 10:42
3.1        为什么使用浏览器访问页面响应很快,1-2秒就完成;而使用测试工具却需要10几秒,甚至几十秒才完成脚本

这个问题大部分情况都应该先排查测试端是不是有网络带宽瓶颈
另外
“这是由于浏览器访问页面响应是并发的,同时并发多个线程(多个Socket),而性能测试工具基本是串行发送请求的”

串行发送请求说法并不准确,脚本是串行的 ,但是请求并不是串行的,就算web脚本基于URL,也有并发组函数避免脚本串行执行带来的请求并行的问题
作者: mr.bee    时间: 2013-6-26 10:45
1.1 错误观点
性能测试工具运行一定用户数都成功,则表示该服务器能支持这么多用户数。

这个问题的根本错误应该是:测试工具的从来都是线程数,不是用户数,线程数和用户数实际上是两码事

应该关注的是如何能够模拟到生产环境的一段峰值中的每秒请求/并发数
作者: linneiwei    时间: 2013-6-26 21:39
回复 8# mr.bee


    版主可能理解错了我的意思。
1、 多用户并发肯定是并行的,每个测试工具都是
2、但每个用户的请求很多工具是串行的,loadunner当前也只是每个用户最多只并行两个线程
     浏览器标准是规定并发2个,但由于现在WEB发展很快,一个页面的HTTP请求现在已经很大,所以当前浏览器默认一般是6个并发去并行请求资源,但当页面资源很多时,浏览器就会超过6个并发
    这个可以使用wireshark抓包工具、浏览器自带调试工具(按F12)、httpWatcher就可以知道

    loadrunner老版本一直是每用户两个并发(100个用户就200个并发啦),直到现在一直没改,假设一个页面有120个HTTP请求,2个并发响应时间肯定远小于6个并发,甚至18个并发

3、所以说很多测试工具是串行的(我指的是每个虚拟用户)执行HTTP请求;loadrunner功能强大些,每个用户可以达到2个并发;然后研究过kylinPET,确实每个虚拟用户达到浏览器录制时一样的并发
     研究方法,很简单,使用wireshark抓包工具查看每个请求的时间是不是一个请求然后一个响应,还是多个请求同时的
作者: linneiwei    时间: 2013-6-26 22:13
回复 9# mr.bee

您的问题1、测试工具的从来都是线程数,不是用户数,线程数和用户数实际上是两码事
回答:
        那是因为测试工具能力问题,如果可以实现模拟用户数,那测试工具能力就更强,假设模拟浏览器,如果能模拟浏览器一样的并发,请求时间间隔跟浏览器录制时一样,即可达到模拟用户的能力。
        除去浏览器的渲染不考虑,我们只考虑浏览器底层的HTTP请求,如果你能模拟浏览器底层的HTTP能力,即可以实现模拟一个真实用户对服务器的压力。
        渲染是浏览器自己的,且是客户端自己的,所以测试工具不用考虑这个。

       然后如果测试结果显示不是测试工具问题,测试工具自己CPU不高(CPU高的话,响应时间长就也包括了测试工具处理时间),吞吐量正常,那么基本可以认为浏览器模拟了。

      所以,模拟用户(浏览器或其他如智能终端)不是不可以做到,只是测试工具自身能力问题。我们目前项目使用的是kylinPET工具,他们确实做到了模拟浏览器的能力。

您的问题2、应该关注的是如何能够模拟到生产环境的一段峰值中的每秒请求/并发数

1、这个是正确的,但你怎么去评估呢。
    1)假设你模拟到了生产环境的每秒请求/并发数,你知道你的系统能支持多少用户吗?我是不知道,因为有很多不确定因素
        实际是实际情况实际处理,如果你测试时面向用户的(如浏览器),你的每秒请求/并发数只是一个指标而已,还有响应时间(假设你达到了每秒请求/并发数,但响应时间很大,你的测试可以说是没什么用的)
        如果你测试的是后台里一个跟你在一个局域网且连接数固定的(如有连接池,或其他远程接口调用),这种你的测试每秒请求/并发数就很重要,因为影响因素就少很多)
    2)你领导让你测试,肯定不会说让你测试能不能达到多少HTTP请求/秒;而是让你测试能不能支持多少用户。
    3)只有面向用户的测试才是让性能测试更好理解,不然很多人测试后都不知道能支持多少用户。

2、TCP连接其实是一个很重要的指标,很多时候性能上不去就是这个原因,很多测试人员都没去关注或不知道怎么关注
    1)如tomcat这类WEB服务器,如果没有非阻塞IO或异步IO,TCP连接会跟线程绑定,而tomcat线程池一般都很小,而且线程池不一定是越大越好,要经过性能测试与时间业务给出合理的线程池
         所以如果你没摸你浏览器一样的TCP连接并发,你是很难调优的,也不知道支持多少用户。
    2)系统TCP连接资源也是有限制的,如linux的一些系统调优就涉及这个
    3)性能测试工具,如loadrunner只给出多少TCP连接成功、失败,其实在大量TCP下,TCP重传很常发生,这个会导致响应时间变长,如TCP三次握手时间,loadrunner就没给出,另一个性能工具kylinPET就给出了这个指标

3、所以,我特别强调模拟真实用户,如浏览器(或其他如智能手机、机顶盒),是很有必要的,因为,性能测试的目的就是了解系统能支持多少用户,而不是支持多少每秒请求/并发数,从用户角度来看性能测试才好理解,很多指标就
     能简单理解。
     如,模拟了真实用户,你就知道响应时间是否合理,而不是看不懂,因为用户访问一个页面,响应应该多长时间是有个合理范围的(业界一般说2-5-8原则)

    只是当前很多测试工具难以实现模拟浏览器的能力,目前就了解kylinPET性能工具基本做到啦,当然,测试工具要能模拟真实用户要能做到线程数就是用户数(并发几个线程等于一个用户),瓶颈不要出现在测试工具,不然事务的响应时间长可能是由于测试工具,所以测试时不要让测试工具CPU占用太高,如果太高,就把并发用户分到多个执行器。
作者: 51TestingToo    时间: 2013-6-28 09:10
楼主是强人啊。这么好的文章要顶起。

确实有道理,loadrunner指标总是看不明白,不知道合不合理,有些用户响应时间短,有些用户响应时间长,然后每秒处理数怎么换算成用户,一直搞不懂。

楼主说得好,如果是从用户角度上考虑的话,测试数据合理不合理跟用户数关联起来就好理解;
原来事务应该这样设置的啊,每个页面或交易设置一个事务,然后从用户角度测试,事务太高就说明用户不符合指标,学习啦

没想到loadrunner到11.5啦还是很多不支持
请问楼主,kylinPET性能工具免费吗,哪里可以下载呢
作者: linneiwei    时间: 2013-6-30 13:26
kylinPET工具可以到他们的官网下载www.kylinpet.com,使用还是挺方便的。

大家使用性能工具,不管是loadrunner还是kylinPET,都需要注意测试工具机器的CPU、吞吐量,避免瓶颈在工具导致测试效果不好。
作者: 51TestingToo    时间: 2013-7-2 09:10
下载啦,确实不错

居然有回放与录制比较,这个定位脚本问题就方便多啦
还有运行后参考事务时间值,可以一目了然看出响应时间与录制的响应时间差别大不大

好东西,顶
作者: 周冰末    时间: 2013-7-2 10:31
初步了解中,好东东,顶起!
作者: christine200    时间: 2013-7-2 13:30
不错的文章~
作者: xin_晴    时间: 2013-7-3 15:47
推荐,非常好的文章
作者: xin_晴    时间: 2013-7-3 15:47
推荐,非常好的文章
作者: lsekfe    时间: 2013-7-3 15:58
小编看到好文章激动了!
作者: lijingprince5    时间: 2013-7-7 21:48
回复 13# linneiwei


    测试工具所在机器是否有瓶颈 有没有好的方法验证?
作者: 花雪如梦    时间: 2013-7-8 19:58
mark
作者: kevin898    时间: 2013-7-9 15:26
不错  顶下
作者: lin39320028    时间: 2013-7-12 09:23
同问:大牛,怎么判断是测试工具存在瓶颈
作者: zyl520xz    时间: 2013-7-12 20:39
大神啊!!我说怎么压不上去.....
非常感谢、好文章啊果断收藏
作者: linneiwei    时间: 2013-7-16 18:59
回复 20# lijingprince5


    就注意CPU不要过高,不然导致响应时间大是客户端导致的,所以并发量大就用多个执行器
    吞吐量注意不要大于网卡带宽
    TCP连接数,linux一般要注意
作者: 51TestingToo    时间: 2013-7-29 09:06
问个问题,性能测试,怎么查看TCP指标呢,就是创建TCP时间,关闭时间,系统最大TCP连接数等指标
作者: 地壳    时间: 2013-8-1 10:41
顶楼主
作者: 地壳    时间: 2013-8-1 10:44
标题: RE: 怎样才能测试WEB系统支持多少用户
回复 20# lijingprince5


    测试工具所在计算机起码要符合测试工具的运行环境:操作系统,cpu,内存等。如果计算机连基本的测试工具都运行不起来谈何测试
作者: linneiwei    时间: 2013-10-9 21:54
浏览器并发行为可以看该视频:
http://www.tudou.com/listplay/vrBLhG9WgpA/9KPuCs6X2cw.html

或者下载该视频:http://pan.baidu.com/s/1DsfAX
作者: qiqiloveyunyun    时间: 2013-10-31 23:52
顶楼主,写得不错
作者: laicaiyan    时间: 2013-11-5 10:59
真是太好了
作者: linneiwei    时间: 2013-11-23 17:22
更好的性能测试,还需要了解很多与工具无关的知识,这样才能知道如何调试,测试出问题是什么原因

参照一哥们写的:http://www.51testing.com/html/95/302795-852001.html
作者: zxl105    时间: 2013-11-27 11:30
受益了
作者: 赐我个女朋友吧    时间: 2014-6-25 15:26
顶下,好文。
模拟浏览器并发这个确实很必要,在家里安装的loadrunner抓包确实如他们说的,loadrunner一个虚拟用户最多并发两个TCP,比浏览器少很多,我是拿百度的知道页面测试的。如果是这样真实浏览器并发的压力要比loadrunner大很多

不知道loadrunner 12版本有没支持一个虚拟用户能跟真实浏览器访问页面的压力,有没用过12版本的xdjm回答下
作者: q2178669    时间: 2014-6-26 11:25
不是2-5-10原则么,难道是我记错了?
作者: akhond    时间: 2014-8-6 15:10
不错,确实需要从原理上理解测试工具加压过程和其计数的计算规则
作者: drg520    时间: 2014-9-27 13:15
赶紧mark下来先!学习了。
作者: 授客    时间: 2014-9-29 20:59
[attach]92250[/attach]
lr不是有这个东西?




作者: 1060547356    时间: 2015-7-21 14:54
顶!d=====( ̄▽ ̄*)b
作者: binxue168    时间: 2016-6-22 01:00
大牛,看了这篇文章很激动,解除了我多年的疑惑。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2