jmeter-while控制器

本文详细介绍如何在JMeter中使用While Controller进行循环控制。包括配置While Controller的基本步骤、理解控制面板的各项设置及其应用场景,例如如何实现基于条件的循环、非空判断等高级功能。

转载自:https://blog.youkuaiyun.com/woxinshihaiyang/article/details/85248216
1、添加While Controller

右键线程组->添加->逻辑控制器->响应断言

在这里插入图片描述

2、控制面板介绍

添加后,面板如下

在这里插入图片描述

while controller会一直运行,直到条件(condition)为false
Condition的可能值如下:

  • 为空(不输入任何值)-- 直到某次sample执行失败才会退出循环

  • LAST – 直到最后一个sample请求失败,才会退出循环
    例:
    在这里插入图片描述
    如上,执行第三个,即最后一个sample失败了,才自动退出循环

  • 其他–条件等同于字符串“false”(等同于输入框中输入false)时,退出循环。

  条件可以是最终计算为“ false ”任何变量或函数。这允许根据需要使用jexl3, groovy函数,属性或变量。

 
 
  • 1

使用说明

  • {__jexl3({c}==10)}
  • {__jexl3("{VAR2}" == “abcd”)}

Contion输入框的可以输入最终计算结果等同于“false”的变量、函数。这允许在必要时使用JavaScript, BeanShell, 属性(propertie) 或变量(variable)
例子:

  • ${var_name} - var_name的值由其它元素设置为"false"
  • ${__} - 判断变量var_name的值是否为10,不为10则退出循环
  • KaTeX parse error: Expected group after '_' at position 42: …d group after '_̲' at position 2…{count}<60 && ${code}“5001”)} - 表示同时满足 KaTeX parse error: Expected 'EOF', got '&' at position 6: count&̲lt;60和count&lt;…count<60{code}“5001” 两个条件才进入循环体
  • {__P(property)} - 某处会被设置为"false"的某个属性(property)

3、非空判断
在进行websocket性能时,创建容器需要使用while循环,且前一个接口的ip为空时才会进入while循环,此时while中脚本如下:

  ${__javaScript("${notebookUrl}" == "null",)}

 
 
  • 1

注意:空在这里必须用双引号+null才可以,后面的逗号可加可不加。

JMeter中,可以通过嵌套使用While控制器来实现复杂的逻辑控制While控制器允许在满足特定条件时重复执行其子节点。以下是嵌套使用While控制器的详细说明和示例: --- ### **While控制器嵌套使用示例** 假设需要实现以下逻辑: 1. 外层While控制器在变量`outer_condition`为`true`时执行。 2. 内层While控制器在变量`inner_condition`为`true`时执行。 3. 每次内层循环结束后,更新`inner_condition`,直到其变为`false`。 4. 当内层循环结束后,更新`outer_condition`,直到其变为`false`。 #### **步骤说明** 1. **添加外层While控制器**: - 右键点击线程组 → `Add` → `Logic Controller` → `While Controller`。 - 设置条件为`${outer_condition}`(使用JMeter变量)。 2. **添加内层While控制器**: - 在外层While控制器下,右键 → `Add` → `Logic Controller` → `While Controller`。 - 设置条件为`${inner_condition}`。 3. **添加逻辑更新变量**: - 在内层While控制器下添加Sampler(如HTTP请求)和BeanShell PostProcessor(或JSR223 PostProcessor)来更新变量。 - 示例BeanShell代码: ```java // 内层循环逻辑 if (some_condition) { vars.put("inner_condition", "false"); // 退出内层循环 } // 外层循环逻辑(可在内层循环结束后更新) if (another_condition) { vars.put("outer_condition", "false"); // 退出外层循环 } ``` 4. **初始化变量**: - 在线程组开始前,通过`BeanShell PreProcessor`或`User Defined Variables`初始化变量: ```java vars.put("outer_condition", "true"); vars.put("inner_condition", "true"); ``` --- ### **注意事项** 1. **变量作用域**: - 确保变量通过`vars.put()`更新,且在While条件中正确引用(如`${var}`)。 2. **避免无限循环**: - 必须在某个Sampler或PostProcessor中更新条件变量,否则会导致死循环。 3. **性能影响**: - 嵌套循环会增加测试复杂度,需合理设计退出条件。 --- ### **示例结构** ``` Test Plan └── Thread Group ├── BeanShell PreProcessor (初始化变量) └── While Controller (outer_condition) ├── While Controller (inner_condition) │ ├── HTTP Request │ └── BeanShell PostProcessor (更新inner_condition) └── BeanShell PostProcessor (更新outer_condition) ``` --- ### **调试技巧** - 使用`Debug Sampler`和`View Results Tree`监听器检查变量值。 - 在PostProcessor中添加日志输出: ```java log.info("outer_condition: " + vars.get("outer_condition")); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值