天天看点

压测工具JMeter使用指南

GUI模式压测

基本使用

断言

自定义变量

批量导入测试数据

压测数据库

CLI模式压测

压测流程

分析压测结果

分布式压测

通过压测可以定位系统的性能瓶颈,以便针对性地进行优化。

前端的静态资源一般都放在cdn上,速度快、无需压测,压测一般是指后端接口的压测。一般只压测请求频率高的接口,压测请求频率低的接口没有意义。

压测结果一般关注

qps:query per second,每秒处理的读请求数量

tps:transaction per second,每秒处理的写请求数量

请求处理耗时:95线、99线,95%、99%的请求落在什么区间范围,剩下的极少数请求可能是受到网络环境等极端情况影响。

jmeter是一个开源免费、功能强大的压测工具,纯java编写,支持不同的请求协议(http、https),支持分布式压测。

win下载zip,linux下载tgz,里面的文件都是一样的,只是压缩格式不同。

解压,主要使用bin目录下的文件,win执行 jmeter.bat 启动,linux执行 jmeter.sh 启动。

修改GUI语言

可在 jmeter.properties 中修改GUI语言,language=zh_CN,默认en

也可启动后在菜单栏的 options -> choose language 中修改,但这种只是临时修改,重启失效。

创建压测任务

1、对测试计划单击右键,添加线程组

2、对线程组单击右键,分别添加

取样器(sampler)的http请求。可在Parameters中添加请求参数。

监听器(listener)的查看结果树、聚合报告。

一个http请求对应一个接口,一个线程组可添加多个请求,这些请求通过名称进行区分。

点击工具栏的运行是压测所有线程组,可以对某个线程组右键运行,只压测该线程组。如果不想压测某些线程组或某些请求,可以右键禁用。

可以把压测任务保存为.jmx文件,传给其他人使用,在jmeter中打开.jmx文件即可。

聚合报告的指标

label:http请求名称

samples:总的请求个数

average:请求处理时间的平均数

median:请求处理时间的中位数

9x%line:9x%的请求都在该时间内处理完成

min:请求处理的最小时间,0表示处理时间极短

max:请求处理的最大时间

error%:错误率

throughtput:相当于qps

压测到throughtput上升缓慢,这时服务器cpu的使用率也差不多100%了,就行了。

可以对线程组右键添加断言,这种断言会应用于此线程组的所有http请求

也可以对某个http请求右键添加断言,这种断言只应用于这个http请求

断言一般使用响应断言即可。

有多个http请求时,可以使用自定义变量,统一设置这些http请求的protocol、服务器的ip|域名、port、path中的公共路径,方便修改。

使用步骤

对线程组单击右键,添加配置元件(config element)的用户定义变量,设置自定义的变量

在http请求中通过${xxx}引用对应的变量

场景:自定义一批要传给后端接口的参数,或者传给后端接口的参数是从数据库中导出的.csv文件。

对线程组单击右键,添加配置元件(config element)的csv数据集配置

选择csv文件,也可以是txt之类的文本文件,不要标题,一行对应一个实参表

设置变量名,有多个变量名时英文逗号分隔

填写分隔符,如果是csv文件,不用填分隔符

默认读取到最后一行后会从头循环读取,可以将recycle on eof设置为false、stop thread on eof设置为true,这样读取到最后一行后会自动终止测试。

1、点击测试计划,在最底部点击浏览,添加对应的数据库驱动的jar包。

2、新建线程组,分别添加

取样器(sampler)的jdbc请求

配置元件的jdbc连接配置。这个也可以添加到jdbc请求中,只应用于该jdbc请求。

监听器的查看结果树、聚合报告。查看结果树中的返回响应,有利于定位错误原因。

压测工具JMeter使用指南
压测工具JMeter使用指南

根据压测结果调整jdbc连接配置、数据库本身配置,反复压测,以优化数据库。

jmeter需要使用大量的线程模拟用户请求,很吃性能。GUI模式是在带图形界面的操作系统上,使用jmeter的GUI界面进行压测,不管是操作系统的GUI,还是jmeter本身的GUI,都占了机器不少性能,况且我们自己的开发机也运行着很多程序,jmeter不能完全发挥测试性能,压测结果有误差。

一般是把jmeter部署在单独的服务器上,在命令行进行压测,不使用监听器等耗性能的设置,以便发挥jmeter的测试性能;需要先设置好应用的堆内存 -Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m,jmeter的堆内存可以在bin/jmeter中设置,不过jmeter的堆内存一般不用手动设置。

1、下载tgz,tar -xzvf解压,cd到bin目录

2、在jmeter的GUI上创建好测试任务,没问题后,将要使用的线程组另存为.jmx脚本,传到linux上。

不要使用需要GUI界面支持的功能,比如监听器的查看结果树、聚合报告;尽量不使用有额外性能损耗的功能,比如断言、监听器。

如果要测带宽影响,使用服务器的公网ip进行测试;一般使用服务器的内网ip进行测试,以排除带宽影响。

3、在linux上jmeter的bin目录下执行

-n 非GUI模式

-t 要使用的.jmx测试脚本

-l 指定结果文件。这个文件会包含每个请求的结果。这个文件要是空的,如果不是空的,先手动删除此文件。

-e 生成html报告

-o 指定html报告的存放目录,此目录要是空的,如果不是空的,先手动删除此目录。

说明

这个命令可以在win命令行运行

如果提示.jmx文件没有对应权限,可以chmod赋权

1、下载生成的.jtl文件、html文档

2、分析.jtl文件(可选):在jmeter的GUI界面对线程组单击右键,添加监听器的聚合报告,在浏览中导入生成的.jtl文件,即可查看压测请求的总体情况。

3、双击index.html在浏览器中生成的html报告,查看压测结果分析。这里面已经包含了第二步中的聚合报告内容,所以第二步可以省略。

分布式压测:使用多个jmeter节点同时进行压测,测试结果更加准确。

一个jmeter节点作为master,其余jmeter节点作为slave,master启动分布式压测,各个slave节点同时进行压测,完成后将压测数据返回给master进行汇总。master可以同时作为slave参与应用压测。

1、准备工作

在各个jmeter节点上安装jdk、jmeter,版本保持一致

各个jmeter节点要在同一局域网内

各个jmeter节点之间通过RMI协议进行通信,RMI默认使用1099端口,所以各个jmeter节点都需要开放1099端口,或者关闭防火墙

2、修改master的配置文件 jmeter.properties

3、分别启动slave

4、master启动压测

GUI方式:双击jmeter.bat启动,创建压测任务,点击菜单栏的 运行 -> 远程启动所有,所有的slave都会压测线程组中指定的接口。可以只选择某个slave进行启动。

CLI方式:在GUI中创建压测任务,不要使用需要GUI支持、有额外性能开销的功能,保存为.jmx脚本,上传到master节点,cd到bin目录执行

参考官方文档

https://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html

https://jmeter.apache.org/usermanual/remote-test.html

下一篇: 关于疑问