安装运行
安装
下载解压即可
1 | ./jmeter-server -Djava.rmi.server.hostname=192.168.13.128 -Dserver_port=1099 |
jemter支持客户端配置测试数据上传influxdb&Grafana:
添加Backend Listener 组件InfluxdbBackendListenerClient,用于收集数据并发送给influxdb
命令行运行
1 | jmeter -n -t <testplan filename> -l <listener filename> |
组件
执行顺序:
配置元件
前置处理器
定时器/逻辑控制器
取样-请求-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=
配置JMeter 控制节点,将控制节点指向各个Agent节点:
打开 jmeter.properties, 找到remote_hosts 配置项
将Agent 压测节点的对应 hostname (IP) 、端口 填入
远程静默压测(只能看到命令行参数的变动与监控平台曲线变化)
打开GUI运行远程压测的问题:
GUI不能关闭
控制节点不能停止运行
虽然控制节点可以不承担 “发压” 工作,但是控制节点也不能关机
结论: 压测时间持续长,尽量别用自己的工作机当控制节点
首先保证所有agent都已经启动,运行JMeter静默压测,不用启动GUI,支持远程分布式压测
jmeter -n -r -t
看监控页面,等待结束,结果记录导入看测试报告
工具
swagger转换jmx
https://github.com/Pactortester/swaggerjmx
关联文件扩展名
关联文件扩展名 .jmx
双击该命令以打开JMeter GUI
jmeter-n.cmd
用于非GUI,jmeterw.cmd
用于在没有控制台窗口的情况下打开JMeter- 使用jmeter-t.cmd打开jmx会在后台打开gui和cmd,使用jmeterw不会打开任何东西。
使用Assoc命令设置JMeter .jmx脚本的文件类型关联
1
Assoc .jmx=jmeter
使用FType命令为.jmx脚本定义JMeter可执行文件
1
FType jmeter='c:\apps\jmeter\bin\jmeter-t.cmd' %1
问题
编码:
转码程序贴入Beanshell PostProcessor