2017-04-19 34 views
1

的情况下,在纽曼我想测试,以确保响应代码是正确的重试,响应时间是合理的,并且响应值是否正确。邮差/纽曼失败

在某些情况下,由于网络打嗝或一些其他系统的条件下,一些请求可能最终超时,或者如果相同的请求,后来处理了几秒钟,这将解决不正确的值。

在这种情况下我想与请求之间的ý超时重试相同的请求的x倍。

如果迭代传递重试后,我想纽曼退出代码为0(成功运行)。

回答

2

几个小时后,我曾与这样的函数已结束:

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); 
+0

耶,可重复使用的功能是这可能是更好的解决方案。这是艰难的工作来获取与邮差/纽曼一些优雅的重试逻辑。我希望很快实现可重复使用的全球脚本。 –

1

您可以设置这样的请求,工作流程:

一个请求,然后创建一个集合:

在预先请求选项卡,你可以实现一个计数器:

// 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"); 
} 

请求超时吨本身可以与纽曼CLI配置:

newman run myCollection.json --timeout-request Y