2017-04-19 19 views
1

Newmanでは、応答コードが正しいことを確認し、応答時間が合理的で、応答値が正しいことを確認したいと考えています。Postman/Newmanが失敗した場合の再試行

ネットワークの不具合やその他のシステム状態により、要求が数秒後に処理された場合に解決されるタイムアウトや不正確な値で終了することがあります。

このような場合、リクエスト間にYタイムアウトを指定してx回同じリクエストを再試行したいと考えています。

リトライ後に反復パスが発生した場合は、Newmanの終了コードを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"); 
} 

要求のタイムアウトT自体はニューマンCLIで設定することができます:私はこのような機能に終わった数時間後

newman run myCollection.json --timeout-request Y 
関連する問題