GXtest の JMeter スクリプトの構築
Contents |
JMeter
JMeter はパフォーマンステスト (負荷 / ストレス) のためのオープ ンソース ツール (無償) であり、この分野で最も使用されているツールです。ブラウザーを実際に使用することなく、ブラウザーをシミュレートするための Web サーバーへの HTTP (または HTTPS) リクエストを有効にします。GXtest を使用すると、クリックするだけで JMeter スクリプトをビルドすることができ、独自のアクション (検証、条件、パラメーター化など)を実行するためにそのスクリプトを調整することができます。
JMeter は、大規模なアクティブユーザー数やイテレーション回数を定義するテストシナリオを実行することで、特定の負荷環境での現実的なシナリオのシミュレーションが可能です。下図では JMeter のテストプランの例を示しています。
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 スクリプトを生成] ボタンをクリックすると、パフォーマンススクリプトが生成されます。
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 はおそらくスクリプトでの複雑な処理が可能な唯一のオプションです。