Gatling のシナリオをデバッグする

備忘録。

Scala DSL でシナリオを書けるパフォーマンステストツール Gatling を使い始めたが、シナリオをデバッグしたいことがままあるので、そのメモ。

バージョンは3.2。

例えば GET /foo にリクエスト後、そのレスポンスボディを表示するコードは以下のようになる

scenario("Some scenario")
  .exec(http("GET /foo")
    .get("/foo")
    .check(bodyString.saveAs("fooRes")))
  .exec((session: Session) => {
    println(session("fooRes"))
    session
  })

セッション

セッションはあるシナリオの1実行につき1つ付いてくる Key-Value データストア。シナリオ実行において、特定リクエストの結果を元に以降のリクエストを行うなどが主な目的だが、デバッグにも使える。

セッションオブジェクトは Map[String, Any] のような感覚で扱える。セッションオブジェクトは immutable なので set などで値を書き換えた場合、書き換え後のセッションが返ってくることに注意。

check/saveAs

HTTP リクエストに対する check は、ステータスやボディのバリデーションの他に、それらの値を後続のステップで参照するためにセッションに保存する役割がある。bodyStringstatussaveAs によってセッションの指定したキーに保存できる。

exec

exechttp などのリクエスト定義だけでなく Session => Validation[T] な関数を渡すことができる。これによって必要に応じたデバッグコードが仕込める。

上述のサンプルの2つ目の exec では Session を返す無名関数を渡しているが、これは implicit conversion によって Validation[Session] に変換される。