LoginSignup
8
3

JMeterとAzure Load Testingでお手軽性能テスト

Last updated at Posted at 2023-12-22

はじめに

この記事は NTTコムウェア AdventCalendar 2023 23日目の記事です。

NTTコムウェア2020年入社社員の辻です。
入社当初は海外パッケージ製品を利用したサービス開発に従事しておりましたが、現在はキャリアデザインを促進するアプリケーションの開発に従事しております。

業務で実際に性能テストを実施する機会があったため、備忘録を兼ねて利用したツール等をまとめておきます。
この記事では、JMeterとAzure Load Testingを使用した性能テストの実施方法について記載していきます。
初めて性能テストを行うといった方の参考になれば幸いです。

実行環境

この記事では下記の実行環境を前提として記載を行っています。

  • OS: Windows Server 2019 Datacenter
  • バージョン: 1809
  • JavaVersionString: 1.8.0_391
  • JMeterVersion: 5.6.2

性能試験とは

性能テストとは、機器やソフトウェア、システムのテスト(試験)の一種で、要件を満たす性能が出るかどうかを確かめるもの。実際と同じように動かしてみるテストであるため、ほとんどの場合は開発の最終段階に近い工程で実施される。

上述の通り、性能テストとは非機能要件として定めている性能に関する項目が実際に満たされているのかを確認するテストとなります。
そのため、事前に非機能要件を定めている必要がありますが、本記事では割愛します。
参考までに、IPAから出されている非機能要求グレードのページを紹介しておきます。

また、性能テストの計画から実施と実施後のチューニングなどの流れについて知るには下記の記事がとても参考になったため紹介しておきます。

Jmeterとは

The Apache JMeter™ application is open source software, a 100% pure Java application designed to load test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to other test functions.

公式ページでも記載されているように、JMeterはJavaのみで構成された性能テストを実行できるアプリケーションです。
GUIでのテストシナリオの設計やテスト結果の視覚化などの機能が具備されており、初めての方でも直感的に使用できるアプリケーションです。

Azure Load Testingとは

Azure Load Testing は、大規模な負荷を生成できるフル マネージドのロード テスト サービスです。 サービスは、アプリケーションがどこにホストされているかにかかわらず、そのトラフィックをシミュレートします。 開発者、テスト担当者、品質保証 (QA) エンジニアは、それを使って、アプリケーションのパフォーマンス、スケーラビリティ、または容量を最適化できます。

公式ページでも記載されているように、Azure Load TestingはAzureで利用できるフルマネージドのサービスです。
手元で複数台のクライアントを用意したり、性能テストの実行時にクライアント側のネットワークがボトルネックとなったりすることを気にせずに利用できる点がメリットとして挙げられます。

JMeterの使い方

JMeterのレコーディング機能を利用して性能テストのシナリオを作成する方法を紹介します。

  1. 公式サイトからJMeterをダウンロードする
    jmeter_download.png
  2. 任意の場所に圧縮ファイルを展開する
  3. bin/jmeter.batを実行する
  4. File -> Open -> bin/templates/recording.jmxを開く
    image.png
  5. 左のツリーのHTTP(S) Test Script Recoderを選択する
    image.png
  6. Startボタンを押下する
  7. HTTP Sampler settingsに設定値をセットしてSet counterを押下する
    1. Transaction name: 任意の値(ページ名などを指定すると後から加工しやすい)
    2. Naming scheme: Prefix
    3. counter start value: 任意の値(カウンターのスタート値)
      image.png
  8. bin/ApacheJMeterTemporaryRootCA.crtを信頼されたルート証明機関としてインストールする
    image.png
  9. Windowsの設定 -> ネットワークとインターネット -> プロキシで手動プロキシを設定して保存する
    image.png
  10. 性能テストのシナリオ相当の操作をブラウザ上で実行する
  11. Stopボタンを押下する
    image.png
  12. 左のツリーのRecording Controller配下に作成されたHTTP Requestを確認する
  13. 性能テスト実施時には不要なHTTP Requestを削除する
  14. 左のツリーのThread Groupを選択する
  15. Thread Propetiesに設定値をセットする
    1. Number of Threads(users): 任意の値(同時に実行したいスレッド数を指定する)
    2. Ramp-up period(seconds): 任意の値(すべてのスレッドが立ち上がるまでに使用する秒数を指定する)
    3. Loop Count: Infinite(今回は任意の秒数負荷をかけるために無限ループを指定する)
    4. Specify Thread lifetime: チェックを入れる(各スレッドの寿命を指定するためのフラグを有効にする)
    5. Duration(seconds):任意の値(負荷をかけ続けたい秒数を指定する)
      image.png
  16. 左のツリーのThread Groupを右クリック -> Add -> Timer -> Constant Throughput Timerを追加する
    image.png
  17. 左のツリーのConstant Throughput Timerを選択する
  18. Constant Throughput Timerに設定値をセットする
    1. Target throughput(in samples per minute): 任意の値(1分間に達成されるべきスループット)
    2. Calculate Throughput based on: all active threads in current thread group (shared)(スループットの計算ベースにする範囲を指定する)
      image.png
  19. File -> Save Test Plan as -> 任意の名前を付けたjmxファイルを保存する

Azure Load Testingの使い方

JMeterで作成したjmxファイルを使って、Azure Load Testingから性能テストを実施するページに対して負荷をかける方法を紹介します。

  1. Azure Load Testingサービスのリソースを作成する

    1. 基本
      azureloadtesting.png
      1. プロジェクトの詳細
        1. サブスクリプション: 任意のサブスクリプションIDを選択
        2. リソースグループ: 任意のリソースグループを選択
      2. インスタンスの詳細
        1. 名前: 任意の名前を入力
        2. リージョン: 任意のリージョンを選択
    2. Encryption
      image.png
      1. 暗号化の種類: 任意の暗号化方式を選択
    3. タグ(必要に応じて任意のタグを登録)
    4. 確認および作成(設定したパラメータを確認したうえで作成を実行)
      image.png
  2. 作成したAzure Load Testingのリソース上でテストを作成する
    azureloadtesting_create_test.png

    1. Basics
      image.png
      1. テスト名: 任意のテスト名を入力
      2. テストの説明: 任意のテストの説明を入力
      3. 作成後にテストを実行する: チェックを入れておく
    2. テスト計画
      image.png
      1. ファイルの選択: JMeterの利用で作成した jmxファイル をアップロードする
    3. パラメータ(必要に応じて任意のパラメータを設定)
      image.png
    4. 読み込み
      image.png
      1. エンジン インスタンス: 掛けたい負荷によって任意のインスタンス数を設定
      2. テスト トラフィック モードの構成: 公開用を選択(※ 接続元IPアドレス等による制限をかけている場合は 非公開 を選択する必要有)
    5. テスト抽出条件
      image.png
      1. 自動停止テスト: 有効化を選択
      2. エラーの割合: 任意の値を入力(デフォルト90)
      3. 時間枠(秒): 任意の値を入力(デフォルト60)
    6. 監視(必要に応じて設定)
      image.png
    7. 確認および作成(設定したパラメータを確認したうえで作成を実行)
  3. Azure Load Testingの実行結果の確認
    azureloadtesting_result.png

    1. 読み込み: 総リクエスト数
    2. 期間: 負荷がかかっていた時間
    3. 応答時間: レスポンスにかかった時間(90パーセンタイル)
    4. エラーの割合: レスポンスが正常でなかった割合
    5. スループット: 1秒に処理したリクエスト数
      等をグラフを交えて確認できます

おわりに

JMeterとAzure Load Testingを使用した性能テストの紹介をしました。
実際にサービスをリリースする前に性能テストを通過しておくことで、非機能要件として定めていた項目が達成されているかを確認できます。
また、達成できていなかった場合にはサービスを構成するリソースも合わせて確認することでボトルネックとなっている箇所を特定し、その後の改善に繋げられます。

記載されている会社名、製品名、サービス名は、各社の商標または登録商標です。
画面等、記載の内容は2023/12時点のものとなります。

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