性能测试方案(完整流程)
一、测试背景
由于面向社会进行推广,看小说的人日益增加,网站具备一定的访问量。
需要进行性能测试来评估读书屋性能、分析性能变化趋势、分析系统瓶颈风险、帮助规划系统容量、为硬件采购提供建议。
二、名词术语规定
1、并发量
模拟业务操作对服务器造成压力的过程
比如模拟100个虚拟用户同时进行操作
2、负载测试(Loading Testing)
在一定团硬件环境下,通过不断加大负载(不同虚拟用户数)来确定在满足性能指标情况下能够承受的最大用户数。简单说,可以帮我们对系统进行定容定量,找出系统性能拐点,给予生产环境规划建议。这里的性能指标包括TPS(每秒事务数)、RT(事务平均响应时间).
负载测试:一辆车能载多少货,不断加大并发量
一辆车,载100kg(正常),200kg(正常),500kg(正常),800kg(正常),1000kg(开不动了,性能拐点);
尽可能让系统出现问题
3、压力测试/强度测试
通过高负载的手段来使服务器资源(强调服务器资源,硬件资源)处于极限状态,测试系统长时间在系统高压下,是否能够稳定运行。
通过负载测试得到的拐点之前最近的一个可以正常运行的极限值,即前面提到的800kg。
找到这个系统在长时间运行的情况下,能够达到什么负载
4、响应时间(Response Time)
性能测试中的响应时间(Response Time)是一个关键指标,用于衡量系统对用户请求做出响应所需的时间。具体来说,响应时间是指从用户发送请求开始,到系统返回响应并被用户接收到的整个过程所消耗的时间。这个时间包括了网络传输时间、服务器处理时间、数据库查询时间以及客户端的解析和渲染时间等。
假设有一个在线购物网站,用户在该网站上浏览商品并下单购买。在这个过程中,用户会进行多次请求,如点击商品详情、加入购物车、提交订单等。每个请求都会有一个对应的响应时间。
- 点击商品详情:用户点击商品详情页面时,系统会从数据库中查询该商品的信息,并将查询结果返回给客户端。这个过程的响应时间包括网络传输时间、服务器处理时间和数据库查询时间。如果响应时间很短(例如,小于1秒),用户会感觉页面加载迅速,体验良好。
- 加入购物车:用户将商品加入购物车时,系统会更新购物车数据并返回新的购物车页面。这个过程的响应时间同样包括网络传输时间、服务器处理时间和数据库更新时间。如果响应时间过长(例如,超过3秒),用户可能会感到不耐烦,甚至放弃购买。
- 提交订单:用户提交订单时,系统会进行一系列的操作,如验证用户信息、计算订单金额、生成订单号等,并最终返回订单提交成功的页面。这个过程的响应时间更长,因为它涉及更多的服务器处理和数据库操作。然而,即使如此,系统也应该尽量缩短响应时间,以提高用户满意度。
5、日均UV(unique visitor):每天的平均独立访客数
访客数就是指一天之内到底有多少不同的用户访问了你的网站。访客数要比IP数更能真实准确地反映用户数量。
6、日均PV(page view):每天的平均浏览量
用户访问网站时每打开一个页面,就记为1个PV。
三、测试范围
一般产品经理/架构师会直接给出测试范围,但当没有或不准确时也要有自己梳理的能力。
1、分析用户使用行为:
(1)打开首页->点击推荐的小说->看介绍
(2)阅读小说的章节->点击阅读
(3)登录>点击我的书架>点击阅读
(4)用户头像修改(上传图片)
2、寻找产品经理的帮助,确定用户行为
3、找架构师/技术负责人,提供数据支撑(数据埋点)
性能测试角度 -- 思想 测试左移
用户--产品--开发--测试--线上运维(测试左移 ,更早的关注测试)
4、抢资源占用行为(上传/下载)
四、性能需求分析
1、业务模型(预计 结合技术负责人所给信息)
(1)业务流程节点
(2)数据流程
涉及到数据库表(如修改用户信息的业务流程,会涉及数据库数据修改)
(3)业务量
首页
日均UV(用户访问)(独立访问 Unique Visitor)--5000
日均PV(页面浏览量)(浏览量 Page View)--100000
5000个人总共访问首页了十万次
其他页面...
(4)数据量
表A 134w --每天新增多少
表B 3000条 --每天新增多少条
2、性能目标
(1)业务指标来源
(1-1)响应时间-竞品/产品设计
(1-2)相对并发要求
生产环境的数据统计(比较准);
参考总访问PV,用户集中性(推理:2/8原则 20%的时间贡献了80%的访问量);
性能测试要针对后续会增长的目标量
技术负责人、项目经理共同审核
(1-3)可靠性/错误率 --99.95% /0.05%
0.05% 一万次操作中允许失败操作数5次
99.9999%基本是业内最高的可靠性。即10万次操作允许失败一次。
(2)资源占用指标
通常服务器的资源保持在85%左右是最好的,太低浪费资源,太高有崩溃风险。
五、性能测试用例
先做基准测试,再做负载测试,最后压力测试。
1、基准测试
基准测试能够提供性能指标衡量的一个参考数据
举例:并发为1,每秒吞吐量100/s,占用网络带宽1M
根据基准测试,生产环境服务器100M带宽,理论上吞吐量则为10000/s
测试用例:单用户访问首页性能基准测试
- 测试目标:评估单个用户在无负载情况下访问系统首页的响应时间、吞吐量及资源占用情况。
- 测试步骤:
- 确保系统处于空闲状态,没有其他并发用户。
- 使用性能测试工具(如Jmeter)配置一个用户线程,模拟该用户访问首页。
- 记录请求发送时间、响应接收时间及页面加载时间(即响应时间)。
- 观察并记录系统吞吐量(在此场景下,吞吐量可能接近或等于每秒请求数,因为只有一个用户)。
- 使用系统监控工具(如Top、Vmstat等)记录CPU使用率、内存占用率及网络带宽使用情况。
- 预期结果:响应时间应小于预设阈值(如2秒),吞吐量接近1请求/秒,系统资源占用率低且稳定。
2、负载测试
测试用例2:多用户并发访问首页负载测试
- 测试目标:评估系统在2000个并发用户同时访问首页时的性能表现。
- 测试步骤:
- 使用性能测试工具(如Jmeter)配置2000个用户线程。
- 设定逐步加压策略,如初始线程数100,每隔5分钟增加200个线程,直至达到2000线程。
- 在每个加压点记录系统的响应时间、吞吐量、失败率及资源占用情况。
- 持续测试一段时间(如10分钟),观察系统性能是否稳定。
- 逐步减少线程数,直至测试结束,观察系统恢复能力。
- 预期结果:在2000并发用户下,系统响应时间不超过3秒,吞吐量接近或达到预设目标(如1000请求/秒),失败率低于0.05%,系统资源占用率合理且未出现瓶颈。
3、压力测试
测试用例3:极限并发访问首页压力测试
- 测试目标:评估系统在极限并发条件下的性能表现和稳定性。
- 测试步骤:
- 基于负载测试的结果,确定系统的最大承受能力(假设为5000并发用户)。
- 使用性能测试工具配置5000个或更高数量的用户线程,模拟极限并发访问。
- 持续测试较长时间(如1小时),记录系统的响应时间、吞吐量、失败率及资源占用情况。
- 观察并记录系统是否出现性能瓶颈、资源耗尽或崩溃等异常情况。
- 在测试过程中逐步增加或减少并发用户数,观察系统对负载变化的响应能力。
- 预期结果:在极限并发条件下,系统可能无法保持最佳性能,但应能稳定运行,不出现崩溃或无法恢复的情况。响应时间和吞吐量可能有所下降,但应保持在可接受范围内。失败率应控制在较低水平,系统资源占用率应合理分布且未出现资源耗尽的情况。如果系统出现性能瓶颈或资源耗尽等问题,应记录并分析问题原因,为系统优化提供依据。
4、性能测试用例结构
(1)梳理流程节点-->访问的接口/资源
(2)结合测试需要,设定并发量,以及持续时间
(3)性能测试预期/判定标准
很多时候 性能测试有一个统一的判定标准
(4)疑惑:以接口作为单独的性能用例设计,还是以业务流程为用例设计标准?
在我们测试时,接口不是性能测试的标准,不可拆分的场景,多接口一起测试。
最终仍然会针对流程进行测试
六、测试策略
1、执行策略
基准测试开始时间-结束时间
负载测试开始时间-结束时间
压力测试开始时间-结束时间
2、指标监控策略
业务指标 -通过性能测试工具自带的统计器进行查看(Jmeter汇总报告,其他插件)
资源监控-(Linux命令、数据库系统数据、可视化集群监控...)
3、数据准备
如何生成数据?
要生成哪些数据
如何生成
七、完成标准
达到上面要求的性能目标
八、风险分析
本次测试由于没有采用和生产环境相同的配置,可能和实际运行中的性能有一定差距。
本次测试数据为人工生成,可能和实际的数据分布有一定的差异。