大部分公司在最初试的阶段只会关心项目的基本功能,能用就可以。但是随着项目的成熟,用户量逐步的增大,线上经常就会出现一些系统崩溃,用户反映系统太慢等性能问题的爆发。所以,性能测试的需求就逐步变得迫切了。所以,基本上90%的公司,都会只重视功能测试同时,也把项目的性能测试列为重点关注对象,这就导致测试市场上【性能测试工程师】的岗位需求越来越多了。
什么是性能测试
要做性能测试,我们需要先弄清楚什么是性能测试,以及性能测试和通常的功能测试有什么差异?
首先,众所周知,功能测试是模拟一个人使用某个系统的某个功能,测试使用后的实际结果与预期结果是否一致;
性能测试与之最大的差别就就是,模拟N多个人同时使用某个功能,观察以下数据指标:
-
多久时间能收到结果,也就是我们常说的性能指标,RT【响应时间】
-
多少人能正常收到结果,也就是性能测试指标 最大并发用户数。
-
服务器在多人同时使用时资源消耗多少
所以,在执行和关注结果层面,性能和功能测试都有本质上的区别。
企业性能测试流程
在公司做性能测试流程跟功能测试流程也有一定差异,如下图所示:
第一步:性能测试准备
1.1 测试指定标准
功能迭代完成了,预发布完成后,功能稳定了,这是性能的准入原则;
而且是否有必要做性能测试需要进行评估。比如有些伪需求,简单的逻辑不会影响性能,不需要做性能测试;非核心模块做性能测试,投入产出比也比较低,也没有必要做。
1.2 性能需求分析、量化性能指标
产品的功能点很多。做哪些功能的性能测试?边界、范围要明确。讨论到底具体做哪些功能。
出性能报告的时候,性能标准是什么也要先明确,如果没有给出特殊指标值,就以行业标准来定。
-
行业内标准:【ART<1.5s,ERR<0.1%,服务器资源利用率<80%】
第二步:性能测试环境搭建
明确了需求后,开始搭建独立性能测试环境,性能测试环境要求:
-
独立网络(有线、局域网)
-
独立服务器 (硬件配置要与生成一致、服务部署架构要与生成一致,集群大小,可以缩减
并且要同步搭建性能测试结果监控平台:比如 prometheus,grafana,influxdb ,现在市面上很多监控都是基于prometheus+grafana的二次开发页面展示不一样的。为了方便直接对测试结果进行监控分析,我们可以提前搭建好这些监控平台。
第三步:性能测试脚本开发和执行:脚本制作,调试和验证脚本
性能测试脚本开发和执行需要借助工具来实现,性能测试工具目前市场主流的有:
-
Jmeter 开源免费,学习资料比较多,java开发,跨平台【win mac Linux都可以用】,推荐优先使用。
-
Loadrunner,需要收费,市场份额相对较少;C语言开发,破解版本<11版本,12版本免费只能使用50用户数,更新很慢。破解版使用有风险。
-
locust 需要代码基础,用的也比较少;公司自研使用。Python语言自行开发。
我们以最主流的Jmeter工具给大家讲解性能场景设计与执行,常见的测试模型有:
1)基于并发数模型:线程数梯度增加,压出系统能承受的最大并发用户是
2)基于TPS压测模型:目标一般是为了压出系统最大的TPS,所以会采取平缓增加TPS的模式。
这里的RPS可以等同于TPS,以下图就是5分钟内TPS从1-20,下个5分钟20-50,下个5分钟50-100,最后加到300后,持续600s,如此设计平缓递增。
第五步:性能测试结果分析和调优
性能测试最重要的部分其实就是结果分析和调优。在性能测试过程中对各种数据进行监控与收集,包括被测项目的监控(服务 + 服务器),硬件资源监控+项目服务监控等。通过对测试结果与监控数据综合分析,进行问题定位、分析、调优。
问题分析和调优的基本步骤主要可以按照如下顺序进行:
1、由外及内: 检查RT>检查tps>检查负载机资源情况>检查服务器资源情况>检查 中间件、数据库配置>中间件、数据库耗时分析
2、由表及里:自身问题>服务器硬件瓶颈 > 网络瓶颈 > 服务器os瓶颈> 应用瓶颈
-
自身问题:优先找自己的问题,因为可能脚本,客户端端口不够、网络不好等问题。
-
服务器硬件瓶颈:CPU 内存 磁盘等
-
服务器os瓶颈:参数配置、数据库、web服务器
-
应用瓶颈:sql语句、数据库设计、业务逻辑、算法
调优后再验证测试,检查问题是否已经解决。
性能测试通过标准& 验收标准:
第六步:性能问题跟踪与报告
当以上的步骤都做完后,就可以开始整理编写性能测试报告。
性能测试报告要素:
1、背景 :为什么要做压测的目的。
2、压测容:方案里有体现,范围和场景和环境 脚本 架构图等。
3、压测结果(截图):指标项的记录,TPS,资源使用情况等,截图附上作为证 据,也更加直观和后续对比分析。
4、问题和调优:通过什么现象发现是个问题,然后调优的方法;包括已解决,待解 决的问题;如果没有办法避免,写到结论里。
5、压测结论&建议 :简洁明了,接口的最大并发用户数 响应时间 资源利用率等作 为一个图标展示,明确的结论:是否达标。
然后进行性能测试问题跟踪
记录需要跟踪的性能问题:问题可能不是一时半会能修复的,也需要问题跟踪。
性能测试的意义和价值
性能测试对于项目和企业有这重要的意义和价值。我们可以从以下场景来阐述:
1、如果公司需要升级硬件或者服务,我们需要对其进行性能测试,对比升级前后是否有性能提升或者降低;如果硬件升级后,没有提升,就不用升级硬件了;
-
这就可以大大的减少硬件上投入,为公司缩减没有必要的成本。
2、根据性能测试的数据,预估生产环境,方便配备硬件配置、服务的数量。
-
性能测试的环境 一般期望硬件配置与生产环境保持一致,但是数量不要求相等。
-
这样评估可以更加合理的安排生产环境的设备配置。
3、日常工作的性能测试,及早的发现一些性能隐患。比如挑选一些性价比最高的模块来做性能测试,可以高效帮助公司避免一些用户流失和经济损失。以下是常见的需要做性能测试领域:
-
核心的功能
-
用户使用量做多的
-
赚钱的模块
-
有活动的,突发的并发用户,指导突发流量承载方案的指定。
4、及时发现和避免用户越权事故。
功能测试中多次点击会出现重复数据,在性能测试里就是多个用户并发的时候发现重复数据,数据互串,很有效的发现用户越权的安全问题。
总结
综上所述,性能测试对于企业来说必不可少且意义重大。然后现在人才市场上真正掌握性能测试人却少之又少,很多企业都无法真正找到全面的性能测试人才,所以这块也是一个技能缺口,目前在做测试岗位的同学们,可以往性能测试方向发展和提升,从而确保自己的测试地位。
感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取