在数字化时代,软件系统的性能直接关系到用户体验和企业竞争力。性能测试作为确保软件质量的关键环节,其重要性不容忽视。本文将深入探讨性能测试的定义、目的、工具选择以及实施流程,帮助企业构建更高效、更可靠的系统。
1、性能测试的定义
性能测试是一种评估软件系统在特定条件下性能表现的系统化方法。它不仅关注系统在正常操作条件下的行为,还包括在极端或非典型条件下的表现。性能测试的目的是确保软件系统能够在预期的性能水平上运行,满足用户和业务的需求。
2、性能测试的必要性
在历史上,12306网站和淘宝双十一的崩溃事件,都凸显了性能问题对用户体验的致命影响。性能不佳不仅会导致用户流失,还可能损害企业的声誉和收入。因此,性能测试不仅关乎技术层面的优化,更是提升用户体验、保障业务连续性的重要环节。
3、性能测试的目的
1、性能基准设定: 通过性能测试,可以为系统设定一个性能基准,这有助于未来对系统性能进行比较和监控。
2、识别瓶颈: 性能测试能够揭示系统在处理请求时的瓶颈所在,如数据库响应时间、网络延迟或服务器处理能力。
3、性能调优: 一旦识别出性能瓶颈,性能测试提供了数据支持,帮助开发团队进行针对性的性能优化。
4、确保可靠性: 性能测试确保系统在预期负载下能够稳定运行,不会因为过载而崩溃。
5、用户体验保障: 性能测试通过模拟用户操作来评估系统响应时间,确保用户体验不会因为系统延迟而受损。
4、性能测试的工具
以下是几种常用工具的介绍:
1、Apache JMeter:开源Java应用,支持多种协议测试,包括Web、数据库等。功能丰富但学习曲线较陡。
2、LoadRunner:Micro Focus的商业工具,支持多种技术和协议,功能强大,能模拟大量并发用户,但价格较高。
3、Gatling:基于Scala的高并发性能测试工具,专注于Web和WebSocket应用,开源免费但学习成本较高。
4、NeoLoad:商业性能测试工具,功能全面,用户界面友好,支持多种协议和平台,价格较高。
5、Apifox:集API文档、调试、Mock、自动化及性能测试于一体的协作工具,易于使用,支持跨平台,兼具免费和商业功能。
6、Apache Benchmark (ab):轻量级命令行工具,快速测试Web服务器性能,简单易用但功能基础。
5、性能测试的基本流程
1、分析性能需求: 明确测试目标和性能指标,如事务通过率、响应时间、并发用户数等。
2、制定测试计划: 确定测试时间、环境、工具和资源。
3、编写测试用例: 根据性能需求编写详细的测试用例。
4、搭建测试环境: 准备测试数据和环境,确保测试的准确性。
5、设计测试脚本: 编写性能测试脚本,模拟用户操作和数据流量
6、执行测试: 运行测试脚本,监控系统性能和资源使用情况。
7、分析测试结果: 收集和分析测试数据,识别性能瓶颈和问题。
8、性能调优: 根据测试结果进行性能优化。
9、回归测试: 在优化后进行回归测试,确保优化效果。
10、编写测试报告: 总结测试过程和结果,提供改进建议。
6、Jmeter的实践应用
作为性能测试工具的佼佼者,Apache JMeter因其开源、免费、功能强大而广受欢迎。在实施性能测试时,JMeter可以有效地帮助我们模拟多用户并发访问,评估系统在不同负载下的性能表现。
1、下载与安装
访问JMeter官网:jmeter.apache.org/download_jm…
点击下载windows版本apache-jmeter-5.1.1.zip
解压到D盘即可使用,目录结构:
bin目录:启动命令
jmeter.bat 在Windows可启动的批处理文件
jmeter.sh 在Linux可执行的shell脚本
jmeter.properties: 核心配置文件(配置中文编码)
lib目录:存放Jmeter依赖的jar包,同时安装插件放于lib中的ext目录中
2、启动
1、进入bin目录,双击jmeter.bat文件即可启动jmeter
(如果打不开,则说明其工作环境JDK没搭建好,原因:JMeter需要基于Java环境)
2、在dos中进入到apache-jmeter的bin目录中,然后执行命令:jmeter也可以启动
3、配置jmeter工作环境
方式:安装jdk并配置环境变量
1)安装jdk,要求是1.8级以上版本
在安装jdk的过程中,记得把路径复制一份,方便后面使用。
2)配置jdk的系统环境变量:
a》java_home:jdk的安装路径,(需要新建)
b》path:增加jdk的工作目录bin ( %java_home%\bin; ) (只需编辑,往里添加工作路径)
3)验证:
A、在dos中输入命令:javac,显示javac命令的格式及选项
B、启动bin目录中jmeter.bat能正常打开。
3、测试脚本编写
测试计划
Jmeter测试计划其实就是一个测试用例,测试用例中包含了操作步骤,比如先登录,才能查看个人信息
线程组
线程组:简单来说就是一个线程集合,线程组的出现是为了更方便地管理线程。
setUp线程组:最优先执行的线程组(相较于普通线程组而言)
tearDown线程组:最后执行的线程组(相较于普通线程组而言)
取样器
定义: 用于发送请求
HTTP请求
测试计划—线程组----HTTP请求!!注意是在组程中添加HTTP请求!!
必备填写信息如下图所示,根据实际需求进行填写
结果树
会将请求结果以树的形式展示出来
线程—>监听器—>查看结果树
返回的是token信息与接口需求文档要求符合
查看请求结果
4、执行与监控
对于jmeter脚本的运行,你可以设置所有线程组一起运行,也可以启用具体的线程组进行运行。
发压的线程数取决于全局变量设置的线程数,也可以单独给具体线程设置具体线程数。
1、点击测试计划的名字进入对应的测试计划设置页面,设置想要的线程数和发压时间
2、点击jmeter中的运行图标:
然后等待运行时间结束
5、结果分析
想要查看jmeter脚本的运行结果,主要依赖这两个监听器,添加方法是选中测试计划,然后右击点击添加--->选择监听器--->点击【查看结果树】和【聚合报告】就可以看到对应的元件已经生成
1、查看结果树:结果树中有每个请求的结果,默认是Text,可以看到通过断言的请求是绿色✔状态的,未通过断言的请求是红色❌状态的,点击具体的请求,可以看到取样器结果,请求,和响应数据,点击响应数据即可看到接口返回的响应的具体信息;
若为错误请求,我们也可以通过返回的响应数据,通过复制返回的一些报错信息,排查是请求入参的问题还是接口本身的问题
2、聚合报告:运行结束后会生成聚合报告
聚合报告详细展示了每个线程组请求的样本数,平均值,99线,95线,异常率等信息,一般重点关注99线,95线,tps,qps,异常率。
生成的聚合报告,只有在异常率为0或者极小异常率可忽略情况下才有参考意义,聚合报告中的样本数即脚本运行时间内请求的总数,平均值是每次请求响应的平均时间,99%百分位即99线,即99%的请求响应的时间为这个,95%百分位即95线,即95%的请求响应的时间为这个,吞吐量即为单位时间内服务器能够处理的请求数量,计算qps的方法为总请求数/运行时间,或者线程数/平均响应时间。
7、总结
通过JMeter的实践应用,可以更加深入地理解系统的性能表现,并采取相应的优化措施。性能测试不仅是一个技术活动,它是一个涉及多个利益相关者的全面过程,包括开发人员、测试工程师、业务分析师和管理层。通过明确定义性能测试的目标,组织可以确保其软件产品不仅在技术上出色,而且在用户体验和业务价值上也能满足预期。
关于蒙帕
上海蒙帕智能科技股份有限公司聚焦IT运维领域20余年,服务客户超过400多家。
2015年组建研发团队,专注于“智能巡检机器人” 及“智能运维综合管控平台” 的研发,目前已获得“智能运维类”软件著作权40余项,产品发明专利30余项。
在北京、西安、重庆、深圳、广州、沈阳、大连、郑州、武汉、成都、无锡等地均设有分公司及办事处。