ShowTable of Contents
JMeterを使ってXPagesアプリケーションのパフォーマンスを計測する
XPagesアプリケーションの負荷テストを実施する場合、Server.load(Lotus Domino 標準の負荷テストツール)ではGET要求しか行えないため、シナリオによっては十分なテストが行えない場合があります。当記事では、オープンソースのJMeterを使って、XPagesアプリケーションのパフォーマンス測定を行う際の考慮点について解説します。
JMeter概要
JMeterの特徴をは下記です。
・100%Javaの汎用テストツール
・HTTPプロキシを利用して、ブラウザ操作をキャプチャし、テストシナリオとして記録
・複数のスレッドを同時に起動して多重度による負荷をかけることが可能
JMeterの詳細は下記をご覧ください。
-JMeterの概要を短時間で理解するにはこちら。
今から3分で jmeter の使い方を身に付ける (負荷テスト入門)
-JMeterの詳細な使い方は下記参照。
JMeter を用いた Lotus Domino Web アプリケーションのパフォーマンス計測
-公式サイト
Apache JMeter™
参考.JMeterと他のツールの比較
参考として、JMeterと他のパフォーマンスツールの機能の比較表を以下に示します。
|
Apache JMeter |
Server.load |
Rational Performance Tester |
リクエストのサポート |
○
GET/POST両方可能 |
×
GETのみ |
○
GET/POST両方可能 |
テストシナリオの作成・保存 |
△
プロキシでユーザー操作をトレース
(データ相関は手動で関連付ける、後述) |
×
すべて手動で作成 |
○
プロキシでユーザー操作をトレース、データ相関を自動分析 |
仮想ユーザーの設定 |
○
複数ユーザー可能 |
△
固定ユーザーのみ |
○
複数ユーザー可能 |
テスト結果の分析補助 |
△
簡易なグラフの作成のみ |
×
グラフ作成は自作 |
○
各種グラフの作成可能 |
XPagesアプリケーションに対してJMeterを使用してテストする場合の考慮点
以下、2点について対応する必要があります。
・セッションIDを次のリクエストに引き継ぐ
・1つのページに継続して要求を行う場合、viewのidを引継ぐ
セッションIDを次のリクエストに引き継ぐ
XPagesアプリケーションは、クラシックWebと異なりステートフルな対話をクライアントと行うため、リクエストはセッションIDを引き引き継いで行う必要があります。
JMeterでセッションIDを引き継ぐためには、テスト計画に、「HTTPクッキーマネージャ」を追加します。
※「追加」-「設定エレメント」-「HTTPクッキーマネージャ」
1つのページに継続して要求を行う場合には、viewのidを引き継ぐ
viewとは,サーバーページ(最後の項目参照)全体を表すJSFのviewオブジェクトを指しています(Lotus Notes/Domino の文書の一覧を表示する”ビュー”とは別物であることに注意)。
XPagesから出力されたWebページには、form下部に必ずname属性が$$viewidという要素があります。そのvalueとしてviewのidが格納されています(下図では「d8x96mu6jm」)。
XPagesでは、このviewのidをもとに,表示されているWebページとサーバーページが紐付けられているため,XPagesではPOST要求や部分更新を行うGET要求において,このidを引き継いで要求を行う必要があります(初めてページにアクセスする場合には必要ありません)。
具体的には、以下のような場合に必要になります。
-ボタンの実行(新規作成、保存、削除など)
-タイプアヘッド(部分更新をGET要求で行います)
-ビューのページャーのクリック
-ビューのカテゴリの展開省略
など
JMeterで、viewのidを引き継いでリクエストを行う
JMeterで、レスポンスに含まれている値の引継ぎは「正規表現抽出」から行えます。
設定方法を以下に示します。
1.Post/Getを行う前のリクエスト側の設定
Post/Getを行う前のリクエスト(応答レスポンスに"view:_id1__VUID"が含まれてるリクエスト)に、「追加」-「後処理」-「正規表現抽出」を追加します。
追加した「正規表現抽出」に下記の設定を行います。
-参照名:任意
-正規表現:id="view:_id1__VUID" value="(.*?)"
-テンプレート:$0$
-一致番号:-1
2.Post/Getを行う側の設定
下記のように値を設定します。
$$viewid :${1の参照名_1_g1} (詳細後述)
※ ここで $$viewid に指定する変数名は、後述の Debug Sampler で表示される「結果をツリーで表示」で表示される参照名と一致させてください。ここで紹介した例では「参照名_1_g1」ですが、「参照名_g1」となることがあります。参照名が異なると、ビュー ID が正しく送信されません。
上記の値はたとえば下記手順で確認できます。
ⅰテスト計画」に「Debug Sampler」を追加
「テスト計画」の「スレッドグループ」を右クリックして「追加」→「サンプラー」→「Debug Sampler」をクリックします。
ⅱ.リスナーに「結果をツリーで表示」を追加
同様にして「スレッドグループ」を右クリックして「追加」→「リスナー」-「結果をツリーで表示」をクリックします。
ⅲ.テスト実行
実行後に、「結果をツリーで表示」を選択して「Debug Sampler」を開きます。「応答データ」タブに取得されたビュー ID が表示されます。この例では指定した参照名に _1_g1 が付加されていますが、これは変わることがあるので注意してください。
参考.JMeterの正規表現抽出
http://ramblog.blog129.fc2.com/blog-entry-19.html
サンプル
JMeterDiscussion(Jmeterdi.nsf)に文書を作成する、または更新するテスト計画のサンプルを添付します。
実行するためには、下記を行う必要があります。
1.サーバー直下に「Jmeterdi.nsf」を作成する
2.1のDBのACLの「Anonymous」のエントリを、編集者に変更する
3.JMeterで添付のテスト計画を開き、下記を変更する
「HTTPリクエスト初期値設定」・・・「サーバー名またはIP」
「ユーザーパラメータ」・・・「docId」に更新する文書のUNID、「docNoteId」・・・更新する文書のNoteId。
(See attached file: XPages20130121.zip)
参考.サーバーページとは
XPagesでは、各コントロールをJavaのオブジェクトとして束ねたツリー構造(コンポーネント・ツリー)でページを管理しています。このページをサーバーページと呼んでいます。XPagesでは、このオブジェクトに入力された値などが保持され、個々のオブジェクトをHTMLに変換することでWebページを出力しています。
サーバーページは、メモリまたはディスクに保存されます(デザイナーの「アプリケーションのプロパティ」-「XPages」タブ-「パフォーマンス」-「サーバーページの保持」)。
ディスクに保存される場合(8.5.3デフォルト)、下記のパスに保存されます。拡張子は".ser"
Windows:(ドライブ)\Windows:\Temp\notesXXXXX(英数5桁)\xspstate\
AIX:(Dataフォルダ)/xspstate/
詳細は XPages Portable Command Guide を参照ください。