基于JMeter的Web性能测试研究

2021-08-28 02:08唐承玲李光平唐春蓬
电脑与电信 2021年6期
关键词:性能指标用户数使用率

唐承玲 王 虎 李光平 唐春蓬

(汽车噪声振动与安全技术国家重点实验室,重庆 401122)

1 引言

随着互联网的飞速发展、计算机的普及,Web 应用系统已渗透到人们的生活及工作中。随着网络的发展,用户对计算机、网络的依赖性越来越大,在使用Web应用强大、便捷的功能同时,用户也更加关注Web应用的良好性能。用户期望能获得更快、更高的服务品质。软件的性能测试已成为衡量软件质量的重要标准之一。

性能测试的价值就是保障系统的性能,提供良好的用户体验;尽可能地找出系统性能薄弱环节,帮助进行性能优化。

2 JMeter介绍

Apache JMeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试。它最初被设计用于Web应用测试,后来扩展到其他测试领域。它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java对象、数据库、FTP服务器等等[1]。

JMeter 的工作原理是通过线程组来驱动多个线程运行测试脚本对被测服务器发起负载,每一个负载机上都可以运行多个线程组[1]。

在Web性能测试中,JMeter软件被当作Web服务器与浏览器之间的一个代理网管,模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力,或者分析他们提供的服务在不同负载条件下的总性能情况。

使用JMeter 进行性能测试具有以下优势:开源免费,文件小安装方便,不受软件界面改动的影响,操作简单易上手,可进行功能定制或扩充,不需要关注对象是否被识别的问题,可以通过其自带的配置元件及其他元件的组合来处理复杂的业务逻辑,测试脚本维护方便[1]。

3 性能测试概述

3.1 性能测试的目的

Web性能测试是指在各种负载条件下,利用测试工具模拟运行被测系统,以此获得该系统的各种性能指标,并对所得结果加以分析的一种测试活动。性能测试的目的主要体现在以下5点[2]:

(1)验证系统是否达到用户预期的性能目标。

(2)寻找系统的最优配置,获取最小的系统成本。

(3)挖掘存在的性能缺陷和瓶颈,以此优化系统。

(4)验证系统是否具有稳定性、可靠性。

(5)预测未来性能。当用户数和业务量增加时能否及时应对?如何调整?是增加应用服务器,还是数据库服务器,还是要优化代码逻辑?

3.2 性能测试的分类

性能测试是在软件可靠性和正确性的基础上侧重效率方面的验证,是在功能测试的基础上测试软件在集成系统中的运行性能。Web性能测试一般包含以下6项[2]:

(1)负载测试:通过不断加压直到系统性能测试瓶颈或资源达到饱和。

(2)压力测试:系统在一定的负载下长时间运行的稳定性,关注大业务量下系统长时间运行时性能的变化,确定在什么负载条件下,系统性能处于失效状态。

(3)配置测试:通过对被测系统的软硬件环境的调整,找到系统各项资源的最优分配原则。

(4)并发测试:模拟多用户并发访问同一应用的测试,记录是否存在线程锁、资源争用、内存泄漏等问题。

(5)容量测试:运行一种或多种业务场景在一定虚拟用户数量的情况下,获取不同数量级别的性能指标,从而得到数据库能够处理的最大会话能力、最大容量等。

(6)可靠性测试:给系统加载一定的业务压力,让其持续运行一段时间,测试系统是否可以稳定运行。

3.3 性能测试的指标

软件的性能从不同角度来看会有不同的结果,以下从3个不同的角度来看待软件的性能[3]:

(1)用户角度:他们关心的是应用程序的单步响应时间,也就是数据流经过服务器/服务器集群经过网络传输后往返的时间总和。例如当用户点击“查询”按钮后多长时间能获得结果。

(2)软件开发者的角度:他们关注的是功能的代码实现,数据库的设计,框架设计是否合理,系统里内存的使用方法是否合理,线程使用方式是否合理,系统资源是否存在不合理竞争。

(3)运维人员的角度:他们关注的是系统所有服务器是否正常运行,数据库、中间件等服务器的硬件资源利用率情况,内存是否有可用空间,CPU 是否超过70%,网络是否顺畅,I/O是否存在瓶颈。

体现软件性能的数据我们称之为性能指标[4],常见的Web性能指标如下:

(1)响应时间:用户从客户端发出请求,并得到响应,以及展示出来的整个过程的时间。

(2)吞吐量:每秒钟系统能够处理的请求数/事务数。

(3)资源利用率:系统中不同资源的使用程度,如CPU、内存、磁盘、网络带宽等。

(4)并发用户数:系统能同时处理的请求数/事务数。

(5)错误率:一段时间内出错的请求在总请求数中的占比。

(6)平均传输带宽:计算服务端的数据传输量。

3.4 性能测试的流程

性能测试实施流程能够加强测试工作的控制,明确测试各阶段应完成的工作,主要流程如下:

(1)性能测试准备工作:组建团队,需求调研,选择工具。

(2)性能测试计划:分析测试背景、用户场景,确定性能指标,制定性能测试实施计划。

(3)性能测试设计:测试环境设计,测试场景设计,测试用例设计,编写或录制测试脚本。

(4)性能测试执行:部署测试环境,执行测试脚本,性能监控和记录。

(5)性能测试报告:根据执行结果,整理编写性能测试报告。

(6)性能测试总结:根据执行结果对比性能指标,分析并统计系统的性能瓶颈,给出系统调优建议。

4 JMeter性能测试实例

4.1 测试分析

文章以某个项目管理系统为例,该项目管理系统主要包括项目管理、协议管理、市场拓展、维修改造、接管项目五个模块。其中项目信息填报列表的查询是最为重要的,使用频率最高,因此以查询项目信息填报列表接口为例使用JMeter软件进行Web性能测试。系统页面如图1所示。

图1 项目管理系统

4.2 准备性能测试脚本及环境

(1)小组准备3个人参加,与项目经理、产品经理一起对需求进行调研。

(2)搭建测试环境,将此系统安装到与线上环境相似的测试环境服务器上。

(3)准备数据,新增10万条项目管理填报数据。

(4)根据接口文档详细信息,打开JMeter工具,将服务器地址、端口号、路径等参数填入HTTP请求中。

(5)添加监听器来记录测试结果,在线程组或HTTP请求下添加“察看结果树”“聚合报告”“响应时间图”“图形结果”“PerfMon Metrics Collector”。在“PerfMon Metrics Collector”界面上添加需要监控的服务器对应的CPU、Memory、Disks I/O。对脚本所做的设置如图2所示。

图2 脚本设置

4.3 制定测试系统性能指标

根据项目管理系统的需求,首先并发用户数从100开始,逐渐增加100,最大并发用户数为500,制定性能指标如表1所示。

表1 测试系统性能指标

4.4 制定性能测试计划

在脚本中线程组界面,对属性“线程数”“Ramp-Up Period(in seconds)”“循环次数”“调度器配置”设置不同的属性值,可实现系统在不同负载下的性能测试。结合本实例系统的性能指标,计划如表2所示。

表2 性能测试计划

4.5 分析性能测试执行结果

根据测试计划,运行脚本,可看到测试结果如表3所示。

表3 性能测试结果

测试执行时监控的资源利用率结果如图3-图7所示。

图3 测试计划1的资源利用率结果

图4 测试计划2的资源利用率结果

图5 测试计划3的资源利用率结果

图6 测试计划4的资源利用率结果

图7 测试计划5的资源利用率结果

对上述测试结果,分析如下:

(1)当并发用户数为100 时,平均响应时间是0.502 秒,CPU 使用率比较低,平均值在36%左右,内存使用率保持平稳,平均在43%左右,磁盘读写速度正常,系统各项结果数据都满足性能指标。

(2)当并发用户数为200 时,平均响应时间是0.692 秒,CPU 使用率最高是54%,平均值在30%左右,内存使用率保持平稳,平均在40%左右,磁盘读写速度正常,系统各项结果数据都满足性能指标。

(3)当并发用户数为300 时,平均响应时间是1.345 秒,CPU使用率有些波动,最高是69%,平均值在40%左右,内存使用率保持平稳,平均在40%左右,磁盘读写速度正常,系统各项结果数据都满足性能指标。

(4)当并发用户数为400时,平均响应时间是2.597满足指标,CPU 使用率有些波动,最高是91%,平均值在43%左右,内存使用率保持平稳,平均在35%左右,磁盘读写速度正常,最长响应时间、吞吐量、CPU使用率均未满足性能指标。

(5)当并发用户数为500时,平均响应时间是5.06,对服务器的CPU消耗比较大,小部分时间使用率达到了100%,部分时间磁盘读写速度比较快。系统各项结果数据都未满足性能指标。

对上述测试结果做出风险判断和建议如下:

风险一:在查询时,筛选条件同时具备了分区和索引性质,查询语句只走了分区,没有走索引。

建议:采用全局索引。

风险二:当并发用户数为500时,会大量报错,查看日志显示外部通信异常。

建议:建立管理线程池,支持大量并发,避免线程异常拒绝。

风险三:当并发用户数>=400时,对服务器的CPU消耗比较大,可能会造成服务器宕机。

建议:对线程队列做限制,不能无限制地消耗服务器资源。

5 结语

Web性能测试是系统开发的重要环节,它能保障系统性能,给用户提供良好体验。文章以某项目管理系统为例,给出了基于JMeter测试工具的性能测试方案,根据测试需求制定了性能指标,根据测试计划设置了不同场景下的性能测试,根据测试的执行结果,分析了该项目管理系统的性能瓶颈,给出了风险判断及优化策略。

猜你喜欢
性能指标用户数使用率
我国IPTV总用户数3.07亿户,同比增长6.7%
内蒙古自治区病床使用率预测及其影响因素分析
2018年中国网络直播用户规模为3.97亿
自动控制系统的优劣评价分析
基于Ganglia和Nagios的云计算平台智能监控系统
小学体育器材使用率不高的现象与分析
支付宝用户数达到两亿