压测工具JMeter使用指南

目录

      • GUI模式压测
        • 基本使用
        • 断言
        • 自定义变量
        • 批量导入测试数据
        • 压测数据库
      • CLI模式压测
        • 压测流程
        • 分析压测结果
      • 分布式压测

 

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

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

压测结果一般关注

  • qps:query per second,每秒处理的读请求数量
  • tps:transaction per second,每秒处理的写请求数量
  • 请求处理耗时:95线、99线,95%、99%的请求落在什么区间范围,剩下的极少数请求可能是受到网络环境等极端情况影响。
     

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

 

GUI模式压测

基本使用

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使用指南_第1张图片
    压测工具JMeter使用指南_第2张图片
    根据压测结果调整jdbc连接配置、数据库本身配置,反复压测,以优化数据库。

 

CLI模式压测

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目录下执行

jmeter -n -t /test/user_api.jmx -l /result/user_api.jtl -e -o /result/user_api
  • -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

#slave节点的ip,写内网ip。如果master也要压测应用,可以把master的ip写上。
remote_hosts=192.168.1.3,192.168.1.14

#如果RMI不使用ssl,可以改为true 禁用ssl
server.rmi.ssl.disable=true

 

3、分别启动slave

#执行bin目录下的jmeter-server
./jmeter-server

 

4、master启动压测

  • GUI方式:双击jmeter.bat启动,创建压测任务,点击菜单栏的 运行 -> 远程启动所有,所有的slave都会压测线程组中指定的接口。可以只选择某个slave进行启动。
  • CLI方式:在GUI中创建压测任务,不要使用需要GUI支持、有额外性能开销的功能,保存为.jmx脚本,上传到master节点,cd到bin目录执行
#-r表示使用分布式压测
jmeter -n -t /test/user_api.jmx -r -l /result/user_api.jtl -e -o /result/user_api

 

参考官方文档

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

你可能感兴趣的:(测试,jmeter,测试,GUI模式压测,CLI模式压测,分布式压测)