关于jmeter:Jmeter使用文档循环怎么用

15次阅读

共计 3667 个字符,预计需要花费 10 分钟才能阅读完成。

Jmeter 应用文档(循环怎么用)

根底用法

  • 批改语言

    • Jmeter 之界面语言设置
    • 上面应用简体中文的命名进行阐明
  • 关上日志

    • 启动后,右上角有个黄色的感叹号图标,点击即可关上即时日志
    • 如果没有看到重启下 jmeter,局部操作(如长期批改语言)可能导致图标隐没

界面模式

================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
   jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
   Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================
  • GUI 模式:关上 jmeter 时,能够看到控制台打印了下面这段文字

    • GUI 指客户端界面
    • 能够看到外面提醒不要应用 GUI 进行测试
    • 只有在创立和调试的时候应用
  • CLI 模式:即非 GUI 模式

    • jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
    • 新建一个文件夹,按住 ”shift”,点击右键,能够看到 ” 在此处关上 Powershell 窗口 ”

      • 将 jmeter 执行命令行输出窗口即可运行
      • 运行日志会在以后文件夹下自动生产一个 jmeter.log,用于记录具体日志
参数 示例 阐明
jmeter D:\apache-jmeter-5.5\bin\jmeter jmeter 启动门路
-n -n 用 CLI 模式运行
-t -t D:\demo\abc.jmx 测试文件门路
-l -l D:\demo\adb.csv 执行后果记录,每一行是每个步骤执行汇总信息
-e -e - o 的固定搭配
-o -o D:\demo\report\ 汇总报告目录,测试完结后会生成 html 报告,会主动创立目录
  • 示例
  • D:\apache-jmeter-5.5\bin\jmeter -n -t D:\demo\abc.jmx -l -l D:\demo\adb.csv -e -o D:\demo\report\

起步

 创立的构造如下

* 测试计划
    * 线程组
        * 查看后果树
        * 汇总报告
        * 用户定义的变量
        * 循环控制器
            * 调试取样器 
  • 关上 Jmeter 界面,按下面的构造创立流程
  • 创立线程组

    • 右键 ” 测试计划 ” > “ 增加 ” > “ 线程 (用户)” > “ 线程组 ”
  • 右键 ” 线程组 ” 能够看到菜单,下方列举一些通用的内容阐明
  • 减少 ” 查看后果树 ”
  • 减少 ” 汇总报告 ”
  • 减少 ” 用户定义的变量 ”

    • 界面里随便增加一些参数名称和值(如:name,LaoXu;age,30;)
  • 减少 ” 循环控制器 ”

    • 循环次数设置为 ”3″
  • 右键 ” 循环控制器 ”,减少 ” 调试取样器 (Debug Sampler)”
  • 保留
  • 点击 ” 查看后果树 ”,关上后果界面
  • 点击菜单的绿色 ” 播放 ” 键

    • “ 查看后果树 ” 界面中就能看到有 3 项记录了
    • 点击其中一项

      • 点击 “ 响应数据 ” > “Response Body”
      • 能够看到打印着刚刚设置在 ” 用户定义变量 ” 里的参数名称和值
// 右键 "线程组" 显示的菜单(节选)* 增加
    * 取样器
        * HTTP 申请                      // http 测试
        * 调试取样器 (Debug Sampler)      // 用于查看用户变量,调试循环控制器时很有用
        * BeanShell 取样器               // BeanShell 脚本,能够用于清理参数,复制等
        * ... 其余插件取样器              // 其余插件可提供丰盛的取样器
    * 逻辑控制器
        * IF 控制器                      // 判断管制,如有未登录用户先调用登录接口进行登录
        * 事务控制器                    // 步骤比拟多的状况下,能够别离放入事务控制器,这样就能开展缩放便于管理
        * 循环控制器                    // 循环
        * While 控制器                  // 循环的一种,能够搭配 "CSV 文件"
        * ForEach 控制器                // 循环的一种,能够搭配 "用户定义变量"
    * 定时器
        * 固定定时器                     // 期待时长
    * 配置原件
        * 用户定义的变量                  // 用户本人设置的变量,在取样器中能够应用 ${xxx} 形式替换(取样器须要反对,不是所有取样器都能用)* CSV Data Config              // CSV 数据文件设置,能够与 "While 控制器" 搭配应用
    * 监听器
        * 查看后果树                     // 查看取样器执行后果
        * 汇总报告                       // 汇总后果,如成功率、均匀时长等 

循环管制

  • 取样器 ”HTTP 申请 ” 中,很多中央能够应用 ${xxx} 的形式替换参数
  • 上面解说如何应用应用配置进行循环

用户定义变量 + ForEach 控制器

 创立的构造如下

* 测试计划
    * 线程组
        * 查看后果树
        * 汇总报告
        * 用户定义的变量
        * ForEach 控制器
            * 调试取样器 
  • 用户定义的变量

    • 增加几个变量,以 ”_x” 结尾(从 1 开始,且须要间断)
    • 举例

      • user_id_1 , 10
      • user_id_2 , 20
  • ForEach 控制器

    • 输出变量前缀:”user_id”
    • 输入变量名:“user”
  • 运行后能够后果如下方

    • 能够看出,取样器中取到了用户定义里的参数
    • 而后按程序,获取到对应前缀的值,并复制到新的变量
* 调试取样器
    * user=10
    * user_id_1=10
    * user_id_2=20
* 调试取样器
    * user=20
    * user_id_1=10
    * user_id_2=20

CSV 文件 + While 循环

  • CSV 设置较简单,除非万不得已倡议应用 [用户定义变量 + ForEach 控制器] 的组合
  • 应用 CSV 会遇到几个问题

    • CSV 读取由其余控制器管制

      • 网上大部分文章是将线程组循环次数设置得和 CSV 行数雷同,这样就做不到再管制循环
      • 将 CSV 放在 While 控制器外部,这样就能够在 While 控制器外再套上其余循环
    • 文件结束符为 ”< EOF >”

      • 当 ” 遇到文件结束符再次循环?” 设置为 ”True”

        • 读取不到 EOF,数据会始终循环
        • 在 While 控制器的条件中不能应用 EOF 作为判断条件
      • 当 ” 遇到文件结束符再次循环?” 设置为 ”False”

        • 同个线程同个 CSV 只能读取一次,只有无论怎么设置,读取到的都是 EOF
      • 当 ” 遇到文件结束符进行线程?” 设置为 ”True”

        • 循环一次读取到结束符时,程序就进行了,前面的步骤就不能执行了
      • 循环完结后,循环的参数值不会主动革除
 一个 CSV 读取单元构造如下

* BeanShell 取样器
* While 控制器
    * CSV 数据文件设置
    * IF 控制器
        * 调试取样器 
  • BeanShell 取样器

    • 清理应用到的参数值,防止参数被其余步骤设置过,影响进入 While 控制器
    • 参数值见下方 CSV 文件
vars.remove("id");
vars.remove("name");
vars.remove("age");
  • While 控制器

    • 将增加在 csv 开端的 ”end” 作为自定义的结束符,作为判断条件
${__groovy("${id}"!="end")}
  • CSV 数据文件设置

    • 文件名:文件门路,点击前面的 ” 浏览 …” 抉择 csv 文件
    • 文件编码:UTF-8
    • 变量名称:id,name,age
    • 疏忽首行:True

      • 即疏忽 ”id,name,age” 这行,倡议 CSV 文件里加上头,防止工夫久了忘记
    • 遇到文件结束符再次循环?:True

      • 这样就能嵌套其余循环,或者 CSV 重复读取
    • 遇到文件结束符进行线程?:False
id,name,age
1, 张三,18
3, 李四,33
5, 王八,8
end
  • IF 控制器

    • While 循环器相似 do…while 循环,即先执行后判断
    • 最初一次循环时三个参数读取到的别离是 end,EOF,EOF
    • 所以加上这个条件过滤,防止报错
${__groovy("${id}"!="end")}
  • 调试取样器

    • 进行打印,查看参数值
  • 这样就是一个残缺的单元

    • 能够重复执行,或嵌套循环,如下所示
* 测试计划
    * 线程组
        * 查看后果树
        * 汇总报告
        * <CSV 单元 >     // 执行 CSV
        * <CSV 单元 >     // 再次执行 CSV 不受影响
        * 循环控制器     // 循环 n 次仍然可行
            * <csv 单元 >

教训

定时器

  • 定时器与程序无关,同层级肯定是定时器先执行
// 以下两种程序,都是先执行定时,再执行取样器
* 固定定时器
* 调试取样器
---
* 调试取样器
* 固定定时器 
  • 定时器会流传到上面的层级
// 所有调试取样器都要期待 3 秒后执行,因为定时器会流传

* 固定定时器 (3 秒)
* While 控制器
    * 调试取样器 
  • 多个定时器会叠加
// 期待 6 秒执行第 1 个,期待 6 秒执行第 2 个

* 固定定时器 (3 秒)
* 调试取样器
* 固定定时器 (3 秒)
* 调试取样器 
  • 解决方案

    • 在定时器下层减少事务福安里奇
    • 在减少一个取样器,因为定时器不能独自存在,如果没有取样器会间接跳过
* 事务管理器
    * 固定定时器
    * 调试取样器    // 可替换成任意取样器,作用是使定时器失效 

正文完
 0