電通総研 テックブログ

電通総研が運営する技術ブログ

Azure Load Testing で負荷試験

ISID X(クロス)イノベーション本部 の池田です。
2023年2月にGAした Azure Load Testing で利用する機会がありましたので使い方のご紹介です。

目次

Azure Load Testingとは

Azure Load Testingは、Azureのクラウドインフラストラクチャを使用して、アプリケーションの負荷テストを実行するためのサービスです。使い慣れたJMeterスクリプトで作成したテストシナリオをクラウド上で実行できます。
自分で負荷試験をしようとすると、試験用の端末を複数用意したり、ネットワーク関連のOSパラメータの変更したり考慮すべき点が多いです。また、社内から実行するとファイアウォールで制限されたりネットワーク環境も考慮する必要があります。
Azure Load Testingを利用することで、こうした面倒な環境作成はAzureにお任せして、利用者は負荷テストシナリオ作成と試験結果の分析に注力できます。
azure.microsoft.com

Azure Load Testingの価格

基本的に、仮想ユーザー時間という概念での課金となっています。
JMeterスクリプト内の仮想ユーザー(並列スレッド)数と、テストエンジンインスタンスの数によって算出されます。
仮想ユーザーの合計数 = (JMX ファイル内の仮想ユーザー数) * (テスト エンジン インスタンスの数)
インスタンス数だけでなくJMeterスクリプト内で指定する並列実行数も課金額に影響しますので注意しましょう。
また、テストを実行していなくても少額の課金があります。

Azure Load Testing の価格

試験環境の概要

今回使用するテスト環境の構成は以下のとおりです。App Service 既定のWebサイトをテスト対象としてAzure Load TestingからHTTPリクエストを連続送信します。その上でAzureリソースの負荷状況をAzure Load Testingのダッシュボードで観測します。

Azure Load Testing リソースの作成

以降では実際にテストを作成します。

  1. Azure Portalからリソースを作成します。
    執筆時点で東西日本リージョンではまだ提供されていませんでしたので東アジアリージョンを利用します。

  2. リソースが作成されました。

テストシナリオの作成

Azure Load Testing では「クイックテストを作成する」 および 「JMeterスクリプト のアップロード」の2種類の方法でテストが作成できます。

クイックテストでは、特定のURLに対しシンプルなGETリクエストを繰り返すJMeterスクリプトを作成できます。
しかし、認証を含んだシナリオやPOSTリクエストを含んだシナリオは Azure Load Testing 上で作成できません。様々なケースのシナリオをテストしたい場合には外部でJMeterスクリプトを作成してアップロードする必要があります。
今回のシナリオではクイックテストでも十分ですが、実務を模してスクリプトを取り込む手順でテスト作成します。

  1. JMeterの入手
    スクリプト作成に使用するJMeterはサイトからダウンロードしましょう。Azure Load Testing以外のクラウド負荷試験ツールもJMeterスクリプトを取り込んで実行するツールが多いです。初版が2001年のソフトウェアですがJMeterはまだまだ現役です。
    jmeter.apache.org

  2. スクリプトの作成
    ダウンロードしたJMeterを使ってローカルでテストを作成します。どこか懐かしい気持ちに浸りながらテストを作成します。スレッド数の設定はコストに影響する部分ですので、過剰に大きくしないよう注意しましょう。

負荷テストの実施

  1. JMeterスクリプトのアップロード」を選択しテストを作成します。

  2. まずは、テスト名、説明を入力します。

  3. 先ほど作成したJMeterスクリプトをアップロードします。

  4. スクリプト内で使用するパラメータをこちらで指定できます。
    機密性の高いパラメータはKeyVaultから持ってくることも可能です。

  5. スクリプトを実行するエンジンのインスタンス数を指定します。

  6. テスト抽出条件の設定です。
    テスト抽出条件は、レスポンスタイムやエラー率、スループットしきい値を設定し、しきい値を超えるとテスト不合格となりテスト全体が終了します。
    自動停止テストは、構成エラーによる異常を検知しエンジンを停止する目的で利用します。エラーの割合はエンジン単位で判定されエンジン単位で個別に終了されます。テスト全体としては継続されますので利用方法に注意しましょう。

  7. テスト結果画面でメトリックを表示するインスタンスを選択します。
    インスタンスを選択すると既定で設定されているメトリックが試験結果ダッシュボードに表示されます。ダッシュボードに表示するインスタンスやメトリックはテスト後に追加削除が可能です。

    メジャーどころのAzureリソースはサポートされていますが、執筆時点ではApplication Gatewayがサポートされていませんでした。こちらは今後の追加を期待したいところです。
    参考:サポートされている Azure リソースの種類

  8. 設定した内容でテストを作成します。

負荷テストの実行結果

実行画面に遷移するとダッシュボードで各種状態が確認できます。実行中に試験結果が随時プロットされて表示されます。クライアント側の試験状況 と サーバー側の負荷状況 が一画面で確認でき大変便利です。

  1. クライアント側メトリック
    こちらはクライアント側のメトリック情報になります。
    各エンジンインスタンスから収集した内容を集計した結果が表示されます。

  2. サーバー側メトリック
    Azureリソースの各種メトリックが表示されます。テスト後に表示メトリックを追加することもできます。
    各種メトリックを一覧表示してどこがボトルネックとなっているのか把握できます。
    ただし、項目による分割 や 条件によるフィルタ などの詳細分析はできません。そうした分析は通常のメトリック画面から別途分析しましょう。

  3. エンジン状態
    JMeterスクリプトを実行しているエンジン個別の状態も表示できます。

まとめ

Azure Load Testingは、クラウド上での負荷テストを簡単かつ効果的に行うための強力なツールです。従来の手法に比べて手軽さや柔軟性があり、リアルタイムでの結果の監視も可能です。アプリケーションのパフォーマンスを向上させたい場合や、スケーラビリティの評価を行いたい場合には、Azure Load Testingを検討してみてはいかがでしょうか。

私たちは同じチームで働いてくれる仲間を探しています。クラウドアーキテクトの業務に興味がある方のご応募をお待ちしています。

クラウドアーキテクト

執筆:@ikeda.jun、レビュー:@nakamura.toshihiro
Shodoで執筆されました