《软件性能测试过程详解与案例剖析》读书笔记
1、软件测试基本概念
响应时间
定义:对请求作出响应所需要的时间。是用户视角的软件性能的主要体现,带有主观色彩,没有绝对的长短。 “web页面合理响应时间标准”:2/5/10秒,10秒为上限
上图将响应时间划分为“呈现时间”和“系统响应时间”。“呈现时间”取决于数据在客户端收到数据后呈现页面所消耗时间,一般性能测试中不关注“呈现时间”,因为其很大程度上取决于客户端表现。因此此处响应时间多为“系统响应时间”。
页面响应时间可被进一步分解为:“网络传输时间”、“数据库延迟时间”和“应用服务器延迟时间”
并发数
业务并发用户数定义:同一时间段内访问系统的用户数量(虽然在访问系统,但不一定对服务端产生压力,比如只是在浏览系统)
服务端承受的最大并发访问数定义:从服务端承受的压力出发,描述的是同时向客户端发出请求的客户,体现的是服务端承受的最大并发访问数,常结合并发测试,来发现系统中存在的并发引起的资源竞争等问题。
例:如果一个OA系统有2000名用户,最高峰时有500人在线,其中40%在看系统公告,20%在发呆,20%在进行页面跳转,20%在填写表单。则:系统用户数为2000,在线用户数为500,业务并发用户数为500,服务端承受并发数取决于业务并发用户数及用户业务场景。
上图用于估算业务并发用户数: 其中,公式1中C为平均并发用户数,n是login session的用户数,L是login session的平均长度,T是考察的时间段的长度,一般为8小时工作时间。公式2给出了并发用户数峰值计算方式,该公式由泊松分布估算得到。若知道平均每个用户发出的请求数u,可估算吞吐量为u*C。
可通过“日志分析”对应用服务器进行分析,从而了解并发数数据,推荐AWStats开源工具(http://awstats.sourceforge.net/)
吞吐量
-
定义:单位时间内系统处理的客户请求的数量,一般web系统用请求数/秒 或 页面数/秒来衡量。从业务角度,可用访问人数/天、业务数/小时衡量,或网络角度字节数/天
-
在没有遇到性能瓶颈时,吞吐量可计算为:F=(N*R)/T。其中N表示用户个数;R表示每个用户发出的请求数量,T表示性能测试所用的时间。
-
常用于分析分析吞吐量的图形是“吞吐量——VU数量(虚拟用户数)”的关联图。虽然吞吐量指标被看做系统承受压力的体现,但在不同并发用户数量的情况下,对一个系统施加相同的吞吐量压力,可能得到不同的测试效果。例如,对同一个系统,测试A采用100个VU,每个VU间隔1s发出一个请求;测试B采用1000个并发,每隔10秒发出一个请求;两者吞吐量均为100,但B会更容易出现性能瓶颈。 两个不同系统可能具有不同用户数和用户使用模式,但如果具有基本一致的吞吐量,则可以说他们具有基本相同的平均处理能力。
性能计数器:内存数、进程时间;资源利用率
思考时间(Think Time),或休眠时间
- 用户操作时每个请求间的间隔时间。自动化测试角度来说,必须在测试脚本中让各个操作之间等待一段时间。
RBI测试方法:Rapid Bottleneck Identify
性能下降曲线分析法:单用户区域;性能平坦区;压力区域;性能拐点
LoadRunner的性能测试过程
2、性能测试的应用领域
方法分类:
- 性能测试:模拟业务压力量和使用场景组合,验证系统是否具有所宣称的能力。
- 负载测试:通过在被测系统上不断增加压力,直到性能指标达到饱和状态,目的是找到系统的处理极限。通过“检测-加压-直到性能指标超过预期”的方法
- 压力测试:测试系统在一定饱和态下,例如CPU、内存等在饱和态下系统的会话能力,以及系统是否会出错。通过增加访问压力(如并发量),检测系统有无出错信息,以及系统响应时间,以及系统在一段时间内的稳定性。一般会以*“CPU使用率达75%以上,内存使用率达70%以上,系统错误率,响应时间”来作为描述。
- 配置测试:通过对系统软硬件调整,了解不同配置对系统性能影响程度,从而找到最优分配原则。一般用于性能调优和规划能力
- 并发测试:通过模拟用户并发访问,测试多用户并发访问一个应用时是否存在死锁或其他性能问题。主要关注内存泄露、线程锁、资源争用等。可针对系统或某种架构设计进行,可在开发各阶段使用。
- 可靠性测试:通过给系统加载一定的业务压力(如资源在70%~90%使用率),让应用持续运行一段时间,测试系统是否稳定。
- 失效恢复测试:针对有冗余备份和负载均衡的系统设计,可以用来检验如果系统局部发生故障,用户能否继续使用系统,以及用户将受多大程度的影响。
应用领域:
- 能力验证:对一个已部署系统的性能进行验证。如性能测试,可靠性测试,压力测试,失效恢复测试
- 规划能力:关心如何才能使系统具有我们要求的性能能力,如系统能否支持未来一段时间内的用户增长。 是一种探索性测试。如负载测试,配置测试和压力测试
- 性能调优:配置测试,负载测试,压力测试和失效恢复测试
- 发现缺陷:并发测试,压力测试,失效恢复测试
3、性能计数器及性能分析方法
操作系统级别、应用服务器级别和数据库级别上查看和记录分析
操作系统计数器:
- 内存分析(应用命令vmstat):
- 处理器分析(命令top):
- 查看System\%Total processor Time性能计数器计数值:体现服务器整体的处理器利用率(或平均利用率)。当持续超过90%,则面临瓶颈,需增加处理器
- 查看每个CPU的Processor\%Processor Time 和 Processor\%User Time(系统非核心操作消耗的CPU时间,当服务器是数据库服务器时,可能是数据库排序或函数操作消耗时间) 和 Processor\%Privileged Time
- 查看 System\Processor Queue Length,当其大于CPU数量总数+1时,说明出现处理器阻塞。当Processor\%Process Time较高时一般伴随阻塞,反之则不必然。
- 磁盘I/O分析方法:针对数据库服务器、或文件服务器、流媒体服务器; Disk/Transfer 介于15~30ms为良好,超过60ms则需考虑更换硬盘等
- 进程分析方法:查看进程的%Processor Time值,反应进程消耗的处理时间。查看页面失效。
- 网络分析
应用服务器计数器:IIS应用服务器,Tomcat
数据库计数器
4、性能测试工具原理
性能测试不等同于性能测试工具;性能测试脚本录制是指录制服务端和应用之间的通信数据,而非GUI操作,需先选择录制的协议
性能测试架构(以load runner为例)
- 虚拟用户脚本生成器
- 压力产生器:用于根据校本内容产生实际的负载。(一般一台具有512MB内存的PC机可顺利运行200个左右的VU)
- 用户代理:是运行在负载机上的进程(可被看作压力产生器的组成部分),一般以后台方式在负载机上运行
- 压力调度和监控系统
- 压力结果分析功能