本文档旨在教会你安装jmeter并使用jmeter对你的服务的http接口进行压测,获取相关压测数据
windows安装jmeter
安装jdk
如果你的电脑本来就装了java那你可以跳过这一步
我们先下载jdk安装包,这里推荐java8版本
java官方jdk下载地址
下这个【版本号有区别没关系,反正就是第一个表格里面的windows版本
下下来以后双击安装,我是建议直接下一步下一步安装到默认位置就好,反正也不大。
现在的java安装包似乎会帮我们写环境变量,所以安装好以后,反正我是没有改环境变量的。
安装jmeter
先下载
jmeter官方下载地址
下这个
Jmeter其实不需要安装,把这个压缩包放到你想要放置的位置,然后解压缩就好。
解压后本目录下会生成一个名为apache-jmeter-5.4.1的文件夹,我们双击进入,再进入bin文件夹,双击此目录中的ApacheJMeter.jar或着jmeter.bat都可以打开jmeter【用bat打开会多开启一个命令行】。
此时我们完成jmeter的安装。
刚装好的jmeter默认是英文版的,我这里直接贴出修改语言的菜单路径,你可以照着这个选项位置找过去改。
Jmeter的使用
Jmeter还有很多强大的功能,此文档只介绍我自己压测时会用到的相关功能,你有兴趣的话可以去探索其他功能。
右键左上角的测试计划,选择 添加-线程-线程组
右键刚刚建出来的线程组,选择 添加-取样器-HTTP请求
右键刚刚建出来的HTTP请求,选择 添加-监听器-聚合报告
好,准备工作完成,我们来讲解一下
先选择 线程组
我们会看到右边切换为线程组界面
线程组界面能够控制压测的并发数和持续时间,此处的设置会作用于此线程组下所有的HTTP请求
我们再在左边选择HTTP请求
能够看到,右边切换为HTTP请求界面
我们如果有接口需要上传文件,这时我们需要点击中间的【文件上传】页签
总而言之,你可以在HTTP请求界面构建请求你接口的http请求,就和postman类似。
最后,我们来看聚合报告
在左侧树中点击 聚合报告,可以看到右边切换为聚合报告界面
中文的表头都很容易理解,我就简单介绍下就好
字段 | 含义 |
---|---|
#样本 | 实际发起的总请求数 |
平均值 | 所有请求的响应时间之和/总请求数 |
中位数 | 假设总请求数为99,将这99次请求按耗时从高到低排列,第50次请求的耗时即为中位数\n 假设总请求数为100,将这100次请求按耗时从高到低排列,第50次和第51次请求的耗时的平均值即为中位数\n 按下面三项表头的表达方式,可以将中位数称为【50%百分位】 |
90%百分位 | 计算方式和中位数一样,只不过这项取的是排名第90%的那次请求\n 也可以理解为有90%的请求响应时间小于等于这个值 |
95%百分位 | 计算方式和中位数一样,只不过这项取的是排名第95%的那次请求\n 也可以理解为有95%的请求响应时间小于等于这个值 |
99%百分位 | 计算方式和中位数一样,只不过这项取的是排名第99%的那次请求\n 也可以理解为有99%的请求响应时间小于等于这个值 |
最小值 | 所有请求中响应时间最短的那个时间 |
最大值 | 所有请求中响应时间最长的那个时间 |
异常% | 对jmeter来说,异常意味着http返回码不为200,只要接口能调通,哪怕因为某些原因你的程序返回了报错,jmeter还是会认为调用是成功的 |
吞吐量 | 我们压测的核心数据,可以粗略理解为请求流通的数据量。我们压测的目的是找到吞吐量最高的并发值 |
测试接口结构组织
你可以在一个线程组下建立多个http请求,如下图
你也可以建好几个线程组,每个线程组下只放一个http请求
怎么样组织都是可以的,就是注意,调整并发数是在【线程组】界面进行调整的。我个人会更喜欢用下面那种方式,便于我调整各接口的并发数。
另外有一个要注意的就是,如果你只想要压测一个接口,一定记得要把别的接口或线程组禁用掉。
如果你已经压测过了,聚合报告中有数据,此时你要调整并发数再次进行压测,记得要把聚合报告清空,右键聚合报告,选择清除即可。
制定压测计划
我们压测一般采用控制变量法,同一个接口,相同的参数【包括文件参数】,相同的压测时间,只有并发线程数不同。
所以一般接口的参数设置好后就不再去动,在【线程组】界面设置 持续时间 并设置好后就不再去动,在压测的过程中根据需要调整【线程组】界面的 线程数 值。
你可以一次只压一个接口,也可以同时启用多个接口一起压,同时启用多个接口,且这多个接口分别属于不同【线程组】的话,你还可以给不同线程组设置不同的并发数,以实现【某些接口调用少,某些接口调用多】这样的效果。
具体就以你的实际情况去考虑了。
一般我们建议从一个比较小的并发开始压起,比如你服务器CPU在8核或以下的,建议并发1、3、5、6、7、8这样压上去,当然如果你服务器配置很好或着服务性能特别棒那你可以放飞自我一点
压测的目标是找到并发线程数增加但是吞吐量没有增加的并发数,如果吞吐量没有增加就说明服务压力已经上不去了,总有什么东西到瓶颈了,这个吞吐量最大时的并发数就是你的服务当前的最大并发数,超过这个数接着加并发,吞吐量甚至有可能下降。
压测前的准备
此处给出一个checklist,在你准备开始压测前,请逐条核对
- 检查要压测的接口ip、端口、请求类型、接口路径是否正确,不压的接口是否禁用
- 检查要压测的接口参数【尤其是 内容类型 和 对POST使用multipart/form-data】、文件是否正确
- 检查并发量设置是否正确
- 检查并发时间设置是否正确【可选】
- 检查聚合报告是否清空【可选】
- 被压测服务是否重启【可选】
- 被压测服务运行是否正常
- 被压测服务所在服务器上其余服务是否关闭干净
开始压测
点击绿色箭头即可开始压测,开始后右侧红框里的stop按钮会亮起变为可点状态,如果你需要停止压测,可以点击stop按钮。
我们压测一般是设置相同参数相同时长,所以压测时长更多以【线程组】界面的【持续时间】参数来控制。
压测完成后可以去【聚合报告】页面查看压测结果
在Linux上使用jmeter
因为windows有着包括网络带宽、其他程序竞争在内的诸多干扰因素,所以我们一般更建议在linux上进行压测。
安装jdk
还是这个下载地址
java官方jdk下载地址
这次要下的是这个
一般的linux都是下的这个,当然你要是别的硬件架构你就自己下别的
将jdk-8u291-linux-x64.tar.gz放置到服务器的/usr/lib目录下
执行tar -zxvf jdk-8u291-linux-x64.tar.gz
可进行解压,解压后会在当前目录下生成一个名为jdk1.8.0_291的文件夹,为了以后操作方便我们这里对他重命名一下,执行mv ./jdk1.8.0_291 jdk
将其重命名为jdk。
然后我们需要修改环境变量
vim /etc/profile
在最后添上
#set java env
export JAVA_HOME=/usr/lib/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
然后:wq
保存即可
执行source /etc/profile
让配置立刻生效
可以执行java -version
看是否能够正常打印java版本来判断安装是否成功
安装jmeter
安装文件还是上面叫你下的那个zip,一模一样,直接拿来用
将apache-jmeter-5.4.1.zip拷入合适位置,哪都行,本文档以/home
目录为例
执行unzip apache-jmeter-5.4.1.zip
进行解压,解压完成后会在本目录下生成一个名为jmeter-5.4.1的文件夹
和windows环境类似,linux环境的jmeter只要解压就好不需要安装
然后我们需要修改环境变量
vim /etc/profile
在最后添上
export JMETER="/home/jmeter-5.4.1"
export CLASSPATH="$JMETER/lib/ext/ApacheJMeter_core.jar:$JMETER/lib/jorphan.jar:$JMETER/lib/logkit-2.0.jar:$CLASSPATH"
然后:wq
保存即可
执行source /etc/profile
让配置立刻生效
开始压测
建议在windows的jmeter先设置好你要压测的所有配置项,包括并发数和接口、接口参数等等【注意如果有文件的话文件路径在linux上会发生变化,所以文件路径在windows上先不改】,记得把你不压的接口禁用掉,然后点击顶部 文件-保存测试计划 即可将你的测试计划保存在文件中
如图所示会保存成一个jmx文件,文件名你可以自己起,保存位置也随意
保存好后将这个jmx文件拷入压测服务器,最好是拷入/home/jmeter-5.4.1/bin
目录,这也是待会启动jmeter的程序所在的目录,然后将你要作为参数的文件也拷入同一目录,使用vim编辑这个jmx文件,在里面找到你之前设置为文件参数的文件路径【windows环境的路径很容易认,就D:之类的有个盘符开头】把他改成linux环境的文件路径,刚才叫你把文件和jmx放在相同目录,此时你就可以直接写./文件名这样,不用写太多字。改好以后:wq保存。
此时我们就可以开始压测了,在/home/jmeter-5.4.1/bin
执行
java -jar ApacheJMeter.jar -n -t test.jmx -l test.jtl
jmeter就会开始跑,并且会自动在当前目录生成一个jtl文件【你命令里文件名可以改不是非要test.jtl】将测试结果写入,跑完会打印end of run,此时我们要将这个jtl文件从服务器上拷出来,到windows版jmeter上,打开【聚合报告】界面,点击浏览
选择我们刚才从服务器上拷出的jtl文件,就能够看到我们在服务器上进行压测的结果了。