JMeter的使用

JMeter的使用

**注意:**jmeter必须要有jdk环境,如果没有,先安装jdk

Jmeter的一些地址

下载JMeter

插件下载地址

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只有方法一有效

  1. 方法一

    #这个是修改的字体初始倍数,但貌似要点击一次放大或缩小才起作用
    jmeter.hidpi.mode=true
    jmeter.hidpi.scale.factor=1.6
    
  2. 方法二

    jsyntaxtextarea.font.family=Hack #默认就是Hack
    jsyntaxtextarea.font.size=32 #默认=14
    jmeter.toolbar.icons.size=32x32 #图标比率,默认是22x22,可用19x19、24x24、32x32、48x48
    jmeter.tree.icons.size=32x32
    
  3. 方法三

    打开bin--->jmeter.bat-->编辑在@echo of下添加并保存:

    set JVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.controlFont=Dialog-30
    set JVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.systemFont=Dialog-30
    set JVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.userFont=SansSerif-30
    set JVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.smallFont=SansSerif-30
    

修改运行内存

  • windows下在bin/jmeter.bat文件里面修改

    set HEAP=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m
    

JMeter的使用_第1张图片

  • linux在bin/jmeter修改

    ${HEAP:="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"}
    

在这里插入图片描述

创建测试计划

**注意:**图形界面只能创建测试计划,如果要压测,必须使用命令的形式运行测试计划脚本。

  1. 右键测试计划,添加线程组

  2. 这里我们添加一个简单的http测试,…未完待续

测试计划的组件

测试计划的请求参数

  • 使用配置元件,如:用户自定义变量http请求默认值来设置请求ipport;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)
    
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.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"), )}

你可能感兴趣的:(工具使用,jmeter,压力测试,单元测试)