在Newman中,我要进行测试以确保响应代码正确,响应时间合理并且响应值正确。
在某些情况下,由于网络故障或某些其他系统状况,某些请求可能会以超时或不正确的值结束,如果在几秒钟后处理了相同的请求,这些值将得到解决。
在这种情况下,我想重试相同的请求x次,两次请求之间的Y超时。
如果重试后经过一次迭代,我希望Newman退出代码为0(成功运行)。
小智 7
您可以像这样设置请求工作流程:
使用请求创建一个集合,然后:
在预请求选项卡中,您可以实现一个计数器:
// Counter for number of requests
var counter = environment.counter ? _.parseInt(environment.counter) + 1 : 1;
postman.setEnvironmentVariable("counter", counter);
您的测试选项卡如下所示:
const code = (responseCode.code === 200);
if (code === 200 && environment.counter < X) {
    // Stop execution
    tests["Status code is 200"] = code;
    postman.setNextRequest();
}
else {
    // retry the same request
    postman.setNextRequest("Name of this request");
}
可以使用 newman CLI 配置请求本身的超时:
newman run myCollection.json --timeout-request Y
几个小时后,我以这样的函数结束了:
function retryOnFailure(successCode, numberOfRetrys) {
    var key = request.name + '_counter';
    var execCounter = postman.getEnvironmentVariable(key) || 1;
    var sleepDuration = 1000;
    var waitUntilTime = new Date().getTime() + sleepDuration;
    if (responseCode.code !== successCode && execCounter <= numberOfRetrys) {
        while (new Date().getTime() < waitUntilTime) {
            // Do Nothing -> Wait
        }
        console.log('Retrying: ' + request.name + '\nGot: ' + responseCode.code + ' Expected: ' + successCode + '\nWaited: ' + sleepDuration / 1000 + 'sec  \nRetry Number: ' + execCounter + ' of ' + numberOfRetrys);
        execCounter++;
        postman.setEnvironmentVariable(key, execCounter);
        postman.setNextRequest(request.name);
    }
}
用法:
retryOnFailure(404, 4);
| 归档时间: | 
 | 
| 查看次数: | 4065 次 | 
| 最近记录: |