一、压力测试的定义
软件压力测试也称为强度测试、负载测试。压力测试是模拟软件实际应用时的网络和软硬件环境及用户使用场景下系统负荷,通过长时间或超大负荷运行,来测试软件系统的性能效率、可靠性、稳定性等。
二、压力测试的目的
1.找到影响软件系统运行的瓶颈点、以便优化系统的运行性能
新系统上线前缺乏性能基线数据,此时压力测试一般没有明确的qps/rt等指标,而是要通过不断加压,不断逼近系统极限,从而暴露问题找到瓶颈。
2.建立性能基线
为了收集系统当前Zui大的性能指标,一般根据业务特点先确定对rt和错误率的容忍度,通过压力测试推算出能够支持的Zui大并发量等;结合性能指标和监控数据设立系统的报警项、限流阈值、弹性策略、量化系统能力等。
3.性能回归
对已上线运行性能需求明确的系统,根据实际运行情况确定系统需要支撑的qps/rt,在涉及性能影响前做回归校验,确保系统性能效率能满足设计指标或预期。
4.系统稳定性
侧重在一定压力情况下系统能长时间稳定持续提供SLA保障,一般会将压力设定到业务峰值的80%,并持续施压。
5 .网络/线路延迟稳定性等
某些软件对延迟容忍度极低,比如DNS解析、CDN服务、多人实时在线游戏、高频交易等,网络质量要求高,尤其是不同线路间的差异很大。
三、压力测试的流程
1.明确压力测试的需求、范围、场景
确定测试数据库、测试用例设计等,压力测试对于环境要求较高,基本软硬件、工具类以及测试环境搭建都要做好准备。
2.存量数据规模
准备出充足数据量对软件进行测试。
3.确定操作用户数量、时间要求等
通过工具模拟操作用户数量和用户在线数量等,以及不同用户值情况下系统的响应时间等。
4.记录测试发现的问题
及时记录测试过程中发现的问题,在出现bug时系统的反应时间以及自动解决的时间等,交软件开发人员进行修复和优化处理。
5.分析报告
做好测试对测试中发现的问题以及操作整理归档妥善保存,方便后期查阅参考。
四、压力测试的方法
1.手动测试
手动测试是测试人员手工完成的测试任务,适用于灵活、小规模的试验。
2.自动化压力测试工具
通过使用自动化测试工具模拟多用户操作,给系统不断增加负载来测试分析软件系统运行的各项指标,以了解软件系统的可靠性和瓶颈。
五、压力测试的工具
1.JMeter
ApacheJMeter是Apache开发的一种压力测试工具,Zui初用于Web应用测试,后扩展到可以支持各种不同的测试,可用于测试动态和静态资源,可在巨大负载下测试不同压力下系统的性能和强度。
2.LoadRunner
LoadRunner是一种自动负载测试工具,能够预测系统行为,通过模拟真实操作进行性能监测,以更好发现漏洞,更准优化性能,更快解决问题。
六、压力测试的指标
1.并发用户数:某个时刻在线的用户数
比如:当前用户有1000个,这个1000就是并发的用户数。
2.并发请求数/连接数:某个时间服务器接收的请求数、连接数
一个用户可能会产生多个会话,也即连接数。在HTTP/1.1下,IE7支持两个并发连接,IE8支持6个并发连接,FireFox3支持4个并发连接,相应的并发用户数就得除以这个基数
3.吞吐率:某个并发用户数下单位时间内服务器处理的请求个数。某个并发用户数下单位时间内能处理的Zui大请求数称之为Zui大吞吐率
吞吐率是基于并发用户数的:a、吞吐率和并发用户数相关;b、不同的并发用户数下,吞吐率一般是不同的,计算公式:吞吐率=并发请求数/总请求处理时长。比如:在并发用户数为1000时,一共有5000个请求,请求了5分钟,那么每秒钟,服务器可以处理多少个请求,这就是服务器的吞吐率5000/5*60 = 16个
4.用户平均等待时间:平均每个用户需要等待服务器处理请求完成的时间
用户平均等待时间=总请求处理时长/并发用户数。比如:当前用户有1000个,当服务器处理完成5000个请求花费了5分钟,那么平均每个用户等待的时间(每个用户平均发出去的5个请求的总等待时间)就是5*60s/1000= 0.3s,均摊到每个请求上继续0.3/5 = 0.06 即服务器平均等待时间。
5.服务器平均等待时间:单个请求服务器需要处理的时长,与吞吐率计算刚好是互为倒数的关系
服务器平均等待时间= 总请求时长/并发请求数,比如:处理5000个请求花了5分钟,那么每一个请求的处理时间是5*60/5000= 0.06s。