はじめに
負荷試験ツールとしてGatlingを検証してまして、シナリオを作る時に使用したtipsをシェアします。
今後Gatlingを使う方の参考になれば幸いです。
シナリオで使う変数を共通変数化する
負荷試験のシナリオを複数作成していると、試験先URLなどは共通変数化したくなってきます。
(URL変更するのに全シナリオファイルを書き換えるのは手間なので)
今回はScalaのtrait(トレイト)機能を使用して実装しました。
まず共通変数を管理するファイルを用意します。
以下の例ではhttpBaseUrlという変数にURLの値を定義しています。
trait Config {
val httpBaseUrl = "https://hogehoge.com"
:
}
次に各シナリオファイルですが、シナリオを定義する時にtraitも読み込むようにwith <trait名>
を追加します。
URLを定義する箇所には、先ほど定義したhttpBaseUrl
を入力します。
class BasicSimulation extends Simulation with Config {
val httpProtocol = http // 共通のhttps設定
.baseUrl(httpBaseUrl) // ベースURLを設定
.disableAutoReferer // refererを指定した値のみとするため
:
}
負荷パターンの設定を変数化する
先ほど共通変数化したファイルに負荷パターンも定義してみたいと思います。
先に各シナリオファイルの記載を見ていきます。
Gatlingではscn.inject
で負荷パターンを指定します。
今回はconstantConcurrentUsers
という、指定した並列数でアクセスし続ける負荷パターンを使用しています。
以下の例では、負荷パターンの並列数・実行時間の部分をそれぞれexecUser
・execDuration
と定義します。
scn.inject(
constantConcurrentUsers(execUser) during(execDuration)
)
共通変数ファイルには以下のように記載します。
ポイントはduring部分の変数を定義する時にFiniteDurationで変換をするということです。
またFiniteDurationを使用するためにimport scala.concurrent.duration._
が必要です。
以下の例では、10並列で5分間(300秒)実行するように定義しています。
import scala.concurrent.duration._
trait Config {
:
val execUser = 10
val execDuration = FiniteDuration(300, SECONDS)
:
}
1から順にカウントアップするfeederを設定する
GatlingにはfeederというCSVファイルを読み込んで変数を定義することができます。
シナリオで1から順にカウントアップしていくような変数を使いたい場合、feederとfor文を組み合わせて使用する方法があります。
val feeder_ichiman = (for (i <- 1 until 10000 ) yield {Map ("number" -> i )})
:
.feed(feeder_ichiman.circular)
今回の例ではは.circular
を使用しているので1から順にカウントアップしますが、
.random
を使用すれば1〜10000の中でランダムに数値を与える事もできます。
まとめ
Gatlingはインストールしてからテストを実施するまで非常に簡単に実行できる素晴らしいツールですので、
自分の実施したい負荷試験に合わせて、シナリオを定義できる様になっていきたいです。
(...そして、そんな方々の手助けになったら嬉しいです。)
参考
- Gatling公式サイト