【问题标题】:Postman Retry logic goes in infinite loop邮递员重试逻辑进入无限循环
【发布时间】:2021-03-23 18:35:59
【问题描述】:

我正在使用邮递员来测试我的 API。

其中一个 API 需要一些时间来处理数据我添加了一个重试逻辑来尝试 3 次以检查端点是否正常工作。

retryCount的初始值是3,是在本次重试之前的少数测试中设置的。

下面是代码:

let retryCount = pm.environment.get('retryCount');
let responseData = pm.response.json();
console.log(responseData.data.events.length);
console.log(retryCount);
if(responseData.data.events.length == 0 && retryCount > 0)
{
    retryCount = retryCount - 1;
    console.log(retryCount);
    pm.environment.set('retryCount',retryCount);
    postman.setNextRequest("GetEvents");
}
else
{
    pm.environment.set('data-response',responseData.data);
}

重试 3 次后它应该停止。但是,它进入了无限循环。之所以出现问题,是因为当下次调用发生时变量始终为 3,它应该减少 1 并最终变为 0。

上面的代码进入无限状态可能是什么原因。

【问题讨论】:

  • 它是否进入了 if 条件?
  • "GetEvents" 是你有脚本的同一个请求?
  • yes GetEvents 与脚本所在的请求相同。
  • 进入 if 条件
  • console.log(重试打印什么?打印是否正确?3、2、1等?你是在某个地方重置值吗?在同一个请求中还是在收集脚本中?跨度>

标签: javascript postman


【解决方案1】:

您可能正在重置集合脚本中的某个位置或集合中其他位置的值。创建一个新变量并尝试,使用以下方法:

pm.variables.get("retryCounter")===undefined ? pm.variables.set('retryCounter',3):null

let responseData = pm.response.json();
console.log(responseData.data.events.length);

retryCount = pm.variables.get("retryCounter");
console.log(retryCount);
if(responseData.data.events.length === 0 && retryCount > 0)
{
    retryCount = retryCount - 1;
    console.log(retryCount);
    pm.variables.set('retryCounter',retryCount)
    //this gives this request name , you don't have to hardcode
    postman.setNextRequest(pm.info.requestName);
}
else
{
    pm.environment.set('data-response',responseData.data);
}

试试这段代码,这里我们使用 pm.variables.set 创建局部变量。由于局部变量的生命周期是整个集合运行,之后它将被销毁,因此对于每个新的集合运行,该值将是未定义的。

如果未定义,我们将其设置为 3。然后发送请求,直到值小于 1。

【讨论】:

  • 感谢您的回答。它确实在某个地方值被重置,现在它完美地工作了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多