程序员在旅途

用这生命中的每一秒,给自己一个不后悔的未来!

0%

使用Apache JMeter™工具进行性能测试

一、性能测试的目标

  性能测试的目标是评估软件系统在各种负载和压力条件下的性能表现,包括响应时间、负载能力、稳定性和可靠性等。实施性能测试需要针对系统的性能指标,建立性能测试模型,制定性能测试方案,在既定的应用环境之下执行性能场景,分析判断性能瓶颈并调优,最终得出性能结果来评估系统的性能指标是否满足既定值。通过性能测试,可以发现并解决系统的性能瓶颈,优化系统设计和实现,提高系统的性能和可靠性,降低系统运行的硬件成本,确保系统能够在不同的负载条件下保持稳定和高效的运行。

二、性能测试的关注点 — 系统吞吐量

  吞吐量是衡量系统性能的一个重要指标,在计算机领域,一个系统的吞度量(承压能力)与CPU的运算能力、外部接口、IO、处理任务的程序质量等紧密关联。当一个计算机系统的CPU运算速度更强,外部接口性能更好,IO传输速度更快、程序算法的质量更高的时候,相应地,系统处理任务的的速度就会越快,吞吐量自然就会上去,这时候我们就会认为系统的性能是更好的。
  当我们想选择一些参数来评估一个系统的性能的时候,经常会见到 TPS和并发数这两个词,TPS指的是 每秒钟系统处理的事务 数量。并发数指的是 系统同时处理的request/事务数。那么这两个参数是如何衡量系统吞吐量的呢?这里需要清楚的是,QPS/并发数=响应时间,系统的响应时间越短,说明系统提供服务的能力越好。但是由于软硬件的限制,每套系统这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,因为系统会超负荷工作,调度程序会更频繁的进行任务上下文切换、内存等其它消耗会导致系统性能下降。

三、如何提高系统的性能? — 系统保持有一个合理的性能

  当我们部署一个Web系统程序的时候,这个系统的性能高低对用户而言直接的反馈就是响应时间,当响应时间越低,用户的使用体验越好。那我们该如何提高系统的性能呢? 作为网站的运维人员和程序开发人员,对系统的性能提升方式有什么不一样的关注点呢?
  3.1 运维人员的关注点
   ① 服务器、数据库、网络的资源如何配置才能最优
   ② 更换哪些硬件设备才可以提升性能,软硬件是否可以扩展
   ③ 系统的性能瓶颈在哪里,是哪方面因素导致的。
   ④ 系统能否保持7*24小时的业务访问,最多支持多少用户访问,系统最大的业务处理量是多少?
  3.2 开发人员的关注点
   ① 系统架构、数据库如何设计才能保持结构最优
   ② 代码如何编写才能最大化的提高效率。
  从上面不难看出,软硬件的协同优化才能给系统提供一个更好地性能。当然也并不是系统的资源配置的越高越好,我们也要根据业务量来合理的配置资源,以免造成不必要的浪费。

四、Apache JMeter™ 介绍

  JMeter 是Apache组织开源的一款使用Java语言编写的压力和负载测试工具。最初被设计用于Web应用测试但后来扩展到其他测试领域。主要用来测试部署在服务器端的应用程序的性能,还可以可以通过JDBC对数据进行测试、对FTP服务器进行测试等等。

五、JMeter的安装与配置

  由于JMeter是采用Java开发的,因此系统需要安装Java的JRE运行环境,如果需要开发JMeter的相关插件,需要安装JDK开发环境,需要注意的是要配置好相应的环境变量、版本的匹配问题。然后登陆JMeter官网,下载安装包进行安装即可。安装完成后,在bin目录下双击执行jmeter.bat,就可以使用这个程序进行测试了。
jmeter安装示意图

六、 JMeter使用实例

  6.1 流程综述
  首先需要在Test Plan 下添加 Threads(Users),这个组件是我们进行一次测试计划的基础,我们可以设置有多少线程参与了并发请求,多久这些线程可以全部启动完毕,然后还可以设置这些线程会持续请求多长时间,这有点模拟真实用户并发请求的意思。然后在这个基础上可以添加具体的请求,比如HTTP(s)请求啊,FTP请求啊等等,然后要对这些请求设置具体的参数,例如请求的URL、请求方式,请求参数等等。由于有时候打开一个页面可能会涉及较多的HTTP请求,为了完整的测试这个页面的打开性能,需要将这些请求包含在一个事务当中,这样这些请求就会被一同执行。 再有时候我们需要对某接口进行并发量测试,想让数个Thread同时请求一个接口,由于之前只是设置了Threads在多长时间内启动完毕,并不能满足要求,因此需要引入集合点这个组件,在某一个请求前设置集合点的意思是等待特定数量的线程启动完成,然后同时并发执行请求。我们设置了线程组,添加了请求,配置了事务和集合点等等这些东西,那接下来肯定想看看请求处理之后的结果啊,有没有请求成功啊,成功率是多少啊,请求执行了多久时间啊,这时候我们就要添加监听器组件,看看这些线程执行后的具体情况。有时候WEB页面的请求设置的很复杂,比如有些请求需要登陆才可以进行,那这时候我们就得要设置一些Cookie、Header管理器等等。我们还可以对请求携带的参数进行参数化管理,将相关的参数存放在某一文件中,然后从这个文件中读取参数。
  总之,我们要清楚一个事,JMeter的目的是通过线程组模拟多用户进行并发请求,从而来了解系统提供相关服务的能力大小,在不同的场景下用户进行请求的情况是千差万别的,我们要做的就是尽可能的模拟这些真实应用场景下的用户请求。
  6.2 测试示例
  测试百度搜索的接口,并对搜索参数进行参数化,设置集合点模拟5个用户并发请求,添加监听器查看请求结果。
  1)待测试的接口:https://www.baidu.com/s?ie=utf-8&wd=IT之旅CSDN
  2)测试过程解释
   ①添加线程组,并设置好线程组的基本参数。需要设置的有:线程组名称,线程数,线程启动时间,持续时间等等。
添加线程组_1
添加线程组_2
   ②添加HTTP请求,配置请求参数。服务器IP,路径,请求参数等。
添加http请求_1
添加http请求_2
   ③添加 监听器 -> 结果响应数,查看请求的执行情况。
添加监听器_1
添加监听器_2
  这时候,一个简单的HTTP请求就已经设置完成了,点击执行按钮可以看到请求已经成功执行了。 接下来可以更进一步的设置集合点等参数了。
   ④对请求参数进行参数化设置。添加 -> 配置元件 -> 用户自定义变量
参数化_1
参数化_2
参数化_3
   当然,也可以将请求的参数以scv格式的形式存放于文件中,
scv_1
scv_2
scv_3
   ⑤集合点设置,让特定数量的线程同时发起请求。如果线程组要测试很多请求,值得注意的是集合点设置的位置,一定要和需要进行并发测试的那个请求绑定在一起,不然是没有效果的。
集合点_1
集合点_2
   ⑥事务控制器的作用就是让线程连续执行多个请求,将这多个请求看成一个整体。我们只需要把多个请求一起放在事务控制器下面即可。
事务

七、 总结

  性能测试是通过某种特定的方式对被测试系统按照一定的测试策略进行施压,获取该系统的响应时间、运行效率、资源利用情况等各项性能指标,从而来评价系统是否满足用户性能需求的过程,它是我们项目上线之前必须要进行的一个测试步骤。
  Apache JMeter™是一款优秀的压力和负载测试工具,能很好地满足我们对性能测试工具的要求,因此,掌握好这个工具的使用对测试人员来说是必要的。