はじめに
この記事は 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のレコーディング機能を利用して性能テストのシナリオを作成する方法を紹介します。
-
公式サイトからJMeterをダウンロードする
- 任意の場所に圧縮ファイルを展開する
-
bin/jmeter.bat
を実行する - File -> Open ->
bin/templates/recording.jmx
を開く
- 左のツリーの
HTTP(S) Test Script Recoder
を選択する
-
Start
ボタンを押下する -
HTTP Sampler settings
に設定値をセットしてSet counter
を押下する -
bin/ApacheJMeterTemporaryRootCA.crt
を信頼されたルート証明機関としてインストールする
- Windowsの設定 -> ネットワークとインターネット -> プロキシで手動プロキシを設定して保存する
- 性能テストのシナリオ相当の操作をブラウザ上で実行する
-
Stop
ボタンを押下する
- 左のツリーの
Recording Controller
配下に作成されたHTTP Request
を確認する - 性能テスト実施時には不要な
HTTP Request
を削除する - 左のツリーの
Thread Group
を選択する -
Thread Propeties
に設定値をセットする - 左のツリーの
Thread Group
を右クリック -> Add -> Timer -> Constant Throughput Timerを追加する
- 左のツリーの
Constant Throughput Timer
を選択する -
Constant Throughput Timer
に設定値をセットする - File -> Save Test Plan as -> 任意の名前を付けたjmxファイルを保存する
Azure Load Testingの使い方
JMeterで作成したjmxファイルを使って、Azure Load Testingから性能テストを実施するページに対して負荷をかける方法を紹介します。
-
Azure Load Testingサービスのリソースを作成する
-
作成したAzure Load Testingのリソース上でテストを作成する
- Basics
-
テスト名
: 任意のテスト名を入力 -
テストの説明
: 任意のテストの説明を入力 -
作成後にテストを実行する
: チェックを入れておく
-
- テスト計画
-
ファイルの選択
: JMeterの利用で作成した jmxファイル をアップロードする
-
- パラメータ(必要に応じて任意のパラメータを設定)
- 読み込み
-
エンジン インスタンス
: 掛けたい負荷によって任意のインスタンス数を設定 -
テスト トラフィック モードの構成
: 公開用を選択(※ 接続元IPアドレス等による制限をかけている場合は非公開
を選択する必要有)
-
- テスト抽出条件
-
自動停止テスト
: 有効化を選択 -
エラーの割合
: 任意の値を入力(デフォルト90) -
時間枠(秒)
: 任意の値を入力(デフォルト60)
-
- 監視(必要に応じて設定)
- 確認および作成(設定したパラメータを確認したうえで作成を実行)
- Basics
-
-
読み込み
: 総リクエスト数 -
期間
: 負荷がかかっていた時間 -
応答時間
: レスポンスにかかった時間(90パーセンタイル) -
エラーの割合
: レスポンスが正常でなかった割合 -
スループット
: 1秒に処理したリクエスト数
等をグラフを交えて確認できます
-
おわりに
JMeterとAzure Load Testingを使用した性能テストの紹介をしました。
実際にサービスをリリースする前に性能テストを通過しておくことで、非機能要件として定めていた項目が達成されているかを確認できます。
また、達成できていなかった場合にはサービスを構成するリソースも合わせて確認することでボトルネックとなっている箇所を特定し、その後の改善に繋げられます。
記載されている会社名、製品名、サービス名は、各社の商標または登録商標です。
画面等、記載の内容は2023/12時点のものとなります。