Azure Load Testingを更に調べてみた
はじめに
そろそろAI周りを試してみようとしているのですが、なかなかうまくいかず、一旦Load Testingの続きの話をさせてください。。
テスト準備
まずは前回と同様、テスト準備を行っていきたいと思いますが、一応Load Testingを作るところから再度進めていきます。
まず、Azureポータルの画面上部の検索窓に「Azure Load Tesing」と入力すると、以下の様にAzure Load Testingが出てくると思いますのでそれをクリックします。

そうしますとAzureに携わっている方であれば見慣れているであろうリソースの作成画面になりますので必要事項を入力していきます。Azureのリソースによってはリージョンを他のリソースと一緒にしないと正しく動作しないといった注意事項がある場合もありますが、Load Testingに関してはそういったことは気にしなくても大丈夫です。

あとは今回のテストでは複数のWebサイトに対して同時に負荷をかけたいと思いますので、WebAppを2つ用意しておきます。これで一旦準備は完了です。

テスト作成
では、次にテストを作成したいと思います。
前回のテストではAzureポータルでどのサイト(URL)に対して負荷をかけるかを設定してテストを行いましたが、今回はJMeterで使われるスクリプト、jmxファイルを使ってテストを行いたいと思います。
今までJMeterを使ったことがある方であればjmxファイルが利用できるというのは非常に助かるのではないでしょうか。
jmxファイルは無いが、今回を契機に試してみたい、使ったみたいという方は以下にサンプルがあるのでダウンロードしてみてください。
あくまでサンプルなのでいくらかスクリプトの内容を変更する必要があるのですが、今回はそれについては割愛させてください。
先ほど作成したLoad Tesingに移動し、左側のメニューで「テスト」を選択します。
そして、画面上の「作成」プルダウンを押して、「JMeterスクリプトのアップロード」を選択します。

まずはテスト名やテストの説明を入力して「次へ」ボタンを押します。テストの説明は入力しなくても問題ありません。テスト名もかなり長い名前が入力できますのでプログラムの変数のように説明を兼ねた名前にしておけば他の方にとっても助かると思います。

次に「テスト計画」タブに移りますのでここでjmxファイルをアップロードします。
スクリプトの内容によっては設定ファイルとして他のファイルを読み込む場合もあるかと思いますが、その場合もこの画面で一緒にアップロードしておきます。

一通りテストの設定が終わりましたら、作成を行います。
以下のように「スクリプトを検証しています」といったメッセージが表示され、問題無ければテストが実行されます。もしくは手動でテストを実行します。
※テスト作成時、最初の画面で「作成後にテストを実行する」チェックボックスがあるのでそこにチェックを入れておくと作成してすぐにテストが実行されます
テスト結果も以下のように(ちょっとわかりづらいですが)各サーバーのメトリクスをLoad Testingの画面で同時に表示することができます。1台に対する負荷であればそのWebサーバーのメトリクス画面に遷移すれば良いのでメリットとしてはひと手間減る程度だったのですが、このように複数台表示できると非常に助かると思います。

詳細設定によるAzureポータルでのテスト作成
前回の記事ではAzureポータル上でテストを作成し、その時はURLが1つしか入力できませんでした。
では、今回のような複数サーバーを対象としたテストはjmxスクリプトを作成しないとできないのかというとそうではありません。
jmxファイルほどではありませんが、ある程度複雑なテストもAzureポータルで作成が可能です。
前回にさかのぼって説明しますと、例えば1つのサーバーに対しての負荷であれば以下のテスト作成画面で「テストURL」にテスト対象のURLを入力すればOKでした。

ただ、今回のように複数のサーバー、正確にはURLが複数ある場合はこれではテストできません。そこで「テストURL」の上の項目、「詳細設定を有効にする」チェックボックスにチェックを入れてみましょう(下のスクリーンショット参照)。すると以下に表示されているように詳細な設定は「テスト計画」タブで。。とありますので「テスト計画」タブに遷移します。

「テスト計画」タブで「要求の追加」リンクを押すと右側に「要求の追加」ウィンドウが表示されます。ここでURLだけでなく、HTTPメソッド、クエリパラメータ等、先ほどの内容よりもより詳細というか細かい指定が可能となります。要求は1つだけでなく複数設定が可能なので今回のような複数のサーバーに対してであれば要求を複数作成すれば対応可能となります。

JMeterではベーシック認証も対応できたりするので同じレベルのテスト内容をAzureポータルで行えるかというと若干難しい雰囲気なのですが、この設定画面を見る限りAzureポータル上だけでもかなり色々できるのではないかと思います。
jmxファイルの検証
先ほどのjmxファイルを利用したテストにおいて、jmxファイルをアップロードし、テストを実行するまでに「jmxファイルを検証しています」といった表示が出ていました。この「検証」がどこまで検証してくれるのか、ちょっと疑問に思ったので試してみました。
まず、以下のようなjmxファイルがあります。
最初の赤枠の中でテスト対象のURLが含まれたCSV、「websites.csv」ファイルを読み込むように記述しており、2番目の赤枠${Url}にCSVファイル内のURLが設定されます。

そこで、通常はCSVファイルも一緒にアップロードするのですが、試しにCSVファイルをアップロードせずにテストを実行してみます。
すると。。以下のように状態がFailedとなり、テストが終了します。

ちょっと見づらいですが、上の画面上に「(詳細表示)」のリンクがあるのでそれをクリックすると以下のような詳細内容が表示され、「websites.csvファイルが無い」と指摘してくれます。

ただ、先ほどのwebsites.csv、以下のような記述になっており「URL」の内容がjmxファイル内で使用されることになるのですが、ここでURLの項目をごっそり削除した場合、つまりCustomerIdとNameだけの状態にした場合はテストとしては正常終了してしまいました(しかもサーバーに負荷がかからず、何も行われないまま終了)。

この2パターンしか試していないので何とも言えませんが、そこまで詳細なチェックはしてくれないように思われますので注意が必要です。
jmxファイルのエクスポート
Load Testingでは自身がAzureポータルで作成したテストをjmxファイルに変換することも可能です。
自分が作ったテストを選択すると以下のような画面になるので、右端の3点リーダーをクリックし、赤枠の「入力ファイルのダウンロード」を選択します。

すると圧縮ファイルがダウンロードできるので、それを解凍すると以下のようなファイルが展開されます。
この中のjmxファイルを最初に書いた手順のようにアップロードすれば他の環境のLoad Testingでも同じ内容をテストすることができます。

最後に
前回の記事と合わせてLoad Testingで最低限紹介した方が良さそうな内容について説明しました。
jmxファイルを利用できることで今までJMeterを使っていたユーザーに対してもとっつきやすくなりますし、逆にJMeterを触ったことがない方にもAzureポータルで簡単にテストが作成できます。
負荷テストのハードルをかなり下げてくれるツールだと思うのですが、いかがでしょうか?
これから負荷テストを行う機会がある方は是非試してみてください。