• 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后,把它放到jmeter解压目录的lib\etc下,插件都是放这个目录,然后重新打开jmeter,可以看到选项——>Plugins Manager,再点击Available Plugins就是搜索插件选项就可以搜索下载插件
    在这里插入图片描述

    使用

    设置中文以及字体大小

    打开bin/jmeter.properties

    设置为中文:
    language=zh_CN
    
    • 1
    设置字体大小:

    这里我的win10只有方法一有效

    1. 方法一

      #这个是修改的字体初始倍数,但貌似要点击一次放大或缩小才起作用
      jmeter.hidpi.mode=true
      jmeter.hidpi.scale.factor=1.6
      
      • 1
      • 2
      • 3
    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
      
      • 1
      • 2
      • 3
      • 4
    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
      
      • 1
      • 2
      • 3
      • 4

    修改运行内存

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

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

    在这里插入图片描述

    • linux在bin/jmeter修改

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

    在这里插入图片描述

    设置默认编码格式

    设置bin\jmeter.properties的这个值

    sampleresult.default.encoding=UTF-8
    
    • 1

    创建测试计划

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

    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报告保存路径。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    说明:

    • -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"), )}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    log:

    log.info("")
    
    • 1

    prev:

    获取前一个sample的响应;

     prev.getResponseDataAsString()
     prev.getResponseCode()
    
    • 1
    • 2

    props

    props和vars区别:
    • props 继承了Hashtable的累,所以拥有与vars类似的get和put 方法, 另外还有继承Hashtable的其他方法
    • props是多个线程组共享的,可以跨线程组使用,而vars只能在当前线程组共享
    多出的方法
    • 判断某属性是否存在, 返回布尔值
    props.containsKey(``"PROPERTY_NAME"``)  
    
    • 1
    • 判断某项值是否存在,返回布尔值:
    props.contains("PROPERTY_VALUE")
    
    • 1
    • 删除某个值
    props.remove("PROPERTY_NAME")
    
    • 1
    • 所有属性以字符串形式表示
    props.toString()
    
    • 1

    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"), )}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    Docker常见命令学习
    【微客云】外卖霸王餐-城市分站加盟-区域代理-服务商模式
    Python图像和视频上传
    UE4 相机围绕某点旋转
    蓝桥杯2024年第十五届省赛
    单例模式(常用)
    仿闪照功能娱乐微信小程序源码下载-带外卖CPS功能和流量主
    深入了解Golang:基本语法与核心特性解析
    Python课程设计-图书管理系统
    俯瞰·明攻山西之战(太原之战)
  • 原文地址:https://blog.csdn.net/blood_Z/article/details/126424229