はじめに
Pegaのアプリケーションで負荷テストをしたい、データを一括で登録したいといったケースで、JMeterを使いたいということが考えられます。Pegaのドキュメント でもパフォーマンステストにJMeterやLoadRunnerが紹介されています。
とはいえ、Pega Platform上で動作しているアプリケーションに対してうまくJMeter使えるのかな?ということで実際に試してみました。
JMeterとは
JMeter とは、WebアプリケーションやAPIなどのパフォーマンステストや負荷テストを行うための、Apacheソフトウェア財団が提供する無料のオープンソースツールです。サーバーに対して多数の仮想ユーザーからのリクエストを送信し、応答時間やスループットを測定することで、システムがどれだけの負荷に耐えられるかを検証します。GUIベースで設定でき、HTTPだけでなくSOAP/REST、FTP、データベースなど様々なプロトコルに対応しているのが特徴です。
主な特徴
- オープンソースで無料: Apache Software Foundation (ASGF)によって開発されており、誰でも無料で利用できます。
- GUIベースで扱いやすい: GUIでテストケースを設計できるため、プログラミングの知識がなくても操作が可能です。
- 多様なプロトコルに対応: HTTP/HTTPSだけでなく、SOAP/REST、FTP、データベースなど様々なサービスの負荷テストが可能です。
- 高度な機能: 実際のユーザーの動きに近いテストシナリオ(ログイン、検索、カート投入など)を、ループや条件分岐を組み合わせて作成できます。
- テストの自動化: 作成したテストはファイルとして保存でき、CI/CDパイプラインに組み込んで自動化することも可能です。
- クロスプラットフォーム: Javaで開発されているため、様々なオペレーティングシステムで動作します。
- 拡張性: プラグインアーキテクチャにより、機能を拡張するためのカスタムプラグインを作成することもできます。
多くの開発で使われているものの、初心者にはとっつきにくいかもしれません。テスト計画を作ってみるとなかなか苦労することがあります。一度テスト計画を作っても、継続してメンテナンスしていく手間をかける必要があります。
試してみる
テスト計画を作成して、実行してみます。Pegaアプリケーション(Constellation UI)をテストできました。
お試しは、Pega Academyの、System Architect -> Low-Code App Builder -> Sending emails during Case processing のコースで使うインスタンスを使ってみます。インスタンスを起動してからJMeterを試します。
説明
お試しテスト計画を簡単に説明します。
肝は、CSRF(クロスサイトリクエストフォージェリ)のトークンと、etag(楽観ロックで使用するケースの最終更新時刻)をHTTPリクエスト時に渡してあげることかと思います。その他は、ブラウザーで実行した時のリクエスト内容を再現してあげることです。
- ユーザー定義変数
共通で使うため、以下の変数を設定する- ホスト名
- 基本パス
- url
- ログインユーザー
- ログインパスワード
- HTTP リクエスト初期値設定
- HTTPリクエストするホスト名を共通で設定する
- HTTP クッキーマネージャ
- クッキーを使うため
- HTTP リクエスト - 初期表示
- ホスト名と基本パスを指定して、初期画面(ログイン画面)を表示する
- Boundary Extractor - url取得
- リダイレクトされた初期画面(ログイン画面)のurlを取得する
- JSR223 Sampler - path取得
- リダイレクトされた画面(最初はログイン画面)のpath(urlのドメイン以降)を取得する
- HTTP リクエスト - ログイン
- 変数のユーザー、パスワードを用いてログインする
- 正規表現抽出 - CSRFToken取得
- ログイン後のCSRFTokenを取得する
- (後処理はHTTP リクエストのたびに実行され、bodyに含まれていればCSRFTokenが更新される)
- HTTP リクエスト - Dev Studio/Case Types
- Dev Studio画面に遷移する(次にPortalを開くため)
- HTTP リクエスト - Portal
- Portal画面を表示する
- 正規表現抽出 - jwtToken
- クッキーのPega-AATにはJWT Tokenが設定されている。JWT Tokenを取得する
- (後処理はHTTP リクエストのたびに実行され、JWT Tokenが更新される)
- JSR223 PostProcessor
- JWT Tokenをデコードして、設定されているCSRFTokenを取得する
- (後処理はHTTP リクエストのたびに実行され、CSRFTokenが更新される)
- HTTP ヘッダマネージャ
- 共通で用いるヘッダー情報を設定する
- 正規表現抽出 - etag
- ヘッダーに含まれるetagを取得する。etagはデータの最終更新日時。etagの日時を楽観ロックに使用する。
- (後処理はHTTP リクエストのたびに実行され、etagが更新される)
- HTTP リクエスト - Create ServiceRequest
- ServiceRequestケースを作成する。レスポンスには作成、更新などのapi情報が含まれる。
- 正規表現抽出 - caseid
- ServiceRequestのレスポンスに含まれる次のアクションを示すurlを取得する。
- HTTP リクエスト - RequesttypeList
- 画面で入力する修理のタイプリストを取得する。
- JSON Extractor
- 例では1番目のGUIDを選択する。
- HTTP リクエスト - Create ServiceRequest ReportProblem
- ReportProblem情報を登録する。
- HTTP ヘッダマネージャ
- ヘッダーのIf-Matchに前のetagの値をセットする。(楽観ロック)
- HTTP リクエスト - Create ServiceRequest IdentifyLocation
- IdentifyLocation情報を登録する。
- HTTP ヘッダマネージャ
- ヘッダーのIf-Matchに前のetagの値をセットする。(楽観ロック)
- HTTP リクエスト - Create ServiceRequest IdentifySubmitter
- IdentifySubmitter情報を登録する。
- HTTP ヘッダマネージャ
- ヘッダーのIf-Matchに前のetagの値をセットする。(楽観ロック)
- HTTP リクエスト - Create ServiceRequest RequestUpdates
- RequestUpdates情報を登録する。
- ここまででマルチフォーム入力が終了し、次のステージに進む。
- HTTP ヘッダマネージャ
- ヘッダーのIf-Matchに前のetagの値をセットする。(楽観ロック)
- 正規表現抽出 - caseid
- レスポンスに含まれる次のアクションを示すurlを取得する。
- HTTP リクエスト - Schedule repair
- Schedule repair情報を登録する。
- HTTP ヘッダマネージャ
- ヘッダーのIf-Matchに前のetagの値をセットする。(楽観ロック)
- 正規表現抽出 - caseid
- レスポンスに含まれる次のアクションを示すurlを取得する。
- HTTP リクエスト - Perform repair
- Perform repair情報を登録する。
- HTTP ヘッダマネージャ
- ヘッダーのIf-Matchに前のetagの値をセットする。(楽観ロック)
- 正規表現抽出 - caseid
- レスポンスに含まれる次のアクションを示すurlを取得する。
- HTTP リクエスト - Get approval
- Approveする。
- HTTP ヘッダマネージャ
- ヘッダーのIf-Matchに前のetagの値をセットする。(楽観ロック)
- Debug Sampler
- 結果をツリーで表示
上記で試したサンプルのテスト計画を添付します。
ダウンロードして拡張子をzipに変更してください。
まとめ
Pegaのアプリケーションで負荷テストをしたい、データを一括で登録したいといったケースで、JMeterを使いたいと思っても、大変かなということで食わず嫌いの方も多いと思います。
少しコツが必要ですが、コツさえ掴めばPegaを活用した開発で効果を発揮しそうです。ぜひ、JMeterを使って構築したPegaアプリケーションの品質を高めてください。

