LoginSignup
2
3

More than 3 years have passed since last update.

Gatlingのシナリオ作成のTips

Last updated at Posted at 2020-07-13

はじめに

負荷試験ツールとしてGatlingを検証してまして、シナリオを作る時に使用したtipsをシェアします。
今後Gatlingを使う方の参考になれば幸いです。

シナリオで使う変数を共通変数化する

負荷試験のシナリオを複数作成していると、試験先URLなどは共通変数化したくなってきます。
(URL変更するのに全シナリオファイルを書き換えるのは手間なので)
今回はScalaのtrait(トレイト)機能を使用して実装しました。

まず共通変数を管理するファイルを用意します。
以下の例ではhttpBaseUrlという変数にURLの値を定義しています。

config.scala
trait Config {
  val httpBaseUrl = "https://hogehoge.com"
  :
}

次に各シナリオファイルですが、シナリオを定義する時にtraitも読み込むようにwith <trait名>を追加します。
URLを定義する箇所には、先ほど定義したhttpBaseUrlを入力します。

BasicSimulation.scala
class BasicSimulation extends Simulation with Config {
    val httpProtocol = http  // 共通のhttps設定
      .baseUrl(httpBaseUrl)  // ベースURLを設定
      .disableAutoReferer    // refererを指定した値のみとするため
    :
}

負荷パターンの設定を変数化する

先ほど共通変数化したファイルに負荷パターンも定義してみたいと思います。

先に各シナリオファイルの記載を見ていきます。
Gatlingではscn.injectで負荷パターンを指定します。
今回はconstantConcurrentUsersという、指定した並列数でアクセスし続ける負荷パターンを使用しています。

以下の例では、負荷パターンの並列数・実行時間の部分をそれぞれexecUserexecDurationと定義します。

BasicSimulation.scala
    scn.inject(
      constantConcurrentUsers(execUser) during(execDuration)
    )

共通変数ファイルには以下のように記載します。

ポイントはduring部分の変数を定義する時にFiniteDurationで変換をするということです。
またFiniteDurationを使用するためにimport scala.concurrent.duration._が必要です。
以下の例では、10並列で5分間(300秒)実行するように定義しています。

config.scala
import scala.concurrent.duration._

trait Config {
  :
  val execUser        = 10
  val execDuration    = FiniteDuration(300, SECONDS)
  :
}

1から順にカウントアップするfeederを設定する

GatlingにはfeederというCSVファイルを読み込んで変数を定義することができます。
シナリオで1から順にカウントアップしていくような変数を使いたい場合、feederとfor文を組み合わせて使用する方法があります。

BasicSimulation.scala
val feeder_ichiman = (for (i <- 1 until 10000 ) yield {Map ("number" -> i )})
:
.feed(feeder_ichiman.circular)

今回の例ではは.circularを使用しているので1から順にカウントアップしますが、
.randomを使用すれば1〜10000の中でランダムに数値を与える事もできます。

まとめ

Gatlingはインストールしてからテストを実施するまで非常に簡単に実行できる素晴らしいツールですので、
自分の実施したい負荷試験に合わせて、シナリオを定義できる様になっていきたいです。
(...そして、そんな方々の手助けになったら嬉しいです。)

参考

2
3
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
2
3