LoginSignup
34
38

More than 5 years have passed since last update.

PostmanのPre-request ScriptとTestsが便利

Last updated at Posted at 2019-02-15

流れ

  • 何をしたかったか
  • どんな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
スクリーンショット 2019-02-15 23.50.11.png

モーダルを閉じて、右上の⚙の左側の No Environment から先程追加したEnvironment Nameを指定(私の場合localhost)

indexリクエストの作成

+からタブを開いて、以下のように入力すれば、今回のAPIアプリのindexを叩けます。
環境変数で指定した値は、{{url}}のように引用することができます。
index
右側の青いSendをクリックすると、実際にGETリクエストが送られ、indexのレスポンスが得られるかと思います。
index send

createリクエストの作成

タブを開いて左側のプルダウンリストでPOSTを選択
→ Bodyをひらいて、rawにして、右側のドロップダウンリストからJSON(application/json)を選択
→ 適当に値を指定してSendを押せばPOST完了
post

このようにして、他のupdate, destroy, show のメソッドを呼び出すAPIリクエストも作成可能です。

Pre-request scriptを使ってのpost

Pre-request Scriptでbodyの生成

Pre-request Scriptを以下のように設定し、
Bodyを{{request_body}}として、Sendしてみてください。

pre-request.js
var alpha = 1
var beta = 2
var body = {
  "alpha": alpha,
  "beta": beta
}
pm.environment.set("request_body", JSON.stringify(body))

prs bd

リクエストが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をクリック

スクリーンショット 2019-02-16 0.45.01.png

これで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活用術ありましたらぜひお教えください。
ここまでお読みいただきありがとうございました。

34
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
38