流れ
- 何をしたかったか
- どんなAPIアプリを立てたか
- Postmanの基本的なリクエストの作り方(環境変数の設定)
- Pre-request scriptを使ってのpost
- Testsを Post-request scriptとして使ってみる
何をしたかったか
単純なAPIの機能のテストならば、RSpecなどを用いても良いのですが、
今回は、
Postmanを使いテスト環境へテストしたい各種リクエストを送り、"現在の状態値"を調べ、その後にPostmanのRunnerでテスト用データを作成。
現在の状態値 + 仕様通りに動作した場合のテスト用データ追加による増減値
から機能のテストを行いたく、Postmanの機能を利用しました。
どんなAPIアプリを立てたか
内容はこちらになります. https://github.com/k-karen/api_test_190215
一応routeだけ記します。(よくあるベーシックなエンドポイントだと思います)
なおapi_test_trashでcreateされるレコードは、
alphaとbetaという属性値を持っています。
Rails.application.routes.draw do
namespace 'api' do
namespace 'v1' do
resources :api_test_trash
end
end
end
Postmanの基本的なリクエストの作り方(環境変数の設定)
ダウンロードしていない方はこちらから→ https://www.getpostman.com/downloads/
環境の作成・環境変数の設定
ダウンロードしたPostmanを立ち上げて、右上の⚙(Sign Inの下)をクリックしてください
Add > Nameを適当に設定 >
VARIABLE urlというキーでお使いのAPIのルートを入力 > Add
モーダルを閉じて、右上の⚙の左側の No Environment
から先程追加したEnvironment Nameを指定(私の場合localhost
)
indexリクエストの作成
+
からタブを開いて、以下のように入力すれば、今回のAPIアプリのindexを叩けます。
環境変数で指定した値は、{{url}}
のように引用することができます。
右側の青いSendをクリックすると、実際にGETリクエストが送られ、indexのレスポンスが得られるかと思います。
createリクエストの作成
タブを開いて左側のプルダウンリストでPOST
を選択
→ Bodyをひらいて、rawにして、右側のドロップダウンリストからJSON(application/json)を選択
→ 適当に値を指定してSendを押せばPOST完了
このようにして、他のupdate, destroy, show のメソッドを呼び出すAPIリクエストも作成可能です。
Pre-request scriptを使ってのpost
Pre-request Scriptでbodyの生成
Pre-request Scriptを以下のように設定し、
Bodyを{{request_body}}
として、Sendしてみてください。
var alpha = 1
var beta = 2
var body = {
"alpha": alpha,
"beta": beta
}
pm.environment.set("request_body", JSON.stringify(body))
リクエストがPre-request Scriptで指定した値から生成できることがわかります。
ループ用カウンタの設定
環境変数にurl
を設定したときのように、
今度はcounter
を設定し、その値を0として下さい。
そして、pre-request scriptを以下のように設定し、
Sendを6回押してみてください。
var alpha = [1,2,3,4,5,6]
var beta = [10,20,30,40,50,60]
var counter = Number(pm.environment.get("counter"))
var body = {
"alpha": alpha[counter],
"beta": beta[counter]
}
pm.environment.set("request_body", JSON.stringify(body))
pm.environment.set("counter", counter + 1)
配列の値をもとに、6種の異なるレコードが作成できたかと思います。
ただ、6回押すのは面倒なので、Runnerの紹介をします
Runnerでループさせる
まず、先程設定したcounter
を0に設定し直してください。
左上のNewからCollectionを作成、作成したpre-script入りのPostリクエストを、
今作ったcollectionへ保存してください。
左側のサイドバーから、作ったcollectionを選択、青いRunボタンからRunnerを立ち上げます
(※collection単位でRunnerがループするので、Postリクエストだけのcollectionを作ってください)
Runnerが立ち上がったら、Iterationsを6,delayを適当につけてRun testをクリック
これで6回クリックしなくても、6回POSTリクエストが送られたかと思います。
Testsを Post-request scriptとして使ってみる
紛らわしいですがこのPost-はrequestのあとに走るscriptという意味で私が勝手にそう呼んでます。
Testsは各リクエストの間に、レスポンスが正しいかどうかなどをチェックするためのスクリプトを記述する項目ですが、ここでも環境変数へのセットなどが行えるため、
実質的にPost-request scriptとしても使うことができます。
Runnerでのresponseから欲しい情報だけを抜き取って記録する
実際にTestsを利用し、Runnerで作ったデータのidを記録します。
環境変数にid
を設定してください。
Pre-reqest Script の隣りにあるTestsに
var jsonData = pm.response.json()
var current_ids = pm.environment.get("id")
pm.environment.set("id",current_ids+','+jsonData["data"]["id"])
と入力し、もう一度先ほどと同じようにRunnerを回します。
(ただし、今回は Keep variable vlues
にチェックを入れてください。
Runnerを回したあと、id
を確認すると、Runnerで作成されたレコードのidがカンマ区切りで入っているかと思います。おめでとうございます。
最後に
3ヶ月ほどPostmanを使っていたのですが、つい最近scriptの存在に気づきました。
Pre-,Post-(本当はTest)のscriptと、
それぞれのリクエスト間を跨いで変数を持ち越せる環境変数を利用すると、
Postmanを使ってテストデータの作成をしたりするのが楽しくなってきますね。
collection単位でRunnerは回るので、
create→show→update→show→destroy→show
という一連の流れをテスト化出来ます。
皆さんのPostman活用術ありましたらぜひお教えください。
ここまでお読みいただきありがとうございました。