مرحبا يا هبر!
هذا تكملة لمنشورتي
السابقة ، حيث سأتحدث عن خيارات وضع الرسائل في قوائم الانتظار باستخدام 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 ، بشكل افتراضي ، بعد الطرح ، يتم عرضه بشكل ملتوي. لتجنب ذلك والاستمتاع بالأقوياء والأقوياء دائمًا وفي كل مكان ، تحتاج إلى:
- أضف وسيطة JVM إلى JMeter "launcher":
-Dfile.encoding=UTF-8
- أضف 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; }
استنتاج
ووصف أربع طرق لإرسال الرسائل في قائمة انتظار ، والتي أستخدمها في الممارسة كل يوم. آمل أن تكون هذه المعلومات تجعل حياتك أسهل. في التسلسل ، أخطط للتحدث عن تجربتي في اختبار التبادلات ، حيث توجد قائمة انتظار من جهة ، ومن ناحية أخرى توجد قاعدة بيانات أو نظام ملفات.
اعتني بوقتك. وشكرا للمشاهدة.