Power Appsモデル駆動型アプリのパフォーマンステストをどのように行うのかを検討した際に、オープンソースの負荷テストツールであるJMeterについて調査する機会がありました。
本記事では、JMeterを使用したモデル駆動型アプリのパフォーマンス計測方法について、紹介していきたいと思います。
概要
JMeterはApacheソフトウェア財団が開発しているオープンソースの負荷テストツールで、Javaで作成されています。サーバーに指定した量のリクエストを送信し、そのレスポンスからパフォーマンスを計測することができます。
Power Appsのようなパッケージ製品は負荷テストツールが少ないですが、JMeterはMicrosoftも推奨しているテストツールになります。
特徴
JMeterの特徴として、以下の3つがあげられます。
- オープンソースのため誰でも無料で使用することができます。
- ブラウザの動作を記録することができ、GUIベースでテストケースの作成が可能です。
- スレッド数の指定ができるため、テスターの人数を削減することができます。
JMeterの利用準備
それでは、JMeterの利用準備に移っていきます。
※JMeterはJavaで作成されているツールのため、事前にPCにJava8以上をインストールする必要があります。
1. ApacheのホームページからJMeterをダウンロードします。
https://jmeter.apache.org/download_jmeter.cgi
2. ダウンロードしたzipファイルを解凍し、/apache-jmeter/bin/jApacheJMeter.jar をクリックしJMeterを起動します。
3. 今回はMicrosoftが公開しているサンプルを元に準備をしていきます。
下記のURLから「CreateCase.jmx」をダウンロードします。
4. JMeter画面に戻り、メニューバーからファイル>開く>手順3でダウンロードしたファイルを選択すると、下記の画面が表示されます。
ブラウザの動作記録によるテストシナリオの作成
JMeterでパフォーマンステストを実施する際、パフォーマンステストに沿ったHTTPリクエストを作成する必要があります。
HTTPリクエストを手動で作成するには一定以上のスキルとコストを必要としますが、JMeterではブラウザの動作記録機能を使用してHTTPリクエストを作成することができます。
※今回はモデル駆動型アプリのログイン部分の記録はMicrosoftのサンプルをそのまま使用するため省略します。
1. 記録コントローラを追加します。
ブラウザで記録したリクエストは全て記録コントローラに自動で追加されます。
2. HTTPプロキシサーバを追加します。
HTTPプロキシサーバを追加することで、JMeterが一時的にプロキシサーバの役割を果たしブラウザでの動作を自動的に記録コントローラへ追加していきます。
3. HTTP プロキシサーバを開き、「対象となる記録コントローラ」で先ほど追加した記録コントローラを選択します。
4. HTTP プロキシサーバの開始ボタンを押下します。
開始ボタンを押下すると下記の画面が表示されbinファイルに自己証明書が発行されます。
5. PCの証明書マネージャを開き、「信頼されたルート証明機関」へ自己証明書をインポートします。
※証明書の有効期限は7日間です。有効期限が切れた場合、HTTPプロキシサーバの開始ボタン押下時に自動で再発行されるので再度インポートする必要があります。
6. PCの設定を開きネットワークとインターネット>プロキシ>手動プロキシセットアップから下記の設定値でプロキシサーバをオンにします。
※ポートはJMeterのプロキシサーバの設定値と同じ値にする必要があります。
7. ブラウザで記録したい動作を実行します。今回は新規ボタンから取引先企業を1レコード作成します。
8. JMeterの停止ボタンを押下します。
9. プロキシサーバーをオフにします。
10. 動作が記録され記録コントローラにHTTPリクエストが作成されていることを確認します。
パフォーマンステストの実行
今回は3ユーザーが10レコードずつ取引先企業のレコードを作成するケースを実施します。
※テスト実行時、モデル駆動型アプリへのログイン時の認証には事前にMicrosoft Entra ID上にアプリケーション登録とAPIのアクセス許可の設定を追加しておく必要があります。こちらについては下記URLを参考にしてください。
1. 今回のテストでは取引先企業のレコードを作成する部分のみ行うため、サンプル内の不要箇所は 右クリック>無効 で全て無効化します。
2. 今回想定するユーザー数は3ユーザーのため、スレッド数に「3」を指定します。
3. ユーザー名、パスワード、作成する取引先企業の企業名をCSVファイルに定義し、任意のディレクトリに配置します。
4. CSVファイル配置後、CSV Data Set Configの[FileName]のディレクトリと[Variable Names]を修正します。
※ [Variable Names]にカンマ区切りで入力した値が変数となりCSVファイルのユーザー名、パスワード、企業名が代入されます。
5. トランザクションコントローラを追加して記録コントローラの中のリクエストを全て追加し、ログイン処理の後に配置します。また、トランザクションコントローラの名前を分かりやすいように取引先企業作成に変更します。
※ テスト結果確認時に各リクエストに加え、トランザクションコントローラ単位でも実行時間等を確認することができます。
6. 1ユーザーあたり10レコードの取引先企業を作成するためループコントローラを追加してループ回数を「10」に設定します。また、取引先企業作成のコントローラをループコントローラの中へ移動します。
7. ループコントローラ内に下記の設定値でカウンタを追加します。カウンタは各スレッドやループごとに指定した数をインクリメントしていき一意の値を持つことができます。
今回はカウンタを使用して「account1-1,account1-2...」のように連番で取引先企業を作成します。
8. 記録したHTTPリクエストで[取引先企業名]に該当する箇所を手順4で定義した変数と手順7で定義したカウンタに 置き換えます。
9. User Defined Variables(ユーザー定義変数)を修正します。
- host:テスト対象のDataverse環境のURL(プロトコル部分は不要)
- tenantId:テスト対象のテナントID
- cshAppId:テスト対象のモデル駆動型アプリのGUID
10. Auth Controller内のリクエストのclient_idを修正します。
※ client_id:Microsoft Entra ID上に作成したアプリのクライアントIDです
11. コマンドプロンプトを開き、JMeterのbinファイルのディレクトリに移動します。
※ JMeterではこれまでのキャプチャで紹介してきたGUI上からもテストを実行できますが、GUIの描画などが影響し正しいテスト結果が得られないことがあるため、CLIでの実行が推奨されています。
12. コマンドプロンプトからテスト開始のコマンドを実行します。
※コマンドオプションについては下記URLを参考にしてください。
https://jmeter.apache.org/usermanual/get-started.html#non_gui
コマンド例:jmeter -n -t C:\techblog-jmeter\CreateCase.jmx -l C:\techblog-jmeter\testresults.csv
13. テストが完了したことを確認します。また、指定したディレクトリにtestresults.csvが作成されていることを確認します。
14. モデル駆動型アプリを開きレコードが作成されていることを確認できました。
テスト結果の確認
テスト実行後に作成されたCSVファイルをJMeter上に読み込ませることで様々な形式で結果を確認することができます。今回はリクエスト/レスポンス内容とテストの実行時間について確認してみます。
1. リスナーから「結果をツリーで表示」、「結果を表で表示」を追加します。
2. 「結果をツリーで表示」を選択し、ファイル名の参照ボタンからテスト結果のCSVファイルを選択します。
3. 各リクエストの内容やレスポンスの内容などが確認できます。
4. 「結果を表で表示」も同様にファイル名の参照ボタンからテスト結果のCSVファイルを選択します。
5. 各リクエストごとのSample Time(リクエスト送信からレスポンスを受け終わるまでの時間(ms))を確認することができます。
まとめ
- JMeterとはオープンソースのパフォーマンステストツールです。
- 画面操作の記録やGUIベースでテストケースを作成できるため、プログラム知識が無くても使用することができます。
以上、本記事ではJMeterを使用して、Power Appsモデル駆動型アプリのパフォーマンステストについて確認してみました。