服务性能测试---JMeter使用教程

一 前言

JMeter工具的官方下载地址是:https://jmeter.apache.org/download_jmeter.cgi

JMeter是一款纯java开发的(支持跨平台)压测工具。使用JMeter工具进行压力测试之前,需要预先配置好JDK环境。最新版本JMeter-5.2.1要求JDK版本在1.8以上。

下载并解压压缩包apache-jmeter-5.2.1.zip后,既可以直接在Windows上面运行,也可以在Linux上面运行。

ps: 由于上传到博客的图片清晰度不够,看到的效果不太好。 我把博客中需要用到的所有文件都加以分享,分享链接: JMeter-5.2.1并发测试,提取码是:cw4y

解压压缩包并在本地启动JMeter客户端后,将文件【1主3从集群并发测试计划.jmx】导入客户端中。按博客描述步骤操作,能自行在本地看到类似的测试效果图,这样学习效果更佳。

二 JMeter-GUI使用说明

2.1 JMeter-GUI主页

点击./bin/jmeter.bat,会进入JMeter-GUI工具的首页如下:

注:JMeter支持切换语言。如果对英文不是特殊熟悉的,我们可以在【Options > Choose Language > Chinese(Simplified)】,选择当前工具使用的语言为简体中文。

2.2 JMeter-GUI入门教程

下面会介绍一个简单的入门教程。

2.2.1 JMeter-GUI 测试接口说明

要测试的接口---在知乎搜索与jmeter相关的内容,其实际展示的效果图如下:

2.2.2 JMeter-GUI 配置测试计划

我们可以自定义【测试计划】的名称为“第一次使用JMeter的测试计划”,并添加一个【线程组】如下(参数为默认值即可):

在JMeter的视角,一个线程就是一个用户。要测试并发能力,可以修改线程数的值并查看其表现即可。

下面需要为【线程组】添加3个最基本的子组件

-1. 为【线程组】添加子组件---取样器下的【HTTP请求】,并设置内容如下:

这里主要是设置HTTP请求的资源路径和参数,如:我们要请求的URL( https://www.zhihu.com/search?type=content&q=jmeter )。实际组装该HTTP请求对应的资源路径和参数效果图就会上图所示(基本与postman一致)。

-2. 为【线程组】添加子组件---监听器下的【察看结果树

在【察看结果树】中,可以查看每次发起HTTP请求的请求和响应信息

-3. 为【线程组】添加子组件---监听器下的【汇总报告

在【汇总报告】,我们能看到最终的统计信息(发起的所有HTTP请求的相关信息汇总)。

点击绿色的启动按钮,JMeter会推荐我们持久化配置信息(将配置信息以XML的格式保存到一个jmx格式的文件中)。保存成功后,JMeter即会按配置信息,执行【测试计划】。

2.2.3 JMeter-GUI 测试计划结果解析

基于上面的配置信息,JMeter帮我们生成的配置文件(第一次使用JMeter的测试计划.jmx)的内容如下:

见文知义,我们可以直接修改该配置文件的内容,来修改【测试计划】的配置项。

在组件【察看结果树】中,查看该测试计划发起的HTTP请求的请求与响应信息如下:

在组件【汇总报告】中,查看该测试计划发起的所有HTTP请求的汇总信息如下:

测试结果简单解释说明:

  1. 在【察看结果树】中,能看到该接口已经调通。相关的请求参数和响应信息与设置项也基本一致。
  2. 在【汇总报告】中,能看到【样本---http请求测试】为1,【最小值和最大值---响应等待时间,单位是毫秒】为417ms,【异常%---失败请求次数占比】为0%,【吞吐量---单位时间处理请求数】为2.4/sec三 JMeter插件相关说明

三 JMeter插件相关说明

3.1 JMeter插件安装步骤说明

  1. 首先,需要下载JMeter插件管理工具包( https://jmeter-plugins.org/install/Install/jmeter-plugins-manager.jar。然后将该jar包放在目录./lib/ext/下,重启JMeter即可在GUI界面栏中使用JMeter插件管理工具。
  2. 点击【选项 > Plugins Manager】打开插件管理界面如下:

Installed Plugins】展示的是已经安装过的插件列表;

Available Plugins】展示的是可用的插件列表;

Upgrades】展示的是可更新的插件列表。

勾选待安装或待更新的插件,点击【Apply Changes and Restart JMeter】即可安装或更新相关插件。

这里有两点要额外注意!!!

  • JMeter和其插件的版本兼容没有想象中那么完美。如非必要,不要手动去更新插件版本。
  • JMeterPlugin-Manager帮我们管理插件并没有那么神秘。其实只是将相关插件对应的jar包从官网下载并放到目录 ./lib/ext/ 下。因此在CLI模式(非图形化界面模式)下要使用这些插件,只需要自行下载这些插件对应的jar包放到该目录下即可。

ps: 所有插件都可以从JMeter官网( https://jmeter-plugins.org )下载,只是下载速度实在不敢恭维。

3.2 JMeter常用插件介绍

3.2.1 插件【3 Basic Graphs】

插件【3 Basic Graphs】中,监测并实时展示并发性能中最基本的3个指标:当前存活线程数(Active Threads Over Time),平均响应时间(Response Times Over Time),TPS每秒处理事务数(Transactions per Second)。

安装插件【3 Basic Graphs】的过程如下图,其他插件的安装不再赘述。

从安装界面很容易可以看到【3 Basic Graphs】对应的插件是【jppc-graphs-basic 2.0】,其对应的插件源码文件jmeter-plugins-graphs-basic-2.0.jar 还是会放在目录 ./lib/ext/ 下。因此,如果需要在CLI模式(大部分的Linux环境)下测试,只需要将该文件(必须先把之前的插件管理 jmeter-plugins-manager-1.3.jar)放到目录 ./lib/ext/ 下即可。

3.2.2 插件【Custom Thread Groups】

插件【Custom Thread Groups】,这个插件可以自定义线程组。以图片的形式,更加形象直观地展示线程组的工作进度。

设置线程组的工作进度有多种方式,这里更推荐使用【Ultimate Thread Group】方式,操作示意图如下:

线程组的默认值及其效果图如下:

从图片中可以很直观地看到:JMeter在30秒内逐步启动100个线程,稳定运行60秒后,在10秒内逐步释放这100个线程。

因此,我们关注测试开始的30~90秒内某个接口的并发能力表现即可。在这60s内,会同时有100个用户在访问该接口(JMeter默认是1s调用一次HTTP请求)时。这段时间该接口的并发表现能力,就基本等同于其实际承载100并发量的性能表现状况。

3.2.3 插件【KPI vs KPI Graphs】

插件【KPI vs KPI Graphs】,平均响应时间或吞吐量随当前存活线程数(用户个数)变化的趋势图。

添加平均响应时间或吞吐量趋势图的操作示意图如下:

这里就先不展示最终测试效果,只提供添加示意图的操作路径(后文会有展示效果图)。

3.2.4 插件【PerfMon(Servers Performance Monitoring)】

插件【PerfMon(Servers Performance Monitoring)】,展示的是服务器实时性能表现图。

首先,需要下载解压安装包ServerAgent-2.2.3.zip并启动【ServerAgent】服务。

以命令(startAgent.sh(Linux))或(startAgent.bat(Windows))方式启动该服务后,该服务会实时地获取服务器性能,并以TCP协议的方式在端口4444暴露服务。(配置启动服务后,JMeter可以自动从该端口获取对应服务器的性能信息)。

添加本地测试实时当前服务器性能表现的效果图如下:

四 完整压力测试

4.1 场景模拟说明

待测试接口---在知乎搜索与jmeter相关的内容。该接口请求知乎资源的URL路径如下:https://www.zhihu.com/search?type=content&q=jmeter

该接口最终的效果图,已在上文展示过,这里就不再重复添加。

本次预备测试并发量为每秒300时,该接口最终的性能表现。

具体配置是:1主client + 3 从server。

主client对应的是部署在Windows系统的JMeter-GUI图形化工具。它不会发送任何请求,但它是作为一个主调度机,能自定义去命令从执行机发送请求,并将最终的性能测试结果报告,统一交由主调度机来进行汇总。

从server对应的是部署在Linux系统的jmeter-server服务。它会基于主调度机发送的命令及测试计划,去执行HTTP请求操作。每个从server需要达到每秒100的并发量,整个压测计划就是100 * 3 = 每秒300并发量。

由于JMeter会有版本不兼容的问题,后续操作的前提是:使用统一版本的环境、JMeter及其插件、ServerAgent等。

JDK版本为 1.8 (Windows和Linux都是1.8,只是使用的安装包不同)

JMeter版本为 5.2.1

ServerAgent 版本为 2.2.3

4.2 Windows---主client配置

4.2.1 修改配置文件 jmeter.properties

修改Windows系统中主client的配置文件 ./bin/jmeter.properties 的两个参数:

# 添加远端的从server--- JMeter服务器地址,用英文逗号分隔

remote_hosts=192.168.139.149,192.168.139.150,192.168.139.151

# 取消调用远端接口的SSL认证,不设置会报异常FileNotFoundException: rmi_keystore.jks

server.rmi.ssl.disable=true

4.2.2 测试计划新建说明

新建测试计划如下:

测试计划详细说明如下:

-【1-client + 3-server集群并发测试计划】:这是一个对测试计划的重命名操作。

- 【自定义线程组---3*100并发】:添加路径是【线程(用户) > jp@gc - Ultimate Thread Group】下添加自定义线程组,并进行了重命名操作。

- 【HTTP请求】:添加路径是【取样器 > HTTP请求】,封装信息并组装HTTP请求。

- 【服务器实时性能采集】:添加路径是【监听器 > jp@gc - PerfMon Metrics Collector】,并进行了重命名操作。

- 【实时用户数】:添加路径是【监听器 > jp@gc - Active Threads Over Time】,并进行了重命名操作。

- 【实时每秒事务数】:添加路径是【监听器 > jp@gc - Transactions per Second】,并进行了重命名操作。

- 【实时平均响应时间】:添加路径是【监听器 > jp@gc - Response Times Over Time】,并进行了重命名操作。

- 【察看结果树】:添加路径是【监听器 >察看结果树】。

- 【平均响应时间/用户数的趋势图】:添加路径是【监听器 > jp@gc - Response Times vs Threads】,并进行了重命名操作。

- 【吞吐量/用户数的趋势图】:添加路径是【监听器 > jp@gc - Transaction Throughput vs Threads】,并进行了重命名操作。

- 【聚合报告】:添加路径是【监听器 > 聚合报告】。

也可以将文件【1主3从集群并发测试计划.jmx】直接导入JMeter-GUI工具(部分配置可能需要修改),安装上述【测试计划】的组件配置。

4.3 Linux---从server配置

每一个Linux虚拟机上,都需要进行如下配置。

4.3.1 配置JMeter环境变量

解压JMeter安装包后,将其加入环境变量,具体执行如下命令:

# 以vim文本编辑器,打开环境变量对应的配置文件

vim /etc/profile

# 追加JMETER_HOME的地址---这个该文件夹的实际存放位置为准

export JMETER_HOME=/home/jmeter/apache-jmeter-5.2.1

# 即时启用配置---不执行该命令,就只有在关机重启后才会生效。

source /etc/profile

4.3.2 修改配置文件 jmeter.properties

修改Linux系统及从server的配置文件 ./bin/jmeter.properties 的参数:

# 取消调用远端接口的SSL认证,不设置会报异常FileNotFoundException: rmi_keystore.jks

server.rmi.ssl.disable=true

4.3.3 启动暴露服务器性能服务ServerAgent

解压暴露服务器性能服务的压缩包,并启动该服务的详细命令如下:

# 解压压缩包

cd /home/jmeter/ServerAgent-2.2.3

unzip ServerAgent-2.2.3.zip

# 启动暴露服务器性能服务ServerAgent,相关服务器性能数据会暴露在4444端口

cd ServerAgent-2.2.3

nohup ./startAgent.sh &

4.3.4 启动从节点jmeter-server

执行如下命令即可

# 为当前用户root添加可执行权限

chmod -R 755 /home/jmeter/ 

# 启动jmeter-server服务,等待主client发送执行测试计划命令,hostname为本机ip地址

cd /home/jmeter/apache-jmeter-5.2.1/bin

./jmeter-server -Djava.rmi.server.hostname=192.168.139.149

4.4 启动集群压测及查看并发表现

4.4.1 启动所有server

如果配置无误,选中【远程启动】,可以查看所有待启动server对应的ip地址。可以单独启动,也可以一键启动远程所有server。由于我们这里需要测试3*100并发量,所以直接选择点击按钮【远程启动所有】即可。

4.4.2 线程组(用户群)执行计划

如下图所示,每个server都是在10秒之内启动100个线程,持续30秒后,再在10秒之内释放这100个线程。也就是说,在这中间的30秒,并发量就是3 * 100 即300的并发量。

4.4.3 HTTP请求解析效果图

将接口 https://www.zhihu.com/search?type=content&q=jmeter 进行解析,并做如下图所示的封装(实际使用时,基本与postman用户一致)。

只要关注的一点是:JMeter不会去解析HTML页面(不会执行页面的JavaScript代码)。部分测试能够看到页面所有的信息,但官方文档明确说明,解析页面不计入并发统计时间。

4.4.4 服务器实时性能图

如下图所示,我们可以实时查看每个服务器的CPU,Memory,Swap,Disks I/O, Disks I/O,NetWork I/O,TCP,JMX,EXEC,TAIl等信息。需要这些额外信息,添加该主机IP的4444端口的该字段即可。

4.4.5 实时用户数

如下图所示,我们可以查看随测试计划的推移,每秒对应的实时用户数。

4.4.6 实时每秒事务数

如下图所示,我们可以查看随测试计划的推移,每秒处理的事务数。

4.4.7 实时平均响应时间

如下图所示,我们可以查看随测试计划的推移,每秒对应的平均响应时间。

4.4.8 察看结果树

如下图所示,我们可以查看每一个HTTP请求中的请求和响应的详细信息。

4.4.9 平均响应时间/用户数的趋势图

如下图所示,我们可以查看随用户数的改变,系统处理该用户数同时发起的HTTP请求时,该接口显示的平均响应时间。

4.4.10 吞吐量/用户数的趋势图

如下图所示,我们可以查看随用户数的改变,系统处理该用户数同时发起的HTTP请求时,该接口显示的吞吐量。

4.4.11 聚合报告

如下图所示,我们可以查看最终的汇总聚合报告。

  • Samples】样本,表示的是总共发起的请求数。
  • Average】平均值,表示的是最终的平均响应时间,单位是毫秒。
  • Min】最小值,表示的是耗时最短的响应时间,单位是毫秒。
  • Max】最大值,表示的是耗时最长的响应时间,单位是毫秒。
  • Error%】错误率,表示的是处理请求的出错率百分比。
  • Throughput】吞吐量,表示的是平均每秒处理请求数。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值