Gatling テスト

このトピックでは,Controller シナリオで Gatling 負荷テスト・スクリプトを使用する方法について説明します。

Gatling テストの概要

Gatling は,テスト・スクリプトの作成に Scala プログラミング言語を使用する,オープン・ソースの負荷テストおよびパフォーマンス・テスト・ツールです。Gatling は,Web サーバと Web アプリケーションのパフォーマンスを分析,測定するために使用されます。

LoadRunner Professional シナリオでは,拡張子が .scala.jar の Gatling スクリプトがサポートされています。1 つまたは複数の Gatling スクリプトを,シナリオ内の他の LoadRunner Professional プロトコル・スクリプトとともに実行できます。

Gatling スクリプトには,次の 2 つの重要な特徴があります。

  • すべての Gatling スクリプト・ファイルには,スクリプト・コード内に,必要なすべての実行設定が含まれています。
  • Gatling スクリプトには,一連の HTTP 要求と一時停止が含まれています。各要求と各要求グループはトランザクションとして報告されます。

LoadRunner Professional では,Gatling スクリプトでの設定を無視して,実行中の仮想ユーザの数とランプアップ設定を Controller 経由で操作できます。Gatling 仮想ユーザの設定は,他のプロトコル・タイプの仮想ユーザの設定と同じ方法で行います。

測定値は,Gatling テストのデータ・ポイントを使用して,オンラインおよびオフラインで表示できます(Controller および Analysis 経由)。

先頭に戻る

Gatling テストのための必須のセットアップ

Gatling スクリプトでシナリオを作成する前に,次の点に注意してください。

  • Gatling スクリプトは,Windows または Linux オペレーティング・システム上の Load Generator で実行できます。Windows と Linux の Docker インストールでも,Gatling スクリプトがサポートされています。
  • LoadRunner Professional インストールには,埋め込み版の Gatling が含まれています。他のインストールや設定は不要です。(サポートされているバージョンについては,「サポート・マトリックス」 を参照してください。)

  • Load Generator マシンに 32 ビット版または 64 ビット版の JDK 8,JDK 11 または JDK 17 がインストールされていることを確認してください。
  • Linux Load Generator の場合は,Gatling の .jar ファイルを実行するために,マシンに unzip がインストールされていることを確認してください。

ヒント: Gatling テストスクリプトの実行には,専用の Load Generator マシンを使用することをお勧めします。Controller のローカルホストの Load Generator でテストを実行すると,テストが不安定になる場合があります。

データ・ファイル

Gatling スクリプトは,パラメータ値が含まれるデータ・ファイルなどを参照できます。これらのファイルは,.csv,.ssv,.tsv,.json,.xml など,いくつかの形式があります。

Gatling スクリプトがデータ・ファイルを参照する場合は,次のことを確認してください。

  • .scala または .jar ファイルと同じフォルダにある(サブフォルダではない)。
  • Gatling スクリプトがファイルを正しく参照している。

Controller はこれらのファイルを見つけて,実行のために Load Generator に送ります。

先頭に戻る

Controller シナリオの Gatling スクリプト

Gatling スクリプトは,Load Generator マシン上で別のプロセスとしてトリガされます。

注: ネットワーク仮想化は,Gatling テストに対してサポートされていません。

Gatling シナリオを定義するには,次の手順を実行します。

  1. 前述のように,Load Generator マシンが Gatling テストを実行するようにセットアップされていることを確認します。
  2. Controller のメイン・ツールバーで,[新規シナリオ]ボタン をクリックします。
  3. [新規シナリオ]ダイアログ・ボックスで,[スクリプトの追加]をクリックします。[スクリプト タイプ]ドロップダウンから,[Gatlingスクリプト]を選択します。
  4. 参照]をクリックして,Gatling スクリプト(.scala ファイル)または Gatling アーカイブ(.jar ファイル)を選択します。
  5. [新規シナリオ]ダイアログ・ボックスで[OK]をクリックします。[デザイン]タブで,Gatling スクリプトを含むシナリオが開きます。
  6. スクリプトで実行する仮想ユーザの数を設定します。
  7. 必要に応じて,スクリプトの実行環境設定を構成します。

    • カスタム JRE パスを指定します。

    • JVM の動作をカスタマイズします。

    • .jar スクリプトを使用している場合,またはシナリオに複数のシミュレーションが含まれている場合は,シミュレーション・クラスを指定します。

    • 反復の間隔を設定します。

    実行環境設定 UI を開き,関連する設定を構成します。

    1. Gatling]設定セクションで,カスタム JRE パスや[追加パラメータ]セクションのストリングを指定します。例: -Xms512m

    2. 拡張子が .jar のスクリプトを使用している場合や,シナリオに複数のシミュレーションが含まれている場合は,シミュレーション・クラスを指定する必要があります。

      クラス名]フィールドで,実行するクラスのフルネームを指定します。これを空のままにすると,スクリプトの実行に失敗します。シミュレーションに複数の Gatling シナリオがある場合,Controller は最初のシナリオを実行します。

    3. ペーシング]セクションで,間隔の詳細を指定します。詳細については,Virtual User Generator ヘルプセンター(該当するバージョンを選択)の「反復と実行論理」に関するドキュメントを参照してください。

  8. 他の LoadRunner プロトコルの場合と同じようにスケジュールを指定します。詳細については,「シナリオのスケジュールを定義する」を参照してください。inject や maxDuration など,Gatling スクリプトのシミュレーション設定にあるスケジュール関連の定義はすべて無視されます。

  9. [実行]タブで,[シナリオの開始]ボタンをクリックしてシナリオの実行を開始します。
  10. シナリオの実行中に仮想ユーザを追加するには,[仮想ユーザの実行/停止]をクリックして数を変更します。

先頭に戻る

Gatling スクリプトの例

次の例は,2 つのトランザクションを生成する 2 つの要求があるシナリオを示しています。

注: inject や maxDuration など,スクリプトのシミュレーション設定にあるスケジュール関連の定義はすべて無視されます。代わりに,「シナリオのスケジュールを定義する」の説明に従って Controller スケジュールを使用します。

import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._

class LRDemoSimulation extends Simulation {

  val httpProtocol = http
    .baseURL("http://www.bing.com") // これは,すべての相対 URL のルートです
    .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") // これは,一般的なヘッダです
    .doNotTrackHeader("1")
    .acceptLanguageHeader("en-US,en;q=0.5")
    .acceptEncodingHeader("gzip, deflate")
    .userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0")

  val scn = scenario("Scenario Name") // シナリオは要求と一時停止の連鎖です
    .exec(http("request_1")
      .get("/"))
    .pause(1)
    .exec(http("request_2")
      .get("/search?q=Gatling"))
    .pause(2)    
  
  setUp(scn.inject(rampUsers(5) over (30 seconds)).protocols(httpProtocol)).maxDuration(2 minutes)
}

先頭に戻る

Gatling テスト結果の表示

Gatling スクリプトでは,連続した HTTP 要求をグループ化して 1 つのトランザクションとしてマークし,トランザクション名を定義することができます。要求をグループ化しない場合,各 HTTP 要求がトランザクションとしてレポートされます。

Gatling スクリプトが生成する結果は,次の標準的な Controller グラフに表示されます。

グラフ
詳細については,次を参照してください。
実行中の仮想ユーザ 「実行時グラフの概要」
トランザクション応答時間 「トランザクション・モニタ・グラフの概要」
秒ごとの合計トランザクション数(成功)
秒ごとのトランザクション(成功)
秒ごとの HTTP 応答数 「Web リソース・モニタ」
秒ごとのヒット数
スループット - 負荷テスト全体

先頭に戻る

Gatling テストの既知の問題

Gatling テストには次のような既知の問題があります。

  • SLA トランザクション名がリストされません。
  • Gatling 3 の構文はサポートされていません。サポートされているのはバージョン 2.17 のスクリプトのみです。他のバージョンで作成されたスクリプトを適用するには,keywords など,いくつかのパラメータを調整しなければならない場合があります。詳細については,Gatling のドキュメントの『Migration Guides』を参照してください。
  • 拡張子が .scala のスクリプトを実行する場合は,コンパイル時間(約 20 ~ 30 秒)が実行継続時間に含まれます。そのため,仮想ユーザが実際に実行される時間は,指定した継続時間より短くなります。
  • Gatling スクリプトを特定の期間実行すると,最後の反復が完了する前にシナリオが停止する場合があります。

  • Gatling は,以前のバージョンの Gatling とバイナリ互換性がない可能性があります。以前のバージョンでコンパイルされた Gatling .jar スクリプトは再コンパイルする必要があります。

先頭に戻る

関連項目: