Gatling Tips(負荷テストシナリオを自動で作成する方法)

前回は、GatlingのシナリオをIDE(IntelliJ IDEA)で作成して、実行する環境のセットアップを解説しました。

今回は、より実践的な「Gatlingを使って負荷テストを行うときのTis」をご紹介します。

Recorderを使って、新しいシナリオを作る方法-その① HTTP Proxy

GatlingにはRecorderというツールがあり、ブラウザでの一連の動きを記録して、スクリプトに変換することができます。

どのように記録して、変換を行うかは2つの方法がありますが、最初に「HTTP Proxy」を使った方法の解説です。

まずは、GatlingRecorderを起動します。

MavenProjectsのPlugins->gatling->gatling:recorderを右クリックして、「Run Maven Build」を起動すると、下記のようにRecorderが起動します。

gatling:recorderをキック

GatlingRecorderが起動

Recorderが起動しましたが、開始前に少し設定を確認してみましょう。

Recorder mode・・・右上にあるモードではHTTP Proxyを選択します。

Network・・・これが、Gatlingのプロキシー・サーバのポートです。このポート番号でサーバが起動し、ブラウザのproxy設定をこのサーバ(localhost:指定しているポート番号)にすることで、このサーバを通ったリクエストが記録されます。

Simulation Information・・・記録した後、Scalaのクラスを生成しますが、そのパッケージとクラス名を設定します。デフォルトでは、「io.gatling」というパッケージになっていますので、Package&ClassNameの部分を、自分の好きなパッケージ名とクラス名に変更した方が良いです。(パッケージがio.gatlingのままだと、クラス生成時にsymbolが見つからないエラーになってしまいます。)

設定を確認したら、右下の「Start!」ボタンを押すと、プロキシー・サーバが起動し、待ち受けを開始します。

後は、お好みのブラウザで、URLにアクセスしたり、サイトを閲覧するなどの回遊を行えば、記録されますが、ブラウザの設定は、待ち受けているプロキシー・サーバを経由するように、設定を変更しておかなければいけません。

Windowsだと、インターネット・オプションで、プロキシー・サーバ(localhost:8000)を使用するように設定しておきます。

Recorderを使って、新しいシナリオを作る方法-その② HAR Converter

シナリオを生成するもうひとつの方法は、「HAR Converter」を使います。

HARファイル形式というのをご存知ですか?HTTP Archive形式とも呼ばれ、一連のHttpセッションを保存しておくことが出来ます。

GatlingRecorderは、このHARファイルを読み込んで、スクリプトに変換し、Scalaクラスを生成することが出来ます。

Basic認証のあるページなど、その①で紹介したHTTP Proxy形式だとうまくいかないケースもありますし、ブラウザのプロキシー設定を変更する手間も必要ないことから、私はもっぱらこの方法を使っています。

HARファイルの保存方法

HARファイルは、ほとんどの一般的なブラウザで保存することができます。

ここでは、Chromeを例に、解説したいと思います。

Chromeで、その他のツール->ディベロッパーツール を開くと、以下のようなツール画面が開きます。

この画面の「Network」タブに行くと、Httpセッションを確認することができます。

通常は、画面遷移するたびに画面の履歴がクリアされますが、画面上部の「Preserve log」にチェックを入れておくと、チェックを入れてから後のシーケンスはそのままになっています。

一通り画面遷移が終わったら、画面中央で右クリックして「Save as HAR with content」を選択すると、HAR形式のファイルとして保存できます。

保存したHARファイルをGatling Recorderで読み込んでクラスを生成してみましょう。

その①と同様にRecorderを起動したら、右上のモードを「HAR COnverter」に設定します。

すると、HARファイルを指定できるようになりますので「Browse」ボタンを押してHARファイルを指定します。

それが終わったら、右下の「Start!」ボタンを押すと、HARファイルの解析とScalaクラスの生成が行われます。

パッケージ名とクラス名のところは、その①でも記載したように、io.gatlingから変更しておくことをお勧めします。