JMeterを使用したJMSアプリケーションエミュレーターの作成

Habréには、JMeterを使用してJMSを介して対話するスピーカーのストレステスト専用の出版物がすでにありました。 JMeterを(テスト済みの)システムでビジネスプロセスを開始する外部システムであるロードソースとして使用する方法について説明します。 しかし、プロセスがシステム内で開始された場合、外部システムに要求を送信し、応答を待機します(つまり、外部システムにスタブが必要です)。



負荷テストプロジェクトの1つで、この質問に対する答えを見つける必要がありました。



当時、2つのソリューションがありました。

  1. テストに必要な単純なロジックを実装する独自のJMSアプリケーションを作成します。
  2. JMeterを使用します。


最初のパスは、JMSアプリケーション(単純なアプリケーションも)を作成した経験がなかったため、不確実な人件費(比較的小さいとはいえ)を約束しました。

JMeterでのある程度の経験が、集計レポートなどの要素のおかげで、将来のスタブの作業をリアルタイムで監視できることを考えると、2番目のオプションで停止することになりました。



まず、スタブの要件が策定されました。

  1. キューからメッセージを読み取ります。
  2. CorrelationIdおよびビジネスデータを抽出して、適切な応答を選択して送信します。
  3. 一定時間待機します(外部システムからの遅延応答をエミュレートするため)。
  4. いくつかの動的データとともに適切な応答を送信します。




JMeterの初期設定は、出版物「JMeterを使用したMQプロトコルを使用したサービスの自動テスト」で説明されているものと同じですが、 JMeterプラグイン (特にデバッグ用のDummy Sampler)も使用されました。



スレッドグループとして、テスト計画はかなり標準的でした(スタブの動作中にスレッド数の特別な規制はありませんでした)。



次に、JMSサブスクライバーを追加します。これは、キューからメッセージを読み取る役割を果たします。 次の図は、サブスクライバの設定を示しています。







結果ツリーの表示を使用してキューからメッセージを読み取った後、そのプロパティを確認できます。 メッセージキューから読み取られたメッセージのプロパティの例を以下に示します。







JMSCorrelationID(テスト対象のキューマネージャーとアプリケーションがスタブによって送信されたメッセージが応答である要求を理解できるようにするメッセージプロパティの1つ)とビジネス日付(この場合、適切な応答を選択できるXML要求のフィールドの1つの値)を取得するために使用します正規表現エクストラクター(下図の使用例):







NT方式では、外部システムからの応答遅延が修正されたため、Constant Timerを使用してそれをエミュレートし(以下を参照)、連続したリクエスト間の固定遅延を作成します。 テスト中にさまざまな遅延が必要な場合は、ランダムタイマーを詳しく調べることをお勧めします。



画像



これで、読み取ったメッセージに基づいて、適切な回答を選択できます。 これを行うには、スイッチコントローラーを使用します。







Switchコントローラー内の要求に応答を送信するには、p_destination変数(Subscriberからの正規表現によって抽出された)の可能な値に対応する名前でJMS Publisherサンプラーをアタッチします。



JMS Publisherサンプラーの本文(テキストメッセージエリア)内に、JMeter変数(タイムスタンプなど)を使用して動的データを追加します。



JMS Publisherサンプラーの[JMSプロパティ]領域で、ID値$ {corrId}のJMSCorrelationIdを追加します。







作業の統計を分析するために、集計レポートを追加できます。これにより、受信および送信されたメッセージの数に関してスタブの動作の統計を分析できます。



まとめると、自己開発と比較してJMeterを使用してJMSスタブを作成する利点についてもう一度説明します。

  1. 足を踏み入れる機会が少なくなります(記述する必要のあるコードの量は最小限に抑えられ、ロジックのほとんどはJMeter要素を使用して実装できます)。
  2. スタブの操作に関する統計を収集するためのグラフィカルインターフェイスとリスナーがありますが、自分でスタブをねじ込む必要はありません。
  3. スタブ(TomcatまたはGlassfish)をデプロイするために追加のソフトウェアをインストールする必要はありません。
  4. 簡単な起動(通常のJMeterテストとして実行)。



All Articles