Jmeter使用文档(循环怎么用)
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"
- 循环一次读取到结束符时,程序就停止了,后面的步骤就不能执行了
- 循环结束后,循环的参数值不会自动清除
- 当"遇到文件结束符再次循环?"设置为"True"
- CSV读取由其他控制器控制
一个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秒)
* 调试取样器
- 解决方案
- 在定时器上层增加事务福安里奇
- 在增加一个取样器,因为定时器不能单独存在,如果没有取样器会直接跳过
* 事务管理器
* 固定定时器
* 调试取样器 // 可替换成任意取样器,作用是使定时器生效
Jmeter使用文档(循环怎么用)的更多相关文章
- JMeter使用文档
JMeter使用文档 1.JMeter安装步骤 1.1Windows环境 a.安装jdk(对应windows系统位数) http://www.oracle.com/technetwork/java/j ...
- Jmeter使用文档(windows)
1. 安装jdk并配置环境变量 以1.8为例: (1)安装jdk1.8; (2)在系统变量里点击新建,变量名填写JAVA_HOME,变量值填写JDK的安装路径“C:\Program Files\Jav ...
- jmeter_02_目录文档说明
jmeter目录文档说明 bin目录是可执行文件 jmeter.bat 是启动文件 可以启动jmeter. 使用notpad++ 等文本编辑器打开 bat文件 可以配置jvm的参数 比如堆内存[Hea ...
- Jmeter+Badboy安装使用文档
Jmeter+Badboy安装使用文档 目录 1.jmeter安装 1 2.Jmeter基础使用 3 3. 使用Jmeter进行分布式测试 ...
- JAVA Freemarker + Word 模板 生成 Word 文档 (普通的变量替换,数据的循环,表格数据的循环,以及图片的东替换)
1,最近有个需求,动态生成 Word 文当并供前端下载,网上找了一下,发现基本都是用 word 生成 xml 然后用模板替换变量的方式 1.1,这种方式虽然可行,但是生成的 xml 是在是太乱了,整理 ...
- jQuery文档节点处理,克隆,each循环,动画效果,插件
文档节点处理 //创建一个标签对象 $("<p>") //内部插入 $("").append(content|fn) ----->$(&quo ...
- 【转】循环递归遍历XML文档或按某要求遍历XML文档
<?xml version="1.0" encoding="UTF-8"?> <catalog> <cd> <titl ...
- 循环对XML文档添加Attribute以及移除Element 【转】
如下面的图片要求,需要把左边的xml文改为右边的文档. 需要添加Attribute,移除Element,但是所添加的Attribute值已经跟被移除的Element值不相同.实现方法可以参考<对 ...
- LotusScript_文档查询循环方法整理
1. 视图(View)查询 ... Set view = db.GetView("ViewName") Set doc = view.GetFirstDocument While ...
- 循环对XML文档添加Attribute以及移除Element
如下面的图片要求,需要把左边的xml文改为右边的文档. 需要添加Attribute,移除Element,但是所添加的Attribute值已经跟被移除的Element值不相同.实现方法可以参考<对 ...
随机推荐
- 算法学习笔记(5): 最近公共祖先(LCA)
最近公共祖先(LCA) 目录 最近公共祖先(LCA) 定义 求法 方法一:树上倍增 朴素算法 复杂度分析 方法二:dfs序与ST表 初始化与查询 复杂度分析 方法三:树链剖分 DFS序 性质 重链 重 ...
- 【LeetCode链表#9】图解:两两交换链表节点
两两交换链表中的节点 力扣题目链接(opens new window) 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 思路 ...
- 初探富文本之OT协同实例
初探富文本之OT协同实例 在前边初探富文本之OT协同算法一文中我们探讨了为什么需要协同.为什么仅有原子化的操作并不能实现协同.为什么要有操作变换.如何进行操作变换.什么时候能够应用操作.服务端如何进行 ...
- 异常的产生过程解析-throw关键字
异常的产生过程解析 先运行下面的程序,程序会产生一个数组索引越界异常ArrayIndexOfBoundException.我们通过图解来解析下异常产生的过程. 工具类 throw关键字 在编写程序时, ...
- qt获取子控件坐标
QPoint pos = ui->m_blt->mapToGlobal(QPoint(0, 0)); 就可以了.
- 05安装一个Hadoop分布式集群
安装一个Hadoop分布式集群 最小化的Hadoop已经可以满足学习过程中大部分需求,但是为了研究Hadoop集群运行机制,部署一个类生产的环境还是有必要的.因为集群机器比较少,笔者没有配置ssh,所 ...
- CSS 3 所有的选择器整理(2023.2)
你知道的和你不知道的所有选择器.不包含尚未广泛实现的,也不包含已弃用的. 基本的选择器规则(Selector) 类型(Type)选择器 直接用标签匹配特定的元素 span { ... } p { .. ...
- Spring Cloud 2022.0.1 Spring Cloud Zookeeper4.0
官网: https://spring.io/ 左侧菜单 向下找到 spring Cloud Zookeeper 所有我们希望看到的都在 Reference Doc 中,点击进入 连接zookeeper ...
- el-transfer 数据量过大加载慢卡顿解决办法:el-transfer虚拟滚动懒加载的实现
参考链接 1)https://github.com/GreenHandLittleWhite/blog/issues/152)https://github.com/GreenHandLittleWhi ...
- 3 .NET Core笔试题
1.什么是ASP.NET Core? 2.ASP.NET Core 中AOP的支持有哪些? 3.ASP.NET Core Filter的注册方式有哪些? 4.ASP.NET Core Filter如何 ...