安装运行

安装

下载解压即可

1
./jmeter-server -Djava.rmi.server.hostname=192.168.13.128 -Dserver_port=1099

jemter支持客户端配置测试数据上传influxdb&Grafana:

添加Backend Listener 组件InfluxdbBackendListenerClient,用于收集数据并发送给influxdb

命令行运行

1
2
3
4
5
6
7
8
jmeter -n -t <testplan filename> -l <listener filename>
-h, –help -> prints usage information and exit
-n, –nongui -> run JMeter in nongui mode
-t, –testfile <argument> -> the jmeter test(.jmx) file to run
-l, –logfile <argument> -> the file to log samples to
-r, –runremote -> Start remote servers (as defined in remote_hosts)
-H, –proxyHost <argument> -> Set a proxy server for JMeter to use
-P, –proxyPort <argument> -> Set proxy server port for JMeter to use

组件

执行顺序:

配置元件
前置处理器
定时器/逻辑控制器
取样-请求-samplers
后置处理器
断言
监听器

逻辑控制组件 - Loop Controller

录制回放

JMeter 脚本录制之前的业务步骤梳理、明确
创建代理HTTP(S) Test Script Recorder
添加Thread Group
添加Recorder Controller
代理中的配置: 端口、包含URL过滤(include)、排除URL过滤(exclude)、存放位置
开启JMeter代理
配置浏览器的代理
在浏览器中完成业务操作
JMeter 中完成录制之后检查

自动压测

JMeter 脚本(.jmx 文件) - 压测逻辑
Shell – 控制逻辑(并发数的更改)
JMeter 静默运行– 脱离UI限制,使得自动化运行更稳定
jmeter –n –t $jmx_file -l $jtl_file(jtl 文件是jmeter压测请求响应数据的原始文件)

java request

问题:

不是所有的接口都是http 协议
稀有协议的请求必须定制化用程序开发
jmx 本质上只是配置文件,不是程序代码
团队一起开发jmx 会很头疼,JMeter UI中处理XML冲突
原理及优势:
纯Java 程序,实现了JMeter中提供接口– “JavaSamplerClient”
将Java 程序集成到JMeter中,通过Java Request实现调度
Java 程序实现与压测“目标”的交互
JMeter 来控制Java程序的生命周期、并发调度、收集结果报告等处理

自己写程序,流程控制自由、灵活;纯代码编程,源码管理方便,容易推进团队合作开发;要Java程序可以实现的就是能够支持的

实现:

Java Request 执行类必须继承AbstractJavaSamplerClient 抽象类
各种Post Get Delete 请求需要使用java 的HttpClient 来实现
接口请求之间的交互在java 代码中来控制
HttpResponse 中的Json 返回值解析使用java 中的json 解析库来进行解析
除了最终的运行和数据交互需要进入jmeter,基本上已经俨然变成了java 程序开发活动

jmeter中的Beanshell

小型嵌入式Java 源码解释器
BeanShell PreProcessor :在Sampler 执行之前会被执行
BeanShell PostProcessor:在Sampler 执行之后会被执行
BeanShell Sampler: 可以直接嵌入BeanShell代码

BeanShell 用途:
帮助生成测试执行过程中的数据
嵌入Java 程序, 执行对应逻辑操作

Beanshell PreProcessor:
在Sampler 请求实际调用之前被执行
支持在BeanShell PreProcessor中直接写代码或者在Java项目中编写代码,打包导入JMeter之后再被调用
Demo:

调用Java代码: long timestamp = System.currentTimeMillis();
将生成的时间戳字符串放入JMeter 的全局变量中:
vars.put(“timestamp”, timestamp + “”);
后续请求通过引用${timestamp} 来使用该变量

JMeter中的Beanshell PostProcessor

在Sampler 请求实际调用发生之后再被执行
支持在BeanShell PostProcessor中直接写代码或者在Java项目中编写代码,打包导入JMeter之后再被调用
Demo:

打包输出成jar文件,然后放入JMeter_Path/lib/ext 目录下
在Beanshell PostProcessor中调用封装后的Java函数
得到函数返回值之后,将返回值放入JMeter变量组vars
后续请求中可以直接使用对应的变量值

分布式

确定JMeter 控制节点与 Agent节点的运行位置
控制节点与Agent节点之间的网络通信保持畅通
防火墙 – 关闭 或者 设定开放具体端口
各个节点上安装好 JMeter
确定各节点的IP与JMeter启动后需要占用的端口号
启动Agent 节点的远程监听模式
配置控制节点的jmeter.properties

启动分布式压测Agent节点(同一台机器启动多个远程压测节点时需要避开端口冲突):
jmeter-server -Djava.rmi.server.hostname= -Dserver_port=

配置JMeter 控制节点,将控制节点指向各个Agent节点:
打开 jmeter.properties, 找到remote_hosts 配置项
将Agent 压测节点的对应 hostname (IP) 、端口 填入

远程静默压测(只能看到命令行参数的变动与监控平台曲线变化)

打开GUI运行远程压测的问题:
GUI不能关闭
控制节点不能停止运行
虽然控制节点可以不承担 “发压” 工作,但是控制节点也不能关机
结论: 压测时间持续长,尽量别用自己的工作机当控制节点

首先保证所有agent都已经启动,运行JMeter静默压测,不用启动GUI,支持远程分布式压测
jmeter -n -r -t -l
看监控页面,等待结束,结果记录导入看测试报告

工具

swagger转换jmx

https://github.com/Pactortester/swaggerjmx

关联文件扩展名

关联文件扩展名 .jmx 双击该命令以打开JMeter GUI

  • jmeter-n.cmd 用于非GUI, jmeterw.cmd 用于在没有控制台窗口的情况下打开JMeter
  • 使用jmeter-t.cmd打开jmx会在后台打开gui和cmd,使用jmeterw不会打开任何东西。
  1. 使用Assoc命令设置JMeter .jmx脚本的文件类型关联

    1
    Assoc .jmx=jmeter 
  2. 使用FType命令为.jmx脚本定义JMeter可执行文件

    1
    FType jmeter='c:\apps\jmeter\bin\jmeter-t.cmd' %1 

问题

编码:

转码程序贴入Beanshell PostProcessor