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

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

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

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

مقدمة

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

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

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

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

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

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

ناشر JMS

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

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

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

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

"الفارغ" الأخير لناشر JMS الذي تم تكوينه مسبقًا:

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

مشترك JMS

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

محدد JMS - مريح للغاية شيء. المشترك النهائي في JMS:

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

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

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

ارسل رسالة

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

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

نقل الملفات

الخيار الأكثر شيوعا. مناسبة لمعظم السيناريوهات. حدد الخيار مصدر الرسالة - من الملف وحدد مسار الرسالة في الحقل الملف - اسم الملف:

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

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

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

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

تمرير مجموعة بايت

الخيار الأصعب. مناسب للتحقق من النقل الدقيق للطلبات وصولاً إلى البايت، دون تشويه أو رسائل نصية أو إزعاج. لن تتمكن من القيام بذلك في 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. الأول هو قبل زوج الناشر/المشترك لإنشاء ملف 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:temprandomBytes.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:

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

وأيضًا التحقق من تأكيد 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;
	}

اختتام

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

وفر وقتك. وشكرا لاهتمامكم.

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

المصدر: www.habr.com

إضافة تعليق