صف و جی متر: اشتراک گذاری با ناشر و مشترک

سلام، هابر! این یک دنباله برای من است انتشار قبلی، که در آن در مورد گزینه هایی برای قرار دادن پیام ها در صف ها با استفاده از JMeter صحبت خواهم کرد.

ما در حال ساخت یک گذرگاه داده برای یک شرکت بزرگ فدرال هستیم. فرمت های مختلف درخواست، تبدیل، مسیریابی پیچیده. برای تست، باید پیام های زیادی به صف ارسال کنید. دستی دردی است که هر کایروپراکتیک نمی تواند آن را تحمل کند.

صف و جی متر: اشتراک گذاری با ناشر و مشترک

معرفی

هر چند اول باید این درد را تحمل می کردم. همه چیز با RFHUtil شروع شد. قدرتمند، اما بی دست و پا و ترسناک: خوب، شما روس را می شناسید.

صف و جی متر: اشتراک گذاری با ناشر و مشترک

در برخی موارد ضروری است، اما در صورت استفاده فعال به طور پیوسته در حال کاهش است.
تست راحت با آن غیرممکن است.

با JMeter همه چیز آسان تر شده است. پس از اولین مرحله تسلط و عادت به آن، امید برای آزمایش مبارک شروع به طلوع کرد.

من فعالانه از نمونه‌برداران JMS Publisher و JMS Subscriber استفاده می‌کنم. برخلاف JMS Point-to-Point، استفاده از این جفت راحت تر به نظر می رسید. به عنوان مثال، با Subscriber در JMS Selector می توانید یک متغیر را مشخص کنید، اما با Point-to-Point نمی توانید (یا این روش خیلی واضح نیست).

آماده سازی سمپلرها

ناشر JMS

  • راه اندازی - هر نمونه. آپاچی توصیه می کند اگر صف ها/موضوع ها از طریق متغیرها مشخص شده اند از این گزینه استفاده کنید.
  • انقضا (ms) = 120000. در صورت عدم موفقیت، درخواست های تست پس از 2 دقیقه از صف حذف می شوند.
  • از حالت تحویل غیر مداوم استفاده کنید؟ - درست است، واقعی. IBM تصدیق می کنداین حالت مداوم، حفظ قابل اعتماد پیام های ارسال شده را در صورت خرابی ناگهانی تضمین می کند. و تبادل سریعتر در حالت غیر مداوم. برای اهداف آزمایشی، سرعت مهمتر است.

در هر Publisher یک خاصیت jms را تنظیم می کنم که مشترک در انتخابگر JMS استفاده می کند. برای هر ارسال، یک مقدار تصادفی در عنصر طرح تست پارامترهای کاربر ایجاد می شود:

صف و جی متر: اشتراک گذاری با ناشر و مشترک

به این ترتیب می توانید مطمئن شوید که پیام صحیح خوانده شده است.

آخرین "خالی" یک ناشر JMS از پیش پیکربندی شده:

صف و جی متر: اشتراک گذاری با ناشر و مشترک

مشترک JMS

  • راه اندازی - هر نمونه. خوب فهمیدی
  • مهلت زمانی (ms) = 100000. اگر درخواست پس از 100 ثانیه انتظار به صف نرسد، مشکلی پیش آمده است.
  • توقف بین نمونه ها؟ - درست است، واقعی.

انتخابگر JMS - بسیار راحت است چیز. مشترک نهایی JMS:

صف و جی متر: اشتراک گذاری با ناشر و مشترک

نحوه برخورد با الفبای سیریلیک در پیام های ارسالی در JMeter به صورت پیش فرض پس از تصحیح به صورت کج نمایش داده می شود. برای جلوگیری از این امر و لذت بردن از عالی و قدرتمند همیشه و همه جا، باید:

  1. یک آرگومان JVM را به «راه‌انداز» JMeter اضافه کنید:
    -Dfile.encoding=UTF-8
  2. اضافه کردن JSR223 PostProcessor به مشترک با خط groovy:
    prev.setDataEncoding("UTF-8")

ارسال متن

تنبل ترین گزینه مناسب برای اشکال زدایی تست های تازه نوشته شده. یا برای مواردی که باید حداقل چیزی کوچک ارسال کنید. گزینه را انتخاب کنید منبع پیام - Textarea و متن پیام را در یک بلوک متنی قرار دهید:

صف و جی متر: اشتراک گذاری با ناشر و مشترک

انتقال پرونده

رایج ترین گزینه. برای اکثر سناریوها مناسب است. گزینه را انتخاب کنید منبع پیام - از فایل و مسیر پیام را در فیلد مشخص کنید فایل - نام فایل:

صف و جی متر: اشتراک گذاری با ناشر و مشترک

انتقال یک فایل به یک فیلد متنی

همه کاره ترین گزینه. مناسب برای اکثر سناریوها + را می توان در 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 است. اولین مورد قبل از جفت Publisher/Subscriber برای ایجاد یک فایل 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 اضافه کنید:

صف و جی متر: اشتراک گذاری با ناشر و مشترک

و همچنین بررسی JSR223 Assertion for Subscriber - بایت های منبع را با بایت هایی که در صف دریافت کننده می رسند مقایسه کنید:

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

نتیجه

چهار راه برای ارسال پیام به صف ها را توضیح دادم که هر روز در عمل از آنها استفاده می کنم. امیدوارم این اطلاعات زندگی شما را آسان تر کند. در ادامه قصد دارم در مورد تجربه خود از آزمایش صرافی صحبت کنم که در یک انتها صف و در طرف دیگر پایگاه داده یا سیستم فایل وجود دارد.

در وقت خود صرفه جویی کنید. و ممنون از توجه شما

صف و جی متر: اشتراک گذاری با ناشر و مشترک

منبع: www.habr.com

اضافه کردن نظر