runnは、各ステップで得た結果をHTTPレスポンスに限らずデータベースへのクエリ結果やコマンドの標準出力/標準エラーなども全て自動的に保持します。
何も設定せずとも実行したステップの結果を使用できます。
例えば、まず最初のWeb APIにHTTPリクエストを送信して、そのレスポンスの値を使って次のAPIにHTTPリクエストを送信できます。
上記の例を具体的にランブックで表現してみましょう。
desc: ログインしてプロジェクト一覧を取得する
runners:
req: https://example.com/api/v1
vars:
username: ${USERNAME}
password: ${PASSWORD}
steps:
-
desc: 'ステップ0. username/passwordでログインをする'
req:
/login:
post:
body:
application/json:
email: "{{ vars.username }}"
password: "{{ vars.password }}"
test: current.res.status == 200
-
desc: 'ステップ1. /loginのレスポンスで受け取った認証トークンを使ってログイン状態でプロジェクト一覧を取得する'
req:
/projects:
get:
headers:
Authorization: "token {{ previous.res.body.session_token }}"
body: null
test: len(current.res.body.projects) > 0
このランブックには2つのステップがあります。
ステップ0では、 vars:
セクションであらかじめ設定した vars.username
、vars.password
を使って POST /login
のHTTPリクエストを送信しています。
ステップ1では、ステップ0のレスポンスで受け取った認証トークン(previous.res.body.session_token
)をヘッダに付与して GET /projects
のHTTPリクエストを送信しています。
ランブックをみると、特に各ステップの結果を保持する設定はありません。このように何も設定しなくてもステップの結果を使用できます。
保持されたステップの結果を使用する方法
保持されたステップの結果を使用する方法は大きく2つあります。
steps[*]
steps.<key>
1. ステップのインデックス番号やステップのキーを指定して使用する方法 まずは直接ステップを指定する方法です。
ステップをリスト形式で記述している場合は、ステップのインデックス番号を指定してそのステップの結果を使用できます。
steps:
-
desc: 'ステップ0. username/passwordでログインをする'
req:
/login:
post:
body:
application/json:
email: "{{ vars.username }}"
password: "{{ vars.password }}"
test: steps[0].res.status == 200
-
desc: 'ステップ1. /loginのレスポンスで受け取った認証トークンを使ってログイン状態でプロジェクト一覧を取得する'
req:
/projects:
get:
headers:
Authorization: "token {{ steps[0].res.body.session_token }}"
body: null
test: len(steps[1].res.body.projects) > 0
リスト形式のステップのインデックスは0から始まりますので注意してください。
ステップをマップ形式で記述している場合は、ステップのキーを指定してそのステップのレスポンスを使用できます。
steps:
login:
desc: 'ステップ0. username/passwordでログインをする'
req:
/login:
post:
body:
application/json:
email: "{{ vars.username }}"
password: "{{ vars.password }}"
test: steps.login.res.status == 200
listProjects:
desc: 'ステップ1. /loginのレスポンスで受け取った認証トークンを使ってログイン状態でプロジェクト一覧を取得する'
req:
/projects:
get:
headers:
Authorization: "token {{ steps.login.res.body.session_token }}"
body: null
test: len(steps.listProjects.res.body.projects) > 0
current
previous
2. ステップの前後関係を指定して使用する方法 ステップを直接指定するよりも直感的な方法として、前後関係を指定して使用する方法を用意しています。
1つ前のステップを指定する場合は previous
で指定できます。
また、Test runnerやDump runnerなど、他のランナーと同じステップで実行できるランナーの場合、「現在ステップ」を示す current
で指定できます。
steps:
-
desc: 'ステップ0. username/passwordでログインをする'
req:
/login:
post:
body:
application/json:
email: "{{ vars.username }}"
password: "{{ vars.password }}"
test: current.res.status == 200
-
desc: 'ステップ1. /loginのレスポンスで受け取った認証トークンを使ってログイン状態でプロジェクト一覧を取得する'
req:
/projects:
get:
headers:
Authorization: "token {{ previous.res.body.session_token }}"
body: null
test: len(current.res.body.projects) > 0
各ランナーがどのような構造で結果を保持するかはREADMEを確認してください。