一、为什么又再次写类似的文章?
在博客园和公号写文章,已经快两年了,所以自然在公号和博客园都能联系到我的。
也就是几天前,有个人加我微信,对于总有人加我好友,我已经觉得不奇怪了,为什么呢?
加我好友的一般为几类:
微商,你一看朋友圈,各种商品广告,哇,好头疼
“大佬,有学习视频资料吗?”,有,200,需要吗?
“进群”,我知道你谁呀,干啥的,上来就进群呀。
但这个同学,挺有意思的,是一个关注我公号很久的一个粉丝,总会看我的文章。和我说了下他的情况,也是个自学党,问我有老师讲jmeter课程吗?想系统学一下。
毕竟我不是搞培训,虽然工作多年,不敢称为人师,怕误人子弟呀,只能所作工作稍微久一些吧,作为一个自学党,我自知自学是个多么困难的事,所以想了想就写了这篇文章。
二、性能测试的分类
做性能测试,有些名词自然也是需要了解懂得的,后面如果我提到有些名词,不是很熟悉,请自行度娘,对于概念性的东西,我觉得百度说的比我好多了。
简单来说分为以下几类:
1、压力测试
目的:找出临界点。
2、负载测试
目的:找出能承受的最大负载量。
3、稳定性测试
目的:验证系统是否有内存泄露等问题。
4、容量测试
目的:找出数据库能够处理的最大会话能力、最大容量。
5、配置测试
目的:为系统调优提供参考
三、性能测试流程
在实施性能测试的过程中,整体工作流程是
分析性能测试需求
设计性能测试方案
开发性能测试脚本
搭建性能测试环境-
执行测试-
分析结果后多轮测试进行验证优化
编写性能测试报告
编写性能测试总结报告
1、性能需求分析
这里以我们常用的禅道中添加用例功能为例,进行分享。
调研期望指标(即性能需求)
场景名称 | 响应时间 | cpu使用率 | 内存使用率 | 磁盘使用率 | 事务成功率 |
登录禅道 | 小于5秒 | 小于85% | 小于90% | 小于90% | 100% |
添加用例 |
这只是流程中的第一步,如果这一步做好了 接下来的测试方案设计,脚本开发,测试执行,测试报告都会轻松很多; 如果想都不想,直接搞,后面做的一切都是白扯!
关于收据需求指标:
参考前辈的历史数据
参考同行竞品
友情提示:什么所谓的二八原则,没有数据支持依据一切都是屁话,完全没说服力。
2、性能测试方案设计
2.1、测试目的、目标与范围
目的:找出系统潜在的性能缺陷
目标:从安全,可靠,稳定的角度出发,找出性能缺陷,并且找出系统最佳承受并发用户数,以及并发用户数下长时间运行的负载情况,如要并发100用户,如何对系统进行调优
测试功能范围:本次测试计划主要收集分析禅道添加用例并发请求相关数据,做出分析和调优
2.2、测试指标范围
测试范围:禅道中添加用例并发时,服务器各项性能指标的性能测试
Jmeter指标:(由于Apache旗下性能测试工具Jmeter收集的性能指标偏少,下面的数据选取代表性指标)
1.Average/ms:服务器处理事物平均响应时间(表示客户端请求到服务器处理信息且反馈客户端的时间)
2.Throughput/s:服务器每秒处理请求数(表示服务器每秒处理客户端请求数(单位:个/秒))
3.KB/s:服务器每秒接受到的数据流量(表示服务器每秒接受到客户端请求的数据量KB表示)
硬件指标:
1.%Processor time : CUP使用率(平均低于75%,低于50%更佳)
2.System:Processor Queue Length :CUP队列中的线程数(每个处理器平均低于2)
3.Memory:Pages/sec :内存错误页数(平均低于20,低于15更佳)
4.Physical Disk-%Disk Time: 磁盘使用率(平均低于50%)
5.SQL Server:Buffer Manager-Buffer Cache Hit Ratio: (在缓冲区告诉缓存中找到而不需要从磁盘中读取的页的百分比,正常情况次比率超过90%,理想状态接近99%)
不需要关注的指标:
业务流程/路径覆盖率。
业务数据的完整、正确性。
其他诸如系统易用性、可管理性等属于专项测试的内容。
2.3、测试资源
条件有限,我就一个测试环境,虚拟机套出来的,所有服务都部署在一块了,正常是分开部署的。
2.4、测试准备
测试环境安装:我这里部署的是一个禅道系统,如何搭建百度之
2.5、测试工具和测试策略
测试工具:Apache-Jmeter2.3.2
测试策略:根据公司内部实际情况,以及业务分布设置数据库访问量即并发用户数
2.6、测试数据收集测试脚本、数据及其预验证
添加测试用例场景设计如下:
场景 | 添加测试用例 | ||||
目的 | 测试多人同时添加测试用例的性能情况 | ||||
虚拟用户和资源 | |||||
并发用户 | CPU使用率 | 内存使用率 | 硬盘使用率 |
网络使用 率 |
事务平均响应时间 |
5人 | |||||
10人 | |||||
20人 |
2.8、基准测试
目的:验证测试脚本,初步检查交易本身是否存在性能缺陷。
测试方法:
采用 5个用户负载执行,取交易的平均响应时间作为衡量指标,并计算吞吐量
2.9、负载测试
目的:获得交易本身的性能表现,诊断交易是否存在性能缺陷。
2.10、稳定性测试
压测系统 7x24 小时
2.11、测试输出成果物
- 《性能测试方案》
《性能测试记录及问题跟踪表》
《性能测试报告》
2.12、测试进度计划
是度量你性能测试期间,在每个时间点该完成的事。这里根据公司情况来吧,我不给出示例了。
2.13、实施风险及规避措施
是对影响项目测试的各种可能发生的风险进行估计,以及对风险的发生几率和严重程度进行估计,并按照估计结果对风险进行排序
3、脚本开发制作
脚本开发制作:请参考文章《JMeter压力测试实例操作》
4、服务器监控
服务器性能监控:请参考文章《性能测试篇 :Jmeter监控服务器性能》
5、测试报告编写
这里我只介绍可能会涉及的一些点、大家根据自己情况做增减,性能测试报告一般包含以下几项:
测试目标、参考文档、测试环境说明、硬件配置、软件配置、测试策略、人力资源、测试方案、测试场景、测试用例、测试结果及其分析、测试结论及建议等等。至于每项的详细内容,这里就逐项说明,请大家根据公司情况做设计编写。
四、关于性能测试的一些看法
想要把性能测试做好,需要做好多方面的知识储备,而且涉及到面非常广,需比如网络,OS,系统架构,业务逻辑,协议报文,脚本开发,服务和系统的监控等等更多方面的知识。
真正的性能测试做得好,还得是大公司(肯花钱投入到性能测试中),毕竟人家真的是数据量大呀,回忆一下双十一的淘宝和京东,才算的上真正意义的性能测试。
但这里不得不说一句,性能测试真的是水太深了,个中细节,相信做过性能测试的同学自有体味,哈哈哈!!!
本人能力有限,以上仅为自己实际工作中的一些经验,如有不足,还请留言补充,最后谢谢你的阅读!!