私はPostmanでAPIをテストしていますが、問題があります。私のリクエストが一種のミドルウェアに送られるため、完全な1000行以上のJSONを受け取るか、PENDING
ステータスと空の結果の配列を受け取ります。
{
"meta": {
"status": "PENDING",
"missing_connectors_count": 0,
"xxx_type": "INTERNATIONAL"
},
"results": []
}
問題は、ステータスSUCCESS
と結果array > 0
が表示されるまで、この要求をPostmanでループする方法です。これらのリクエストを1つずつ手動で送信する場合は問題ありませんが、Collection Runnerを介して実行する場合は、「PENDING」がすべてを混乱させます。
サービスの準備が整うのを待つとき、または長時間実行されるジョブの結果をポーリングするとき、4つの基本的なオプションが表示されます。
https://postman-echo.com/delay/10
_を使用します。最後のURI要素は待機する秒数です。これはシンプルで簡潔であり、長時間実行されているリクエストの後に単一のステップとして挿入できます。課題は、リクエストの期間が大幅に異なる場合、十分に待機しなかったために誤ったエラーが発生する可能性があることです。postman.setNextRequest(request.name);
。ここでの課題は、Postmanがリクエストをできる限り速く実行して、サービスをDDoSし、ブラックリストに登録し(そして誤った失敗を引き起こし)、一般的なビルドサーバーで実行すると大量のCPUを消費する-他の処理が遅くなることです。ビルド。注:これらにはマイナーなバリエーションがあります-コレクション、コレクションフォルダー、ステップなどでの設定など。
オプション4は、ほとんどの場合に適切なレベルの細分性を提供するため、気に入っています。これがPostmanスクリプトで「スリープ」する唯一の方法であるように見えることに注意してください。現在、Promise with async and awaitなどの標準のjavascriptスリープメソッドはサポートされておらず、サンドボックスのlodash _.delay(function() {}, delay, args[...])
を使用しても、事前リクエストスクリプトでのスクリプト実行は維持されません。
Postmanスタンドアロンアプリv6.0.10で、ステップ事前リクエストスクリプトを次のように設定します。
_console.log('Waiting for job completion in step "' + request.name + '"');
// Construct our request URL from environment variables
var url = request['url'].replace('{{Host}}', postman.getEnvironmentVariable('Host'));
var retryDelay = 1000;
var retryLimit = 3;
function isProcessingComplete(retryCount) {
pm.sendRequest(url, function (err, response) {
if(err) {
// hmmm. Should I keep trying or fail this run? Just log it for now.
console.log(err);
} else {
// I could also check for response.json().results.length > 0, but that
// would omit SUCCESS with empty results which may be valid
if(response.json().meta.status !== 'SUCCESS') {
if (retryCount < retryLimit) {
console.log('Job is still PENDING. Retrying in ' + retryDelay + 'ms');
setTimeout(function() {
isProcessingComplete(++retryCount);
}, retryDelay);
} else {
console.log('Retry limit reached, giving up.');
postman.setNextRequest(null);
}
}
}
});
}
isProcessingComplete(1);
_
また、同じ手順で標準テストを実行できます。
注:retryLimitを大きくすると、標準の警告が適用されます。
これを試して:
var body = JSON.parse(responseBody);
if (body.meta.status !== "SUCCESS" && body.results.length === 0){
postman.setNextRequest("This_same_request_title");
} else {
postman.setNextRequest("Next_request_title");
/* you can also try postman.setNextRequest(null); */
}
私はあなたの質問を読んでいるときに、同じ質問への答えを探していて、可能な解決策を考えていました。 postmanワークフローを使用して、探している応答が得られない場合は常に要求を再実行します。とにかく、それを試してみるつもりです。
postman.setNextRequest("request_name");