Difference between revisions of "GXtest の JMeter スクリプトの構築"

From GXtest Wiki
Jump to: navigation, search
(スクリプトジェネレーターの働き)
 
Line 7: Line 7:
  
 
== JMeter ==
 
== JMeter ==
[https://jmeter.apache.org/ JMeter] は、性能テストのためのオープン ソース ツールであり、自動化テストケース、各テストケースで実行される HTTP(または HTTPS)リクエストを含むスクリプトの生成、および任意のアクションを実行するための修正(導入検証、条件、パラメーター化など)に使用されます。
+
[https://jmeter.apache.org/ JMeter] はパフォーマンステスト (負荷 / ストレス) のためのオープ ンソース ツール (無償) であり、この分野で最も使用されているツールです。ブラウザーを実際に使用することなく、ブラウザーをシミュレートするための Web サーバーへの HTTP (または HTTPS) リクエストを有効にします。GXtest を使用すると、クリックするだけで JMeter スクリプトをビルドすることができ、独自のアクション (検証、条件、パラメーター化など)を実行するためにそのスクリプトを調整することができます。
  
さらに、JMeter を使用すると、テストシナリオをマウントし、アクティブなユーザー数、イテレーション回数、ユーザーがシステムにアクセスする方法、およびその他のオプションを定義して、現実に即したシナリオを作成できます。下図では JMeter のテストプランの例を示しています。
+
JMeter は、大規模なアクティブユーザー数やイテレーション回数を定義するテストシナリオを実行することで、特定の負荷環境での現実的なシナリオのシミュレーションが可能です。下図では JMeter のテストプランの例を示しています。
  
 
[[image:JmeterExample.PNG|frame|center]]
 
[[image:JmeterExample.PNG|frame|center]]
  
OpenSTA と同様に、JMeter の欠点はテストケースの記録プロセスにあります。テストケースを記録するとき、生成された HTTP リクエストのスクリプトを取得します。そのため、アプリケーションの知識持っている作業者でなければ、各手順または各リクエストを実行するかどうかを識別するのが困難になります。多くの場合、より明確なスクリプトにするには、各手順のタイミングを制御するタイマーと同様に、記録中の各手順間のコメントを用意する必要があります。検証またはパラメータ化された変数を追加する場合、JMeter のスクリプトの実行は面倒な作業であり、アプリケーションのコードが常に変更されているプロジェクトでは、スクリプトを再生成する必要があることから、煩雑になりがちであると結論付けることができます。
+
JMeter のテストケース生成プロセスは、ブラウザーでテストケースを実行し、Proxy を使用して自動的に送信された HTTP リクエストを取得することで、成し遂げられます。GXtest で最初にテストケース(データプールを使用したフローとデータ)を作成し、JMeter スクリプトを適切に完成させる(特に正規表現を追加し、いくつかのハードコードされたパラメーターを追加する)ことが
 +
できる、アプリケーションの知識を持つ作業者に、このスクリプトを提供することが JMeter 経験のない人々には有効です。
  
JMeter 測定は [http://wiki.gxtechnical.com/commwiki/servlet/hwiki?Application+Monitoring+and+Management%3A+using+a+JMX+or+WMI+monitor, JMX] のような GeneXus のモニタリングツールによって補完されるので、性能テストに真価を発揮します。
+
このプロセスなしに、手順を確認し、各々のリクエストが機能または業務ルールに基づいているかどうかを確認することは非常に困難です。各々の手順 (記録) の間ならびに各々の手順を制御するタイマーの間にコメントを追加することで、理解可能なスクリプトにすることができます。
  
== GXtest でパフォーマンススクリプトを生成する ==
+
特にアプリケーションのコードが絶えず変化する場合、スクリプトを殆ど完全に再生成する必要があることを意味しているため、GXtest なしで JMeter スクリプトを作成することは、一般的に実現するのが難しく退屈な作業です。また、Ajax 暗号化 (GeneXus で既定で有効) を用いたテストスクリプトを実行する予定の場合、暗号化のために GeneXus の生成なしで実現することは、殆ど不可能であるという点に注意してください。
  
GXtest は、以前に記録されたテストケースから JMeter スクリプトを生成することができます。これにより、テスト担当者には多くのメリットがあります:
+
== 性能テストプロジェクトのためのヒント ==
 +
既定では、HTTP リクエストおよび HTTP レスポンスを介して制御しない多くのパラメーターがある場合、GeneXus で性能テストスクリプトを作成することは非常に困難です。したがって、パラメーター化されたリクエストを適切に生成し 「STATUS CODE 403 - GeneXus で許可された結果がありません」といったエラーを回避するためには、Ajax のセキュリティをオフにする必要があります。
 +
http://wiki.genexus.jp/hwikibypageid.aspx?17384
  
* GXtest のテストケースの記録は、より実用的な方法で行われ、検証およびこのほかの記事に記載されているオプションを追加することができる。
 
* スクリプトの中でもっとも記述に時間がかかる部分を自動化できるため、同じ作業の繰り返しに費やしていた時間を削減できる。
 
* アプリケーションに変更があった場合、それらを GXtest に取り込み、スクリプトを簡単に再生成できる。GXtest で変更をもう一度記録する必要はない。
 
* 検証、タイマー、およびパラメーター化を手動で設定する必要がない。通常、これらの作業は非常に時間がかかり、かつ問題を発生させやすい。GXtest はこれらのエレメントすべてを自動的に設定することが可能。
 
* 一次リクエスト (HTTP)とは別のファイルに二次リクエスト(CSS、GIF、JPG、JS、など)がある場合、それぞれ別のスクリプトを用意する。これにより、分析を容易にするためのより明確なスクリプトの使用が可能。
 
* デバッグフラグを使用して二次リクエストおよびログメッセージに条件を設定できる。
 
* NTLM 認証をサポートしている。
 
* すべてのリダイレクトを自動的に管理する。
 
  
 +
[http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?27299 JMX または WMI] といった GeneXus のモニタリングツールでテストの実行結果を補完することを強くお勧めします。
 +
 +
 +
Ajax 暗号化を使用して、実際の動作をシミュレートしたい場合、 AJAX_KEY、AJAX_SECURITY_TOKEN、GX_WEBSOCKET_ID のような、ほかの一般的なパラメーターやほかの変数と同様に、実行時に Ajax リクエストを暗号化する機能をバージョン 3.2 に追加しました。
 +
 +
== GXtest で JMeter スクリプトを生成する ==
 +
 +
GXtest は、以前に記録されたテストケースから JMeter スクリプトを生成することができます。これにより、ユーザーには次のような多くのメリットがあります:
 +
 +
* 性能テストのオートメーション経験なしで、その機能を実現する GXtest によるテストケースの記録が可能 (生成後、テスト担当者はその上で作業する必要がある)
 +
* スクリプトの中でもっとも記述に時間がかかる部分を自動的に生成できるため、同じ作業の繰り返しに費やしていた時間を削減
 +
* 検証、タイマー、および基本のパラメーター化を手動で設定する必要がない。通常、これらの作業は非常に時間がかかり、かつ問題を発生させやすい。GXtest はこれらのエレメントすべてを自動的に設定可能
 +
* 思考時間およびログメッセージにデバッグフラグを使用
 +
* NTLM 認証をサポート
 +
*リダイレクトを自動的に管理
  
 
=== スクリプトジェネレーターの働き===
 
=== スクリプトジェネレーターの働き===
Line 39: Line 49:
 
JMeter のスクリプトを作成するリクエストが送信されると、ユーザーの画面上ではテストケースが通常どおり開始されます。ただし、内部では通常とは異なる処理が多く実行されています:テストケースの実行中に、テストで使われているすべての GXtest コマンドを含む xml ファイルが生成され、同時に saz ファイルに http リクエストが記録されます。これらのファイルは、GXtest Designer のインストールフォルダにある、テストケース名のフォルダに保存されます。通常は次のロケーションにあります:Abstracta\GXtest Designer\Performance\ExecutionLog\
 
JMeter のスクリプトを作成するリクエストが送信されると、ユーザーの画面上ではテストケースが通常どおり開始されます。ただし、内部では通常とは異なる処理が多く実行されています:テストケースの実行中に、テストで使われているすべての GXtest コマンドを含む xml ファイルが生成され、同時に saz ファイルに http リクエストが記録されます。これらのファイルは、GXtest Designer のインストールフォルダにある、テストケース名のフォルダに保存されます。通常は次のロケーションにあります:Abstracta\GXtest Designer\Performance\ExecutionLog\
  
「saz」形式は、[http://www.fiddler2.com Fiddler] ツールに属しています。このツールは、インターネットと PC 間の HTTPトラフィックを記録するプロキシであり、ブレークポイントの導入、プロトコルレベルのリクエストの編集などによる分析が可能です。
+
「saz」フォーマットは [http://www.fiddler2.com Fiddler] ツールに属しており、インターネットと PC 間で、 HTTP トラフィックを記録する Proxy です。また、後でブレークポイントを介して分析したり、プロトコルレベルなどでリクエストを編集したりすることが可能です。元のリクエストを比較して、どのように JMeter で残りのスクリプトをパラメーター化する必要があるかを理解するために、このファイルは、性能テストの自動化担当者にとって非常に重要です。
  
 
これら 2 つのファイル (xml および saz) を元に、xml ファイルの GXtest コマンドおよび saz ファイルの http (または https) リクエストを使って、JMeter テストプランが生成されます。実行が完了すると、実行されたすべての GXtest コマンド、各コマンドに含まれる、コマンドと関連付けられた http (または https) リクエスト、適切なタイマー、および (設定された場合は) 対応する検証が含まれたスクリプトが生成されます。これらの結果ファイルは、Abstracta\GXtest Designer\JMeter のフォルダに作成されます。
 
これら 2 つのファイル (xml および saz) を元に、xml ファイルの GXtest コマンドおよび saz ファイルの http (または https) リクエストを使って、JMeter テストプランが生成されます。実行が完了すると、実行されたすべての GXtest コマンド、各コマンドに含まれる、コマンドと関連付けられた http (または https) リクエスト、適切なタイマー、および (設定された場合は) 対応する検証が含まれたスクリプトが生成されます。これらの結果ファイルは、Abstracta\GXtest Designer\JMeter のフォルダに作成されます。
  
通常、生成されたスクリプトは、変更せずにそのまま実行できます。ただしシステムによっては、実際の環境にスクリプトを可能な限り近づけるために、スクリプトを変更して、条件、変数、検証などを追加する場合があります。
+
この結果ファイルのスクリプトは、変更せずに実行準備ができている可能性があります。しかし、システムが Ajax 暗号化を使用している場合は特に、JMeter の専門家によって修正とパラメーター化を行う必要があります。通常、性能スクリプトをできるだけ実際と同じにするために、いくつかの条件の追加、新しい変数のパラメータ化、およびシステム検証の追加を行う必要があります。
  
=== JMeter に生成されたファイルをインポートする方法 ===  
+
=== JMeter スクリプトを生成するための GXtest の機能 ===
 +
 
 +
前述のとおり、JMeter スクリプトを自動的に作成することにより、GXtest は作業の大部分を生成します。そこには GeneXus での性能テストに必要な殆どすべてが含まれています。
 +
 
 +
主な機能は次のとおりです:
 +
 
 +
* 可読性のあるスクリプト
 +
** 生成されたスクリプトは可読性があり、モジュール化されている
 +
** ユーザーアクション (GXtest コマンド) と HTTP リクエストの間の履歴管理
 +
** 次のようなグローバル変数のパラメーター化: webServer、port、webapp、threads、rampup など
 +
** 各ユーザーアクション間への思考時間の取り込み
 +
 
 +
* リダイレクトの追跡:
 +
** STATUS CODE 302 を引き起こす、すべてのリクエストを無視
 +
** JMeter は堅牢性の改善のため、各手順のリダイレクトを追跡
 +
** JMeter の「すべての埋め込まれたリソースを取得する」オプションによって、二次リクエストは無視される
 +
 
 +
* エラーデバッグ
 +
** すべてのリクエストとレスポンスは、簡単なデバッグを可能にするために、JMeter のログで記録される
 +
** デバッグフラグ: 思考時間のスキップを有効にする (スクリプトのビルド時に実行を高速化するため)
 +
 
 +
* 結果解析
 +
** レスポンス時間をより分かり易くするために、ユーザーアクションをグループ化
 +
 
 +
* 自動パラメーター
 +
** データプールで使用される GeneXus の変数およびテストデータ (3 文字を超えるデータの使用時)
 +
** Ajax セキュリティ変数 (GX_AJAX_KEY、AJAX_SECURITY_TOKEN)
 +
** 一般的な変数 (GX_WEBSOCKET_ID)
 +
** Ajax で自動的に URL パラメーターを暗号化するための Beanshell 生成
 +
 
 +
* 画期的な取り組み
 +
** 生成の前に Cookie を削除
 +
** JMeter での Cookie Manager の使用
 +
 
 +
=== 未対応のアイテム===
 +
現在、生成されてないいくつかのアイテムが GXtest の次のバージョンに含まれる予定です:
 +
* バイナリのアップロード
 +
* より多くの GeneXus 変数
 +
* ユーザー / 開発者の変数
 +
 
 +
 
 +
=== JMeter に生成されたファイルをインポートする方法 ===
  
 
GXtest Designer からテストケースを実行した後、GXtest のインストールフォルダ (Abstracta\GXtest Designer\JMeter ) で生成された JMeter テストプランが使用可能になります。
 
GXtest Designer からテストケースを実行した後、GXtest のインストールフォルダ (Abstracta\GXtest Designer\JMeter ) で生成された JMeter テストプランが使用可能になります。
Line 54: Line 105:
 
=== JMeter のインストール ===
 
=== JMeter のインストール ===
  
JMeter は、フリーツールであり、JMeter の [https://jmeter.apache.org/ Web サイト]からダウンロードできます。
+
JMeter は、フリーツールであり、JMeter の [https://jmeter.apache.org/ Web サイト] からダウンロードできます。
 
+
  
 
== まとめ ==
 
== まとめ ==
  
GXtest は、JMeter ツールによる性能テストで使用するスクリプトを作成することができます。GXtest からスクリプトを生成することで、テスターは反復して行うタスクから解放され、性能エラーの数を削減するためのほかの作業に集中することができるので、より良い品質の製品開発を実現できます。
+
GeneXus は、すべての複雑さを開発者に対して非表示にし、GXtest は、GeneXus での性能テストを実現する JMeter スクリプトの作成を可能にします。
 +
JMeter は GeneXus のリクエストを処理する際に、時間を節約するためのツールを使用してスクリプトを生成します。
 +
 
 +
また、Ajax セキュリティが有効な場合、GXtest はおそらくスクリプトでの複雑な処理が可能な唯一のオプションです。

Latest revision as of 09:06, 24 November 2016

Spanish.gif
English.gif
Japan.gif


Contents

JMeter

JMeter はパフォーマンステスト (負荷 / ストレス) のためのオープ ンソース ツール (無償) であり、この分野で最も使用されているツールです。ブラウザーを実際に使用することなく、ブラウザーをシミュレートするための Web サーバーへの HTTP (または HTTPS) リクエストを有効にします。GXtest を使用すると、クリックするだけで JMeter スクリプトをビルドすることができ、独自のアクション (検証、条件、パラメーター化など)を実行するためにそのスクリプトを調整することができます。

JMeter は、大規模なアクティブユーザー数やイテレーション回数を定義するテストシナリオを実行することで、特定の負荷環境での現実的なシナリオのシミュレーションが可能です。下図では JMeter のテストプランの例を示しています。

JmeterExample.PNG

JMeter のテストケース生成プロセスは、ブラウザーでテストケースを実行し、Proxy を使用して自動的に送信された HTTP リクエストを取得することで、成し遂げられます。GXtest で最初にテストケース(データプールを使用したフローとデータ)を作成し、JMeter スクリプトを適切に完成させる(特に正規表現を追加し、いくつかのハードコードされたパラメーターを追加する)ことが できる、アプリケーションの知識を持つ作業者に、このスクリプトを提供することが JMeter 経験のない人々には有効です。

このプロセスなしに、手順を確認し、各々のリクエストが機能または業務ルールに基づいているかどうかを確認することは非常に困難です。各々の手順 (記録) の間ならびに各々の手順を制御するタイマーの間にコメントを追加することで、理解可能なスクリプトにすることができます。

特にアプリケーションのコードが絶えず変化する場合、スクリプトを殆ど完全に再生成する必要があることを意味しているため、GXtest なしで JMeter スクリプトを作成することは、一般的に実現するのが難しく退屈な作業です。また、Ajax 暗号化 (GeneXus で既定で有効) を用いたテストスクリプトを実行する予定の場合、暗号化のために GeneXus の生成なしで実現することは、殆ど不可能であるという点に注意してください。

性能テストプロジェクトのためのヒント

既定では、HTTP リクエストおよび HTTP レスポンスを介して制御しない多くのパラメーターがある場合、GeneXus で性能テストスクリプトを作成することは非常に困難です。したがって、パラメーター化されたリクエストを適切に生成し 「STATUS CODE 403 - GeneXus で許可された結果がありません」といったエラーを回避するためには、Ajax のセキュリティをオフにする必要があります。 http://wiki.genexus.jp/hwikibypageid.aspx?17384


JMX または WMI といった GeneXus のモニタリングツールでテストの実行結果を補完することを強くお勧めします。


Ajax 暗号化を使用して、実際の動作をシミュレートしたい場合、 AJAX_KEY、AJAX_SECURITY_TOKEN、GX_WEBSOCKET_ID のような、ほかの一般的なパラメーターやほかの変数と同様に、実行時に Ajax リクエストを暗号化する機能をバージョン 3.2 に追加しました。

GXtest で JMeter スクリプトを生成する

GXtest は、以前に記録されたテストケースから JMeter スクリプトを生成することができます。これにより、ユーザーには次のような多くのメリットがあります:

  • 性能テストのオートメーション経験なしで、その機能を実現する GXtest によるテストケースの記録が可能 (生成後、テスト担当者はその上で作業する必要がある)
  • スクリプトの中でもっとも記述に時間がかかる部分を自動的に生成できるため、同じ作業の繰り返しに費やしていた時間を削減
  • 検証、タイマー、および基本のパラメーター化を手動で設定する必要がない。通常、これらの作業は非常に時間がかかり、かつ問題を発生させやすい。GXtest はこれらのエレメントすべてを自動的に設定可能
  • 思考時間およびログメッセージにデバッグフラグを使用
  • NTLM 認証をサポート
  • リダイレクトを自動的に管理

スクリプトジェネレーターの働き

GXtest の [JMeter スクリプトを生成] ボタンをクリックすると、パフォーマンススクリプトが生成されます。

JmeterButton.PNG

JMeter のスクリプトを作成するリクエストが送信されると、ユーザーの画面上ではテストケースが通常どおり開始されます。ただし、内部では通常とは異なる処理が多く実行されています:テストケースの実行中に、テストで使われているすべての GXtest コマンドを含む xml ファイルが生成され、同時に saz ファイルに http リクエストが記録されます。これらのファイルは、GXtest Designer のインストールフォルダにある、テストケース名のフォルダに保存されます。通常は次のロケーションにあります:Abstracta\GXtest Designer\Performance\ExecutionLog\

「saz」フォーマットは Fiddler ツールに属しており、インターネットと PC 間で、 HTTP トラフィックを記録する Proxy です。また、後でブレークポイントを介して分析したり、プロトコルレベルなどでリクエストを編集したりすることが可能です。元のリクエストを比較して、どのように JMeter で残りのスクリプトをパラメーター化する必要があるかを理解するために、このファイルは、性能テストの自動化担当者にとって非常に重要です。

これら 2 つのファイル (xml および saz) を元に、xml ファイルの GXtest コマンドおよび saz ファイルの http (または https) リクエストを使って、JMeter テストプランが生成されます。実行が完了すると、実行されたすべての GXtest コマンド、各コマンドに含まれる、コマンドと関連付けられた http (または https) リクエスト、適切なタイマー、および (設定された場合は) 対応する検証が含まれたスクリプトが生成されます。これらの結果ファイルは、Abstracta\GXtest Designer\JMeter のフォルダに作成されます。

この結果ファイルのスクリプトは、変更せずに実行準備ができている可能性があります。しかし、システムが Ajax 暗号化を使用している場合は特に、JMeter の専門家によって修正とパラメーター化を行う必要があります。通常、性能スクリプトをできるだけ実際と同じにするために、いくつかの条件の追加、新しい変数のパラメータ化、およびシステム検証の追加を行う必要があります。

JMeter スクリプトを生成するための GXtest の機能

前述のとおり、JMeter スクリプトを自動的に作成することにより、GXtest は作業の大部分を生成します。そこには GeneXus での性能テストに必要な殆どすべてが含まれています。

主な機能は次のとおりです:

  • 可読性のあるスクリプト
    • 生成されたスクリプトは可読性があり、モジュール化されている
    • ユーザーアクション (GXtest コマンド) と HTTP リクエストの間の履歴管理
    • 次のようなグローバル変数のパラメーター化: webServer、port、webapp、threads、rampup など
    • 各ユーザーアクション間への思考時間の取り込み
  • リダイレクトの追跡:
    • STATUS CODE 302 を引き起こす、すべてのリクエストを無視
    • JMeter は堅牢性の改善のため、各手順のリダイレクトを追跡
    • JMeter の「すべての埋め込まれたリソースを取得する」オプションによって、二次リクエストは無視される
  • エラーデバッグ
    • すべてのリクエストとレスポンスは、簡単なデバッグを可能にするために、JMeter のログで記録される
    • デバッグフラグ: 思考時間のスキップを有効にする (スクリプトのビルド時に実行を高速化するため)
  • 結果解析
    • レスポンス時間をより分かり易くするために、ユーザーアクションをグループ化
  • 自動パラメーター
    • データプールで使用される GeneXus の変数およびテストデータ (3 文字を超えるデータの使用時)
    • Ajax セキュリティ変数 (GX_AJAX_KEY、AJAX_SECURITY_TOKEN)
    • 一般的な変数 (GX_WEBSOCKET_ID)
    • Ajax で自動的に URL パラメーターを暗号化するための Beanshell 生成
  • 画期的な取り組み
    • 生成の前に Cookie を削除
    • JMeter での Cookie Manager の使用

未対応のアイテム

現在、生成されてないいくつかのアイテムが GXtest の次のバージョンに含まれる予定です:

  • バイナリのアップロード
  • より多くの GeneXus 変数
  • ユーザー / 開発者の変数


JMeter に生成されたファイルをインポートする方法

GXtest Designer からテストケースを実行した後、GXtest のインストールフォルダ (Abstracta\GXtest Designer\JMeter ) で生成された JMeter テストプランが使用可能になります。

生成されたファイルは「jmx」の拡張子を持ち、File -> Open JMeter と選択して開くことができます。


JMeter のインストール

JMeter は、フリーツールであり、JMeter の Web サイト からダウンロードできます。

まとめ

GeneXus は、すべての複雑さを開発者に対して非表示にし、GXtest は、GeneXus での性能テストを実現する JMeter スクリプトの作成を可能にします。 JMeter は GeneXus のリクエストを処理する際に、時間を節約するためのツールを使用してスクリプトを生成します。

また、Ajax セキュリティが有効な場合、GXtest はおそらくスクリプトでの複雑な処理が可能な唯一のオプションです。