1.前言
对于性能测试场景中,需要用”执行某个事物,直到一个条件停止“的概念时,While控制器控制器无疑是首选,但是在编写脚本时,经常会出现推出循环异常,获取参数异常等问题,下面总结两种常用的写法
2.${flag}直接引用判断
1.在预处理器中定义一个flag
或者在用户定义的变量中定义
def flag = true
vars.putObject("flag",flag)
log.error("JSR223 预处理程序 flag: " + flag )
2.创建While控制器
3.使用示例触发退出循环
使用”计数器“来实现每次迭代 num_ber+1
在 num_ber > 9 时,将 flag 置为 false
log.info("Elapsed Time1: ms:" + vars.getObject("flag"))
int num_ber = (vars.getObject("test_num")).toInteger()
if (num_ber > 9){vars.putObject("flag", false)}log.info("Elapsed Time1: ms:" + vars.getObject("flag") + " num " + num_ber)
4. 运行示例
在num_ber = 10时,while循环结束
3.使用函数判断条件
这里推荐使用 ${__groovy(,)} 来作为函数载体
首先groovy语法与JSR223 中一致,便于理解和学习
其次在很多资料中显示
- ${__jexl3(${C}==10)}
- ${__javaScript(${C}==10)}
这两种写法存在兼容性bug,经常导致判断失败或异常报错
使用groovy:
${__groovy(vars.getObject("flag1") < 10,)}
${__groovy("vars.get("flag1")" < "10",)}
1.同上,使用预处理器,定义flag
int flag1 = 0
vars.putObject("flag1",flag1)
log.error("JSR223 预处理程序 flag1: " + flag1 )
2.设置while
3.设置退出条件
log.info("Elapsed Time1: ms:" + vars.getObject("flag1"))
int num = (vars.getObject("test_num")).toInteger()vars.putObject("flag1",num)
log.info("Elapsed Time1: ms:" + vars.getObject("flag1") + " num " + num)
4.结果展示
在num_ber = 10时,while循环结束