2017-04-19 39 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