WebAPIのテストに、Postmanを利用しています。Collection Runnerを使って、一連のAPIテストを流すのですが、テスト結果やEnvironmentの設定値によって、特定のAPIをリトライしたり、次のAPIをスキップしたり等、実行順序を動的に変更したくなったので、その方法を調べたメモ。
Collection Runnerの実行順序
通常のCollection Runnerの実行順序は、単純で上から下にシーケンシャルに実行されていきます。
APIをリトライ(繰り返し実行)する
Testsを使って、繰り返し実行ができます。TestsはJavascriptで書きます。この例では、設定しておいたリトライ回数に達するまで15secおきにリトライします。APIのレスポンスが成功した場合は、その時点で次のAPI実行に移ります。
pm.test("matche string TEST", function () {
//initialize
const responseJson = pm.response.json();
var count = pm.collectionVariables.get("retry_counter");
const count_limit = pm.collectionVariables.get("retry_count_limit");
if(responseJson.hoge.match("success") || count>=count_limit){
//clear retry count
pm.collectionVariables.set("retry_counter", 0);
}
else{
//count up
count++;
pm.collectionVariables.set("retry_counter", count);
console.log("リトライします:"+count+"回目");
//retry after 15sec
setTimeout(function(){}, [15000]);
var title = pm.info.requestName;
postman.setNextRequest(title);
}
});
リトライ回数のカウント用変数、リトライの上限回数はCollection Variablesとして設定しておきます。Collection Variablesは、下記で設定できます。
APIをスキップする
リトライと同じような方法で、テスト結果やenvironmentによってAPIをスキップすることができます。Testsの例では、environment variableの値によって次のAPIの実行是非を変えています。
//検証環境では、TEST5までスキップする
var stg_skip = pm.environment.get("stg_flag");
if(stg_skip == 1){
console.log("skip document");
postman.setNextRequest("TEST5")
}
おわりに
実行順序の変更は、API単体で実行した場合は影響がありません。Collection Runnerで実行した場合のみ有効です。Testsのテストをする時は、Collection Runnerで試しましょう。