キューとJMeter:パブリッシャーとサブスクライバーとの交換

こんにちは、Habr!



これは以前の出版物の続編で、JMeterを使用してメッセージをキューに入れるオプションについて説明します。



大規模な連邦企業向けのデータバスを作成しています。 さまざまなクエリ形式、変換、複雑なルーティング。 テストのために、キューで大量のメッセージを送信する必要があります。 手動-すべての手動技術者が対処するわけではない痛み。







はじめに



最初はこの痛みに我慢しなければなりませんでしたが。 すべてはRFHUtilで始まり​​ました。 強力だが不快で怖い: さて、あなたはルースを知っています。







場合によっては不可欠ですが、積極的に使用する場合は安定して落ちます。

彼との便利なテストは不可能です。



JMeterを使用すると、物事が簡単になりました。 マスタリングとそれに慣れる最初の段階の後、幸せなテストの希望が来ました。



私は、JMS PublisherおよびJMS Subscriberサンプラーを積極的に使用しています。 JMS Point-to-Pointとは異なり、このカップルは作業がより便利に思えました。 たとえば、JMSセレクターでサブスクライバーのポイントツーポイントの変数を指定できます-いいえ(またはこの方法はあまり明確ではありません)。



サンプラーの準備



JMSパブリッシャー





各パブリッシャーで、サブスクライバーがJMSセレクターで使用するjmsプロパティを設定します。 出荷ごとに、User Parametersテスト計画要素でランダムな値が生成されます。







そのため、正しいメッセージが読み取られたことを確認できます。



事前構成済みのJMSパブリッシャーの最後の「ブランク」:







JMSサブスクライバー







JMS Selectorは非常に便利です 。 要約JMSサブスクライバー:







送信メッセージ内のキリル文字を処理する方法。 JMeterでは、デフォルトでは、減算後、曲がって表示されます。 これを避け、いつでもどこでも偉大で強力なものを楽しむには、次のものが必要です。



  1. JVM引数をJMeterの「ランチャー」に追加します。

    -Dfile.encoding=UTF-8
          
          



  2. groovyの行を使用して、JSR223 PostProcessorをサブスクライバーに追加します。
     prev.setDataEncoding("UTF-8")
          
          





テキスト転送



最も遅延したオプション。 新しく作成されたテストのデバッグに適しています。 または、少なくとも何か小さなものを送信する必要がある場合。 [ メッセージソース-テキスト領域 ]オプションを選択し、 メッセージ本文をテキストブロックに配置します。







ファイル転送



最も一般的なオプション。 ほとんどのシナリオに適しています。 [ メッセージソース-ファイルから ]オプションを選択し、 [ファイル]-[ファイル名]フィールドでメッセージへのパスを指定します







ファイルをテキストフィールドに転送



最も汎用性の高いオプション。 ほとんどのシナリオに適した+は、2番目の送信オプションがないJMS Point-to-Pointで使用できます。







バイト配列転送



最も難しいオプション。 歪み、SMS、および摂動を伴わずに、バイトへの要求の完全に正確な転送をチェックするのに適しています。 デフォルトのJMeterでこれを行うことはできません。 ここで彼らは間違いなくそれについて教えてくれました。



したがって、 ソースをダウンロードし JMSサブスクライバーコードを変更する必要がありまし



extractContent(..)



メソッドの行を置き換えました:



 buffer.append(bytesMessage.getBodyLength() + " bytes received in BytesMessage");
      
      





に:



 byte[] bytes = new byte[(int) bytesMessage.getBodyLength()]; bytesMessage.readBytes(bytes); try { buffer.append(new String(bytes, "UTF-8")); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); }
      
      





JMeterを再構築しました。



JSR223サンプラーをいくつか追加する必要があります。 1つ目は、ランダムバイトを含む.datファイルを作成するパブリッシャー/サブスクライバーペアの前です。



 import org.apache.commons.lang3.RandomUtils; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; vars.put("PATH_TO_BYTES", "C:\\temp\\randomBytes.dat"); File RESULT_FILE = new File(vars.get("PATH_TO_BYTES")); byte[] arr = RandomUtils.nextBytes((int)(Math.random()*10000)); try { FileOutputStream fos = new FileOutputStream(RESULT_FILE); fos.write(arr); fos.close(); } catch (IOException e) { System.out.println("file not found"); }
      
      





スクリプトの最後にある2つ目は、ファイルを削除します。



 import java.io.File; File RESULT_FILE = new File(vars.get("PATH_TO_BYTES")); RESULT_FILE.delete();
      
      





そして、Publisherからファイルへのパスを追加することを忘れないでください:







また、サブスクライバーのJSR223アサーションのチェック-ソースバイトをレシーバーのキューにあるバイトと比較します。



 import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; Path path = Paths.get(vars.get("PATH_TO_BYTES"), new String[0]); byte[] originalArray = Files.readAllBytes(path); byte[] changedArray = ctx.getPreviousResult().getResponseData(); System.out.println(changedArray.length); if (Arrays.equals(originalArray, changedArray)) { SampleResult.setResponseMessage("OK"); } else { SampleResult.setSuccessful(false); SampleResult.setResponseMessage("Comparison failed"); SampleResult.setResponseData("Bytes have changed","UTF-8"); IsSuccess=false; }
      
      





おわりに



彼はメッセージをキューで送信する4つの方法を説明しました。私は毎日実際に使用しています。 この情報があなたの人生を楽にすることを願っています。 続編では、交換テストの経験についてお話しする予定です。一方の端にはキューがあり、もう一方の端にはデータベースまたはファイルシステムがあります。



時間を大事に。 見てくれてありがとう。



画像







All Articles