While控制器
存在一些使用场景,比如:某个请求必须等待上一个请求正确响应后才能开始执行。或者,不断去请求某个接口的响应结果,当它达到某个状态时才开始后续请求。
注意:本文说明均以示例中的接口为依据。
一、[While控制器]的理解
可以类比C++中的do-while循环。
do…while 循环会确保至少执行一次循环。如果条件为真,控制流会跳转回上面的 do,然后重新执行循环中的 statement(s)。这个过程会不断重复,直到给定条件变为假为止。
do{
statement(s);
}while(condition);
二、[While控制器]的示例
以简单的登录场景示例。假设:
某登录接口,其登录成功后的响应消息体如下:
{
"data": {
"access_token": "2ssas3dc6e2da",
"user_id": "12333",
"nickname": "jmeter",
"token_type": "bearer",
"username": "jmeter"
},
"message": "操作成功",
"status": 1000,
"timestamp": 1653398856152
}
其登录失败后的响应消息体如下:
{
"data": null,
"message": "用户被禁用或不存在",
"status": 1033,
"timestamp": 1653399781867
}
则可模拟场景:如果登录请求未返回预期的状态码,则一直请求登录接口,直至登录成功。
三、[While控制器]的使用
1.添加控制器
在线程组或相关控制器中,选择“逻辑控制器-While控制器”进行添加。
2.在While控制器中添加请求
根据使用场景,在While控制器中添加相关请求。(本示例:登录接口)
注意:While控制器中的请求将至少执行1次。
使用JSON提取器从请求响应中提取目标参数,并设置为变量。(本示例:status)
3.设置循环条件
设置While控制器的循环条件。当条件满足时,将继续执行该循环控制器的请求。条件不满足时,则跳出循环。(本示例:判断status的值)
可在While控制器的条件框中填写:
//当状态码不等于1000时,则继续请求登录
${__javaScript("${status}" != 1000)}
运行效果
条件一次即为假时,接口请求一次即结束循环;
条件为真时,将持续循环,直至条件为假时,跳出循环。