Gatling | HTTPレスポンスヘッダやボディのパラメータをリクエストパラメータに利用する方法(XSRF対策など)
2018/01/28
XSRF対策などが行われているサイトの場合、HTTPレスポンスヘッダやボディ内にあるパラメータを取得しリクエスト時に渡す必要があります。Gatlingでこれを行うための方法を記載します。
サンプルコード
以下にサンプルコードを記載します。①でcheckメソッドを使用してレスポンスヘッダから特定のパラメータを取得して変数に格納します。②で格納した変数の値を次のリクエストのヘッダに付与しています。
class Sample extends Simulation {
...
val scn = scenario("sample")
.exec(
http("request_0")
.get("/sample.html")
.headers(headers_0)
//①. レスポンスヘッダから特定のパラメータを取得し変数に格納する
.check( headerRegex( "Set-Cookie", "XSRF-TOKEN=(.*); Path" ).findAll.saveAs("csrf_token")))
.exec(http("request_8")
.post("/search")
//②. ①で取得した変数の値をヘッダに付与する
.headers(headers_8 + ("X-XSRF-TOKEN" -> "${csrf_token(0)}"))
.body(RawFileBody("sample_request.txt")))
...
}
①レスポンスヘッダからパラメータを取得し変数に格納する
サンプルコードの①のようにcheckメソッドを使用することでヘッダなどから情報を取得することができます。サンプルではレスポンスヘッダの「Set-Cookie」の値から正規表現で「XSRF-TOKEN=(.*); Path」に一致するものを全検索しています。()内の値が「csrf_token」変数に格納されます。
②リクエストヘッダに変数を指定する
サンプルコードの②のように「${csrf_token(0)}」とすれば①で取得したパラメータを指定することができます。配列の0番目を指定しているのはfindAllでn件取得することが前提になっているため、変数が配列になるためです。