Skip to main content link. Accesskey S
  • Help
  • HCL Logo
  • HCL Notes and Domino Application Development wiki
  • THIS WIKI IS READ-ONLY. Individual names altered for privacy purposes.
  • HCL Forums and Blogs
  • Home
  • Product Documentation
  • Community Articles
  • Learning Center
  • API Documentation
Search
Community Articles > 日本語 - Japanese > JMeter で XPages アプリケーションをテストする、入門編
  • Share Show Menu▼
  • Subscribe Show Menu▼

Recent articles by this author

JMeter で XPages アプリケーションをテストする、入門編

JMeter を初めて使う方にむけて、Domino アプリケーションや XPages アプリケーションを JMeter でテストをするための手順を最初のステップから解説します。

Eclipse Memory Analyser Tool を使用した、XPages のメモリリークの調査

Java アプリケーションのメモリリークを調査する強力なツールである Eclipse Memory Analyser Tool を使用して、XPages アプリケーションのメモリリークを調査する方法について紹介します。

XSP クライアントサイド Javascript オブジェクト関数

XPages アプリケーション開発の中で利用できる、XSP クライアントサイド Javascript オブジェクト関数について解説します。

Lotus Notes Java クラスのリサイクルとメモリ消費の検証

XPages や Java エージェントなどで Lotus Notes を操作する Lotus Notes Java クラスでは、開発者が明示的にリサイクルをして使用したオブジェクトを開放する必要があります。このリサイクルを適切に行わないことで、Java クラスの

XPages アプリケーションでの「可視(rendered)」プロパティによるパフォーマンス低下への対策

XPages アプリケーション開発で、「可視」設定ので「値の計算」はパフォーマンス低下を招く可能性があります。「可視」評価の Javascript に複雑な処理を実装する必要があるときには、そのスクリプトでパフォーマンスの低
Community articleJMeter で XPages アプリケーションをテストする、入門編
Added by ~Justin Elwemarynds | Edited by ~Justin Elwemarynds on August 23, 2014 | Version 23
  • Actions Show Menu▼
expanded Abstract
collapsed Abstract
JMeter を初めて使う方にむけて、Domino アプリケーションや XPages アプリケーションを JMeter でテストをするための手順を最初のステップから解説します。
Tags: XPages JMeter
ShowTable of Contents
HideTable of Contents
  • 1 はじめに
  • 2 JMeter のインストール
  • 3 JMeter のテストを構成する部品
  • 4 テストシナリオ
    • 4.1 スレッドグループ
    • 4.2 HTTPリクエスト
    • 4.3 結果を表で表示
    • 4.4 応答をファイルへ保存
  • 5 XPages アプリケーションへのアクセスをテスト
    • 5.1 HTTP認証マネージャ
    • 5.2 セッション認証とHTTPクッキーマネージャー
  • 6 ブラウザからのリクエストの録画
  • 7 さらに複雑なテストシナリオの作成のために
    • 7.1 XPages アプリケーション操作のためのビュー ID の保持

はじめに

JMeter は Apache プロジェクトで提供されている Web アプリケーションのパフォーマンス測定や負荷テストに使用されるツールです。Domino アプリケーション、もちろん XPages アプリケーションでも、そのテストにパワフルに使用できます。JMeter を使用しての XPages アプリケーションのテストについて、すでに Wiki 記事「JMeterを使ってXPagesアプリケーションのパフォーマンステストを行う際の考慮点」で解説されています。しかし Apache JMeter 自体が少しわかりにくいところがあるので、XPages アプリケーション開発者向けにこの記事を書きました。

JMeter のインストール

JMeter は Apache のページからダウンロードできます。この執筆時の最新版である 2.11 を基にこの記事を書いています。

  • JMeter のページ
  • JMeter の日本語プロジェクトのページ
JMeter の使用には JRE 6.0 以降が必要です。あらかじめインストールしておきます。

JMeter のページから apache-jmeter-2.11.zip をダウンロードし、適当なフォルダに展開します。ここでは c:\ 直下に展開し C:\apache-jmeter-2.11\ が作成されたことにしています。実行時に起動フォルダにログが作成されるので。log フォルダを作ってそこで実行すると良いです。

以下のようにコマンドラインから起動します。

 
C:\Users\test> cd \apache-jmeter-2.11\log
 
C:\apache-jmeter-2.11\log> c:\apache-jmeter-2.11\bin\jmeter.bat

Apache JMeter 起動画面

 

JMeter のテストを構成する部品

JMeter を最初に起動すると、すでに「テスト計画」と「ワークベンチ」があります。ここにさまざま部品を追加してテストシナリオを作成します。

JMeter のテストを構成する部品をまとめます。

カテゴリ
エレメント名
 
 
テスト計画(Test Plan)
JMeterで実施するテストの部品をまとめるルートとなる部品です。
 
ワークベンチ(WorkBench)
JMeter のテスト部品を仮置きする場所で、コピー&ペーストに使ったりなど目的に応じして使用できます。「テスト計画」を保存するときには「ワークベンチ」は保存されないので、必要に応じて個別に保存する必要があります。
スレッド (Threads(Users))  
 
スレッドグループ(Thread Group)
実行するテストケースを取りまとめたもので、テスト実行時に起動するスレッドの数で複数ユーザーからのアクセスをシュミレートします。「スレッド数」が同時アクセスユーザー数で、「Ramp-up 時間」によってそれらのスレッドがすべて起動されるまでの時間を指定します。スレッドグループの設定で、テストを一定数行って終了するか、無限に行うかも設定できます。
サンプラー(Sampler)  
 
HTTPリクエスト
(HTTP Request)
HTTP/HTTPS のリクエストを Web サーバーに送信する「サンプラー」です。個々の HTTP リクエストでプロキシサーバーにを使用するよう設定できます。「Embedded Resource from HTML Files」の設定で、レスポンスに含まれる HTML をパーズし、埋め込まれたイメージやその他のリソースを取得するように設定することもできます。
リスナー(Listener)  
 
結果を表で表示
(View Results in Table)
個々のテストサンプルの結果を1行として視覚化して表示するビジュアライザーです。このビジュアライザーはメモリの消費が大きいらしいです。
 
結果をツリーで表示
(View Results Tree)
テストサンプルの結果をツリー形式で表示するビジュアライザーです。テストサンプルに対するレスポンスとともにレスポンス時間やレスポンスコードを表示します。
 
応答をファイルへ保存
Save Responses to a file
この部品は「テスト計画」のどこにでも配置することができ、スコープ内の「サンプラー」の実行で、応答データのファイルを作成します。この部品は機能テストを作成する際に使用されることが多く、「結果をツリーで表示」などで表示しきれない大きなレスポンスを扱うのに適しています。
設定エレメント(Configuration Element)  
 
HTTPクッキーマネージャー(HTTP Cookie Manager)
クッキーマネージャには2つの機能があります。
ひとつは Web ブラウザのようにクッキーを保持してサーバーに送信する機能です。HTTP リクエストのレスポンスにクッキーが含まれていれば、そのクッキーはクッキーマネージャによって自動的に保存され、そのWebサイトへの今後のリクエストで使用されます。JMeterのそれぞれのスレッドは独自のクッキー保持エリアを持ちます。テストをしているWeb サイトのセッションをクッキーで保持していても、各JMeterスレッドは独立したセッションを持ちます。
ふたつめは、クッキーマネージャに手動でクッキーの追加をすることができます。しかしこの場合は追加したクッキーがすべてのJMeterのスレッドで共有されます。
  HTTP認証マネージャ(HTTP Authorization Manager) HTTP認証マネージャによって、アクセスに認証が必要な Web ページに対するログインユーザーをひとつまたは複数指定することができます。アクセスの制限されたページにブラウザからアクセスしたときには、ブラウザはログインダイアログを表示します。JMeterではこのようなページに遭遇すると、あらかじめ用意されたログイン情報を送信します。
タイマ(Timer)  
  定数タイマ(Constant Timer) 「スレッド」内の各サンプラーの実行間隔をミリ秒で指定する「タイマ」です。置かれた「スレッド」や「コントローラ」にあるすべての「サンプラー」の実行時にこの「定数タイマ」による一時停止が発生します。
  定数スループットタイマ(Constant Throughput Timer) 1分あたりのサンプラーの発生回数を制御する「タイマ」です。置かれた「スレッド」内で可能な限り、指定されたスループットを維持するようにリクエストを生成します。スレッドを複数生成したときには、スレッド数だけスループットが増加します。生成されるスループットは、サーバーの応答時間の遅れなどで変わることがあります。

ここでは記事で使用する部品のみを記載しました。その他の部品や詳細な情報は JMeter のヘルプを参照してください。

 

テストシナリオ

「テスト計画」にテストシナリオを作成しながら、これらの部品の使い方を解説します。

スレッドグループ

最初に起動したときには「テスト計画」と「ワークベンチ」だけが定義されています。この「テスト計画」を右クリックし「追加」→「Threads(Users)」→「スレッドグループ」を選択して「スレッドグループ」を作成します。「スレッドグループ」はテストの実行を制御するエレメントで、複数のユーザーからのアクセスをシュミレートするために複数のスレッドを立ち上げてテストを実行することができます。
 
パラメータ
説明
名前(Name)
この「スレッドグループ」を表す名前
スレッド数
(Number of Threads)
シュミレーションするユーザー数
Ramp-up期間
(Ramp-up Period)
すべての「スレッド」が開始されるまでに要する時間。もし10スレッドでRamp-up期間として100秒が指定されたときは、直前の「スレッド」の開始から10秒で次の「スレッド」が開始され、すべての「スレッド」がすべてそろうまでに100秒かかります。
ループ回数(Loop Count)
テストシナリオを繰り返す回数を指定します。「無限ループ」を選択することで、手動で停止するまで実行し続けます。
 
ここでは試験的に以下のよう設定をします。
  スレッド数: 3
  Ramp-up 期間(秒): 5
  ループ回数: 1

JMeter スレッドグループ

HTTPリクエスト

「スレッドグループ」内に実際にテストを行う HTTP リクエストを記載します。「スレッドグループ」を右クリックして「追加」→「サンプラー」→「HTTPリクエスト」を選択し、「HTTPリクエスト」を作成します。ユーザーの操作の際に発生する HTTP リクエストの URL や送信データなどを 「HTTP リクエスト」に定義します。
 
カテゴリ パラメータ 説明
  名前(Name)
この「サンプラー」を示す名前
Webサーバー  
  サーバーまたは IP Webサーバーのドメイン名または IP アドレス
  ポート Webサーバーが開いているポート(デフォルト:80)
HTTPリクエスト  
  プロトコル HTTP、HTTPS またはFILE(デフォルト: HTTP)
  メソッド GET, POST, HEAD, TRACE, OPTIONS, PUT, DELETE, PATCH (JAVA implementationで非サポート)
  パス

アクセスするリソースのパス(例:/servlets/myServlet)を指定します。リソースにURLパラメータを指定するときには「Parameter」タブの「リクエストで送るパラメータ」に指定します。
「http://」や「https://」から指定したときは完全なURLとして扱われ、「ポート」や「プロトコル」の設定値は無視されます。

Proxy Server  
  Server (proxy) リクエストを処理するプロキシサーバーのホスト名や IP アドレスを指定します。「http://」などは指定しません。
  Port プロキシサーバーでの待受けポートを指定します。
  Username (オプション)プロキシサーバーのユーザー名
  Password
(オプション)プロキシサーバーのパスワード(この値はテスト計画に暗号化されずに保存されます)

ここでは試験的に以下のよう設定をします。

  名前: developerWorks ページアクセス
  サーバー名: www.ibm.com
  メソッド: GET
  パス: /developerworks/jp/

HTTPリクエスト - developerWorks

これでテストを実施することができますが結果の表示ができません。次に実行結果を表示するリスナーを追加します。

結果を表で表示

「テスト計画」を右クリックして「リスナー」→「結果を表で表示」を選択します。「結果を表」で表示を追加したら、アクションバーから「開始」ボタンを押してテストを実行します。テストは「スレッドグループ」の定義に従って実行されます。

3つのスレッドが起動され、それぞれ1回ずつ処理を行って終了しています。Ramp-upを3秒と指定しているので、約3秒かけてすべてのレッドが起動されました。

結果を表示で表示

応答をファイルへ保存

結果を表で表示しただけでは、そのリクエストに対して正しいレスポンスが来ているかどうかわかりません。そのときは「テスト計画」を右クリックして「リスナー」→「応答をファイルへ保存」を選択します。

応答をファイルへ保存では「ファイル名の接頭辞」を指定します。これで各HTTPリクエストのレスポンスがこの接頭辞つきの連番ファイル名で保存されます。デフォルトの保存場所は JMeter を起動したフォルダです。これはHTTP レスポンスのデータタイプによって HTML ファイルであったり画像などのバイナリファイルで保存されます。テスト計画の作成時においてはこのファイルの内容を確認して、テストが正しく実行されていることを確認します。

応答をファイルへ保存

XPages アプリケーションへのアクセスをテスト

次に XPages アプリケーションへのアクセスを試してみましょう。サーバー nd90la.lotus.con にディスカッションテンプレートを使用した discussion.nsf があるとします。ACL でのアクセス制限がされていなければ、先の developerWorks のページへのアクセスと同様に http://nd90lab.lotus.com/discussion.nsf へのHTTPリクエストを作成すればアクセスはできます。しかしアクセス制御されている場合には、認証をを行う必要があります。

最初に Domino サーバーの Domino Webエ ンジンで特に設定をしていない場合、つまり基本認証の場合について紹介します。次に Domno Web エンジンで「セッション認証」が指定され認証フォームyが表示される場合を紹介します。

HTTP認証マネージャ

HTTP リクエストが Domino アプリケーションにアクセスするために以下のように書き換えます。

  名前: ディスカッションアプリ
  サーバー名またはIP: nd90lab.lotus.com
  パス: /discussion.nsf

ACL で Anonymous のアクセス制限されている Domino アプリケーションにアクセスとすると、「エラー 401、この操作を実行する権限がありません 」が表示されます。DominoサーバーのWebエンジンが基本認証で Web ページにアクセスするのであれば「HTTP 認証マネージャ」を追加して認証設定ができます。

スレッドグループを右クリックして「認証エレメント」→「HTTP 認証マネージャ」を追加します。「HTTP 認証マネージャ」の「認証マネージャに保存されている認証」のセクションのの一番下にある「追加」ボタンを押して行を追加し、以下の値を設定します。
 
  基底URL: [{{http://nd90lab.lotus.com}}}  ※省略可能
  ユーザー: アプリケーションにアクセスできるユーザー  
  パスワード: ユーザーのパスワード  
 
認証マネージャ

設定ができたら「テスト計画」を実行します。

「認証マネージャ」が正しく設定されていれば、Domino アプリケーションへのアクセスが成功し、「結果を表で表示」でも Status に「Success」で表示されます。「応答をファイルへ保存」で保存されたファイルを開くと、アプリケーションの内容を正しく表示しているはずです。なおダウンロードされたHTMLファイルをブラウザで開くと「All Documents」ビューの文書の一覧が含まれていますが、画像などが切れていて画面が崩れていると思います。通常のブラウザではページに埋め込まれた画像・ Javascript・CSS といったものを自動でダウンロードしてページを構成してくれますが、JMeter のデフォルト設定で は「HTTP リクエスト」に記載されたURLのリソースしかダウンロードしません。そのためサーバーアクセスを厳密に再現するためには、こういった部品もダウンロードするよう 「HTTPリクエス ト」で「すべてのイメージとアプレットを繰り返しダウンロードする(HTML ファイルのみ)」を選択する必要があります。

セッション認証とHTTPクッキーマネージャー

Domino Webエンジンでセッション認証が有効になっているときの認証方法を見てみましょう。Domino Web エンジンで Web サイト文書のセッション認証を設定する方法は Domino のヘルプ文書に記載されています。

このときは、先ほど追加した「HTTP認証マネージャは」使用しないので削除します。認証は http://nd90lab.lotus.com/names.nsf?Login に POST リクエストでユーザー名とパスワードを送信することで行います。そこで先ほど追加した「ディスカッションアプリ」の直前に「HTTPリクエスト」を追加し、以下のように設定します。
 
  名前: ログイン
  サーバー名またはIP: nd90lab.lotus.com
  メソッド: POST
  パス:
/names.nsf?Login
  Parameters: 「追加」ボタンを2回押して、以下のパラメータを追加します。
  username: admin (アプリケーションにアクセスできるユーザー)
  password: passw0rd (ユーザーのパスワード)

この「ログイン」処理での認証情報をクッキーに保持して、次の「ディスカッションアクセス」で使用します。「スレッドグループ」を右クリックして認証エレメント」→「HTTP クッキーマネージャ」を追加します。ここでは「HTTP クッキーマネージャ」を追加するだでけで特別な設定は必要はありません。

 

ブラウザからのリクエストの録画

これ以上複雑な処理をテストシナリオに直接作成するのは限界があります。そこで実際のブラウザ操作で発生するクライアントリクエストを録画してテストシナリオに取り込む仕組みが JMeter には用意されています。

「ワークベンチ」を右クリックし、「Non-Test エレメント」→「HTTP プロキシーサーバー」を追加します。「Global Settings」の「ポート」が 8080 になっているので、JMeter を実行している PC でこのポートが使用されていないことを確認します。その他の設定を変更する必要はありませんが、以下の設定をすることを推奨します。

  対象となるコントローラ: ワークベンチ > HTTPプロキシサーバ
  グループにする: 新既コントローラへ各グループを置く

「対象となるコントローラー」は、録画されたサンプラーがおかれる場所です。デフォルトの設定ですと「記録コントローラ」の中に置かれてしまいます。あらかじめ「記録コントローラ」を作っておかないと、作成中のテストシナリオと混ざってしまったりして混乱する可能性があります。上記のように選択することで「ワークベンチ」の中に録画されたサンプラーが置かれます。

「グループにする」を選択することで、ブラウザからの一回のリクエストで発生する複数の「HTTP リクエスト」を「シンプルコントローラー」にまとめてくれます。この設定をしないとすべてのサンプラーがフラットに置かれるために、後で整理するのが大変になります。

一番下の「開始」ボタンを押すと JMeter が HTTP プロキシとして動作し、経由したリクエストを記録します。Root CA Certificate に関するダイアログが出るので「OK」を押します。

Root CA Certificate の警告

ブラウザでプロキシの設定をします。Internet Explorer の場合、メニューから「ツール」→「インターネットオプション」を選択し、ダイアログで「接続」タブを開き「LAN 接続設定」をクリックします。「ローカルエリアネットワーク(LAN)の設定」ダイアログで「プロキシーサーバー」セクションの「LANにプロキシサーバーを使用する」を選択し、以下の値を設定して「OK」を押してダイアログを閉じます。
 
  アドレス: localhost
  ポート: 8080

ブラウザのプロキシーサーバーの設定

これでブラウザからの操作がすべてJMeterに記録されます。

以下の画面では、次の4ステップの操作を行ったときのHTTPリクエストを記録しています。

  1. アプリケーションの URL を開示してログイン画面の表示
  2. ログイン画面での認証を経て文書一覧の表示
  3. 文書の一覧での文字列での検索
  4. 文書の一覧から既存の文書の開示

ブラウザでの操作に応じて発生する「HTTP リクエスト」が記録され、「HTTP プロキシ」 の配下に追加されます。先ほどのパラメータの設定でそれぞれのブラウザ操作に関連する 「HTTP リクエスト」が「シンプルコントローラー」でグループ化されています。

記録された HTTP リクエスト

グループの中をみてみると、ユーザーひとつの操作でページ自体の取得の他に、ページに埋め込まれた画像・CSS・Javascriptといったリソースの取得が行われ、複数の「HTTP リクエスト」が発生しています。またそれぞれの「HTTP リクエスト」にブラウザで生成された HTTP ヘッダ情報を保持する「HTTP ヘッダマネージャ」が生成されているので、ブラウザからのアクセスをより正確に再現するために役立ちます。

グループ内のリクエストの詳細

ここで記録された 「HTTP  リクエスト」をテストシナリオとして使うには、これらの記録された「HTTP リクエスト」を作成中の「スレッドグループ」にコピーします。今回は XPages を呼び出している「HTTP リクエスト」をテスト計画に取り込みます。

記録されたリクエストから作成したテストシナリオ

さらに複雑なテストシナリオの作成のために

XPages アプリケーション操作のためのビュー ID の保持

XPagesアプリケーションでは記録されたシナリオをそのまま使用することができますが、処理の内容によっては想定した通りの動作をしないことがあります。それはビュー ID で XPages アプリケーションの処理を管理しているためです。この問題については、以下のWik i記事に詳細が記載されています。

JMeterを使ってXPagesアプリケーションのパフォーマンステストを行う際の考慮点

 


  • Actions Show Menu▼


expanded Attachments (14)
collapsed Attachments (14)
Edit the article to add or modify attachments.
File TypeSizeFile NameCreated OnDelete file
image/x-png 49 KB 01_01_InitialScreen.png 8/15/14, 12:38 AM
image/x-png 43 KB 01_02_ThreadGroup.png 8/15/14, 12:38 AM
image/x-png 59 KB 01_03_HTTPRequest_dw.png 8/15/14, 12:38 AM
image/x-png 50 KB 02_01_ResponseFile.png 8/15/14, 12:39 AM
image/x-png 55 KB 02_02_ResultTable.png 8/15/14, 12:39 AM
image/x-png 53 KB 03_01_AuthenticationManager.png 8/15/14, 12:39 AM
image/x-png 71 KB 03_02_POSTRequest4SessionAuthentication.png 8/15/14, 12:39 AM
image/x-png 73 KB 04_01_HTTPProxyServer.png 8/22/14, 11:37 PM
image/x-png 7 KB 04_02_CouldNotCreateScriptRecordingProxy.png 8/22/14, 11:37 PM
image/x-png 21 KB 04_03_RootCACertificate.png 8/22/14, 11:37 PM
image/x-png 31 KB 04_04_BrowserProxy.png 8/22/14, 11:37 PM
image/x-png 77 KB 04_05_RecordedHTTPRequests.png 8/22/14, 11:50 PM
image/x-png 62 KB 04_06_DetailOfHTTPRequests.png 8/22/14, 11:50 PM
image/x-png 91 KB 04_07_TestSenarioCreatedFromRecording.png 8/22/14, 11:51 PM
expanded Versions (23)
collapsed Versions (23)
Version Comparison     
VersionDateChanged by              Summary of changes
This version (23)Aug 23, 2014, 2:50:43 AM~Justin Elwemarynds  
22Aug 23, 2014, 12:54:48 AM~Rebecca Minfreevitchobu  
21Aug 23, 2014, 12:51:22 AM~Rebecca Minfreevitchobu  
20Aug 23, 2014, 12:49:06 AM~Rebecca Minfreevitchobu  
19Aug 22, 2014, 11:55:25 PM~Rebecca Minfreevitchobu  
18Aug 22, 2014, 11:49:33 PM~Rebecca Minfreevitchobu  
17Aug 22, 2014, 11:38:51 PM~Rebecca Minfreevitchobu  
16Aug 22, 2014, 11:34:52 PM~Rebecca Minfreevitchobu  
15Aug 20, 2014, 11:52:50 AM~Rebecca Minfreevitchobu  
14Aug 20, 2014, 11:41:40 AM~Rebecca Minfreevitchobu  
13Aug 15, 2014, 2:00:42 AM~Rebecca Minfreevitchobu  
12Aug 15, 2014, 2:00:21 AM~Rebecca Minfreevitchobu  
11Aug 15, 2014, 1:59:33 AM~Rebecca Minfreevitchobu  
10Aug 15, 2014, 1:57:10 AM~Rebecca Minfreevitchobu  
9Aug 15, 2014, 1:55:19 AM~Rebecca Minfreevitchobu  
8Aug 15, 2014, 1:53:06 AM~Rebecca Minfreevitchobu  
7Aug 15, 2014, 1:28:50 AM~Rebecca Minfreevitchobu  
6Aug 15, 2014, 1:19:35 AM~Rebecca Minfreevitchobu  
5Aug 15, 2014, 1:09:51 AM~Rebecca Minfreevitchobu  
4Aug 15, 2014, 12:58:22 AM~Rebecca Minfreevitchobu  
3Aug 15, 2014, 12:40:34 AM~Rebecca Minfreevitchobu  
2Aug 15, 2014, 12:39:36 AM~Rebecca Minfreevitchobu  
1Aug 15, 2014, 12:38:09 AM~Rebecca Minfreevitchobu  
expanded Comments (0)
collapsed Comments (0)
Copy and paste this wiki markup to link to this article from another article in this wiki.
Go ElsewhereStay ConnectedAbout
  • HCL Software
  • HCL Digital Solutions community
  • HCL Software support
  • BlogsDigital Solutions blog
  • Community LinkHCL Software forums and blogs
  • About HCL
  • Privacy
  • Accessibility