51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 18588|回复: 39
打印 上一主题 下一主题

[原创] 怎样才能测试WEB系统支持多少用户

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2013-6-19 22:00:17 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
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秒后)。

如果SYN丢了,则会重发,但是第一次是3秒后,第2次是在9秒后,如果重发才收到的SYN_ACK,则导致TCP连接超长,从而导致业务响应时间延长。

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浏览器调试工具显示的并发情况:

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很高,此次测试可能瓶颈是在工具,而导致测试结果是无效的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x

评分

参与人数 1综合技术指数 +30 收起 理由
lsekfe + 30

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏10
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2013-6-25 20:32:51 | 显示全部楼层
希望能与大家在性能测试技术领域一起进步,大家有测试方面的问题或总结,可以加群讨论或共享,群号:65917724
回复 支持 0 反对 1

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2013-6-26 21:39:48 | 显示全部楼层
回复 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抓包工具查看每个请求的时间是不是一个请求然后一个响应,还是多个请求同时的
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2013-6-26 22:13:20 | 显示全部楼层
回复 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占用太高,如果太高,就把并发用户分到多个执行器。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2013-6-30 13:26:50 | 显示全部楼层
kylinPET工具可以到他们的官网下载www.kylinpet.com,使用还是挺方便的。

大家使用性能工具,不管是loadrunner还是kylinPET,都需要注意测试工具机器的CPU、吞吐量,避免瓶颈在工具导致测试效果不好。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2013-7-16 18:59:39 | 显示全部楼层
回复 20# lijingprince5


    就注意CPU不要过高,不然导致响应时间大是客户端导致的,所以并发量大就用多个执行器
    吞吐量注意不要大于网卡带宽
    TCP连接数,linux一般要注意
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2013-10-9 21:54:01 | 显示全部楼层
浏览器并发行为可以看该视频:
http://www.tudou.com/listplay/vrBLhG9WgpA/9KPuCs6X2cw.html

或者下载该视频:http://pan.baidu.com/s/1DsfAX
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2013-11-23 17:22:41 | 显示全部楼层
更好的性能测试,还需要了解很多与工具无关的知识,这样才能知道如何调试,测试出问题是什么原因

参照一哥们写的:http://www.51testing.com/html/95/302795-852001.html
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-5-6 07:20 , Processed in 0.068521 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表