قوائم الانتظار و JMeter: تبادل مع الناشر والمشترك

مرحبا يا هبر!

هذا تكملة لمنشورتي السابقة ، حيث سأتحدث عن خيارات وضع الرسائل في قوائم الانتظار باستخدام JMeter.

نصنع حافلة بيانات لشركة فدرالية كبيرة. صيغ الاستعلام المختلفة ، والتحويلات ، والتوجيه المعقد. للاختبار ، تحتاج إلى إرسال الكثير من الرسائل في قائمة الانتظار. يدويا - ألم لن يتغلب عليه كل مهندس يدوي.



مقدمة


رغم أنني اضطررت إلى تحمل هذا الألم في البداية. بدأ كل شيء مع RFHUtil. قوية ولكن غير مريحة ومخيفة: حسنًا ، أنت تعرف روس.



لا غنى عنه في بعض الحالات ، ولكن السقوط في حالة الاستخدام النشط.
اختبار مريحة معه أمر مستحيل.

مع JMeter ، أصبحت الأمور أسهل. بعد المرحلة الأولى من إتقانها والتعود عليها ، جاء الأمل في إجراء اختبار سعيد.

أنا بنشاط استخدام عينات JMS Publisher و JMS المشترك. على عكس JMS Point-to-Point ، بدا هذا الزوجان أكثر ملاءمة للعمل مع. على سبيل المثال ، في المشترك في JMS Selector ، يمكنك تحديد متغير ، من نقطة إلى نقطة - لا (أو هذه الطريقة ليست واضحة للغاية).

تحضير العينات


الناشر JMS


  • الإعداد - كل عينة. يوصي Apache باستخدام هذا الخيار إذا كانت قوائم الانتظار / المواضيع محددة من خلال المتغيرات.
  • انتهاء الصلاحية (مللي ثانية) = 120000. في حالة الفشل ، ستختفي طلبات الاختبار من قائمة الانتظار بعد دقيقتين.
  • استخدام وضع التسليم غير المستمر؟ - صحيح. تزعم IBM أن الوضع المستمر يوفر استمرار موثوق للرسائل في حالة حدوث فشل مفاجئ. ومشاركة أسرع في الوضع غير المستمر. لأغراض الاختبار ، السرعة أكثر أهمية.

في كل ناشر ، أقوم بتعيين خاصية jms التي سيستخدمها المشترك في محدد JMS. لكل شحنة ، يتم إنشاء قيمة عشوائية في عنصر خطة اختبار معلمات المستخدم:



لذلك يمكنك التأكد من قراءة الرسالة الصحيحة.

"الفراغ" النهائي للناشر JMS المكون مسبقًا:



مشترك Jms


  • الإعداد - كل عينة. حسنا ، أنت تحصل على هذه النقطة.
  • المهلة (مللي ثانية) = 100000. إذا لم يوضع الطلب في قائمة الانتظار بعد 100 ثانية من الانتظار ، فسيحدث خطأ ما.
  • توقف بين العينة؟ - صحيح.


JMS محدد هو شيء مفيد جدا. ملخص مشترك JMS:



كيفية التعامل مع الأبجدية السيريلية في الرسائل المرسلة. في JMeter ، بشكل افتراضي ، بعد الطرح ، يتم عرضه بشكل ملتوي. لتجنب ذلك والاستمتاع بالأقوياء والأقوياء دائمًا وفي كل مكان ، تحتاج إلى:

  1. أضف وسيطة JVM إلى JMeter "launcher":
    -Dfile.encoding=UTF-8 
  2. أضف JSR223 PostProcessor إلى المشترك مع وجود خط على groovy:
     prev.setDataEncoding("UTF-8") 

نقل النص


الخيار الكسول. مناسب لتصحيح الأخطاء المكتوبة حديثًا. أو للحالات التي تحتاج فيها إلى إرسال شيء صغير على الأقل. حدد الخيار Message message - Textarea ثم ضع نص الرسالة في كتلة نصية:



نقل الملفات


الخيار الأكثر شيوعا. مناسبة لمعظم السيناريوهات. حدد الخيار Message source - From file وحدد المسار إلى الرسالة في الحقل File - Filename:



نقل الملف إلى حقل النص


الخيار الأكثر تنوعا. مناسبة لمعظم السيناريوهات + يمكن استخدامها في JMS Point-to-Point ، حيث لا يوجد خيار إرسال ثاني:



نقل مجموعة بايت


الخيار الأكثر صعوبة. مناسبة للتحقق من نقل دقة معصوم من الطلبات إلى البايت ، دون تحريف ، والرسائل القصيرة والاضطراب. لا يمكنني القيام بذلك في 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 Sampler. الأول قبل زوج الناشر / المشترك لإنشاء ملف .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"); } 

الثاني ، في نهاية البرنامج النصي ، يحذف الملف:

 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; } 

استنتاج


ووصف أربع طرق لإرسال الرسائل في قائمة انتظار ، والتي أستخدمها في الممارسة كل يوم. آمل أن تكون هذه المعلومات تجعل حياتك أسهل. في التسلسل ، أخطط للتحدث عن تجربتي في اختبار التبادلات ، حيث توجد قائمة انتظار من جهة ، ومن ناحية أخرى توجد قاعدة بيانات أو نظام ملفات.

اعتني بوقتك. وشكرا للمشاهدة.

صورة

Source: https://habr.com/ru/post/ar446536/


All Articles