JMeter的使用
注意: jmeter必须要有jdk环境,如果没有,先安装jdk
Jmeter的一些地址
下载JMeter
插件下载地址
jmeter官方使用文档,里面非常全
目前发现的比较全的博主
- 博客一,40几篇jmeter
JMeter的使用
配置环境变量
- 添加
JMETER_HOME
,变量为jmeter解压目录,eg:F:\solf_ware\apache-jmeter-5.5
- CLASSPATH变量新加
%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar;
- PATH新加
;%JMETER_HOME%\bin
- 注意:配置时如果是改变的
系统环境变量
而不是用户环境变量
,cmd执行时必须是管理员
常用插件
Plugins Manager,先搜索下载这个,后面的插件可以用这个插件找到
Basic Graphs
5 Additional Graphs
下载完
Plugins Manager
后,把它放到jmeter解压目录的
lib\etc
下,插件都是放这个目录,然后重新打开jmeter,可以看到
选项——>Plugins Manager
,再点击
Available Plugins
就是搜索插件选项就可以搜索下载插件
使用
设置中文以及字体大小
打开
bin/jmeter.properties
设置为中文:
language=zh_CN
设置字体大小:
这里我的win10只有方法一有效
- 方法一
#这个是修改的字体初始倍数,但貌似要点击一次放大或缩小才起作用jmeter.hidpi.mode=truejmeter.hidpi.scale.factor=1.6
- 方法二
jsyntaxtextarea.font.family=Hack #默认就是Hackjsyntaxtextarea.font.size=32 #默认=14jmeter.toolbar.icons.size=32x32 #图标比率,默认是22x22,可用19x19、24x24、32x32、48x48jmeter.tree.icons.size=32x32
- 方法三打开
bin--->jmeter.bat-->
编辑在@echo of下添加并保存:setJVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.controlFont=Dialog-30setJVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.systemFont=Dialog-30setJVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.userFont=SansSerif-30setJVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.smallFont=SansSerif-30
修改运行内存
- windows下在
bin/jmeter.bat
文件里面修改setHEAP=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m
- linux在
bin/jmeter
修改${HEAP:="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"}
创建测试计划
注意: 图形界面只能创建测试计划,如果要压测,必须使用命令的形式运行测试计划脚本。
- 右键测试计划,添加线程组
- 这里我们添加一个简单的http测试,…未完待续
测试计划的组件
测试计划的请求参数
- 使用
配置元件
,如:用户自定义变量
和http请求默认值
来设置请求ip
和port
;HTTP请求头设置header;CSV data set config 来获取csv形式的大批量参数; - 可以使用
函数助手
来生成函数,以获取需要生成的请求参数 - 添加
前置处理器
或后置处理器
来对请求参数或请求结果进行处理 - 使用
逻辑控制器
,来完成多个请求之间的联调,比如:if控制器
获取上一个接口请求结果,来判断是否请求另一个接口;事务控制器
发起同一个事务请求 - 添加
取样器
来增加测试请求内容,如http请求
- 使用
断言
来判定请求是否成功,如响应断言、json断言。 - 使用
定时器
来完成各种延时的操作 - 使用
监听器
来记录并分析请求结果,要注意的是,图表类监听器最好只用在创建\debug测试计划时,不能用于压测。
保存测试计划
注意:这里直接点击
保存
按钮是是没有用的,必须选择
文件
选项中的保存,否则后面也将无法再打开该测试计划
执行测试计划
注意:
- GUI图形界面仅用于压力测试的创建和调试,执行需要使用命令执行脚本
- 根据运行内存需求修改JMeter批处理文件的环境变量,它的默认值为:
HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"
- 强烈建议在测试计划中不要启动聚合报告、tps、结果树等等UI监听器,在运行之前可以将其禁用,或只使用简单数据监听生成jtl或者在执行测试计划时用
-l
指定jtl文件,应该使用命令来分析测试结果的jtl文件生成结果报告,否则会影响性能,只要你安装了tps之类的插件,命令生成的网页报告都会有这些内容,不需要再用GUI界面查看
执行命令:
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]# 中文解析:
jmeter -n -t 要运行的测试计划文件.jmx -l 测试结果保存路径.jtl -e -o web报告保存路径。
# 注意的是,生成html分析文件不应该一起执行,会消耗性能,这里加上只是演示而已# 运行测试计划命令
jmeter -n -t 要运行的测试计划文件.jmx -l 测试结果保存路径.jtl
# 运行测试计划后,使用命令分析jtl文件以生成html图表报告。
jmeter -g 测试结果保存路径.jtl -e -o web报告保存路径。
说明:
-n
非图形界面运行-t
指定要执行的测试计划文件-l
指定结果文件jtl之类的存储路径-e -o
指定web报告保存路径。-g
指定JTL文件的相对路径或完整路径
报告类型及解析
聚合报告(Aggregate Report)
- Samples:采样数/请求数
- Average:平均响应时间,单位毫秒
- Median:响应时间的一个中间值,单位毫秒
- 90%Line:90%的请求响应时间,单位毫秒
- 95%Line:95%的请求响应时间,单位毫秒
- 99%Line:99%的请求响应时间,单位毫秒
- Min:请求最小响应时间,单位毫秒
- Maximum:请求最大响应时间,单位毫秒
- Error %:响应错误率
- Throughput:每秒的吞吐量,
- Received KB/sec:每秒接收的数据量
- Send KB/sec:每秒发送的数据量
图形结果(Graph results)
汇总报告(Summary Report)
Jmeter的函数使用
函数列表
- threadNum: 获取线程号
- threadGroupName: 获取线程组名称
- samplerName: 获取取样器名称(标签) machineIP: 获取本地机器的IP地址
- machineName: 获取本地机器名称
- time: 以各种格式返回当前时间
- timeShift: 以各种格式返回日期,并添加指定的秒/分钟/小时/天的数量
- log: 记录(或显示)消息(并返回值)
- logn: 记录(或显示)消息(空返回值)
- StringFromFile: 从文件中读取一行
- FileToString :读取整个文件
- CSVRead :从CSV分隔文件中读取
- XPath :使用XPath表达式从文件中读取
- StringToFile :写一个字符串到文件
- counter: 产生一个递增的数字
- dateTimeConvert :将日期或时间从源格式转换为目标格式
- digest :生成摘要(SHA-1,SHA-256,MD5 …)
- intSum :添加整数
- longSum :加长号
- Random :产生一个随机数
- RandomDate :生成特定日期范围内的随机日期
- RandomFromMultipleVars: 从由|分隔的一组变量的值中提取元素
- RandomString: 产生随机字串
- UUID: 生成随机类型4 UUID
- groovy :运行一个Apache Groovy脚本
- BeanShell :运行一个BeanShell脚本
- javaScript: 处理JavaScript(Nashorn)
- jexl2 :评估Commons Jexl2表达式
- jexl3 :评估Commons Jexl3表达式
- isPropDefined :测试属性是否存在
- property: 读取Jmeter属性
- P :读取属性(速记方法)
- setProperty :设置一个JMeter属性
- split :将字符串拆分为变量
- eval :评估变量表达式
- evalVar:计算存储在变量中的表达式
- isVarDefined: 测试变量是否存在
- V :评估一个变量名
- char :从数字列表生成Unicode字符值
- changeCase: 按照不同的模式更改大小写
- escapeHtml :使用HTML编码对字符串进行编码
- escapeOroRegexpChars: 引用ORO正则表达式使用的元字符
- escapeXml :使用XMl编码对字符串进行编码
- regexFunction :使用正则表达式解析先前的响应
- unescape :包含Java转义符的处理字符串(例如\ n和\ t)
- unescapeHtml :解码HTML编码的字符串
- urldecode:解码应用程序/ x-www-form-urlencoded字符串
- urlencode:将字符串编码为application / x-www-form-urlencoded字符串
- TestPlanName: 返回当前测试计划的名称
BeanShell常用变量
vars
// 代码使用vars//string类型,
vars.put("error_info1", error_info);
vars.get("error_info1");//其他object类型:list、数组、Map
vars.putObjcet("flag", list);
vars.getObjcet("flag", list);//如果要在其他窗口调用参数:BeanShell 函数// 使用函数 ${__BeanShell( vars.getObjcet("flag"), )}
log:
log.info("")
prev:
获取前一个sample的响应;
prev.getResponseDataAsString()
prev.getResponseCode()
props
props和vars区别:
- props 继承了Hashtable的累,所以拥有与vars类似的get和put 方法, 另外还有继承Hashtable的其他方法
- props是多个线程组共享的,可以跨线程组使用,而vars只能在当前线程组共享
多出的方法
- 判断某属性是否存在, 返回布尔值
props.containsKey(``"PROPERTY_NAME"``)
- 判断某项值是否存在,返回布尔值:
props.contains("PROPERTY_VALUE")
- 删除某个值
props.remove("PROPERTY_NAME")
- 所有属性以字符串形式表示
props.toString()
BeanShell PostProcessor使用
注意:如果要使用jmeter没有的包,必须把jar包放入
lib/
目录,如:
fastjson
//获取获取请求的返回值String response = prev.getResponseDataAsString();//日志打印获取请求的返回值//log.info(response);
vars.put("cert_sign", response)importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;//获取获取请求的返回值String json = prev.getResponseDataAsString();JSONObject jso = JSON.parseObject(json);String error_info = jso.getString("error_info");//string类型,
vars.put("error_info1", error_info);
vars.get("error_info1");//其他object类型
vars.putObjcet("flag",true);
vars.getObjcet("flag",true);//如果要在其他窗口调用参数:// 使用函数 ${__BeanShell( vars.getObjcet("flag"), )}
版权归原作者 万山寒 所有, 如有侵权,请联系我们删除。