Navbatlar va JMeter: nashriyotchi va obunachi bilan almashish

Salom, Xabr! Bu menikining davomi oldingi nashr, unda men JMeter yordamida xabarlarni navbatga qo'yish variantlari haqida gapiraman.

Biz yirik federal kompaniya uchun ma'lumotlar avtobusini yaratmoqdamiz. Har xil so'rov formatlari, transformatsiyalar, murakkab marshrutlash. Sinov uchun siz navbatga juda ko'p xabarlarni yuborishingiz kerak. Qo'lda - bu har bir chiropraktor bilan shug'ullana olmaydigan og'riq.

Navbatlar va JMeter: nashriyotchi va obunachi bilan almashish

kirish

Garchi dastlab bu dardga chidashga majbur bo'ldim. Hammasi RFHUtil bilan boshlandi. Kuchli, ammo noqulay va qo'rqinchli: Xo'sh, siz Rusni bilasiz.

Navbatlar va JMeter: nashriyotchi va obunachi bilan almashish

Ba'zi hollarda ajralmas, lekin faol foydalanishda doimiy ravishda pasayib boradi.
U bilan qulay test o'tkazish mumkin emas.

JMeter bilan hamma narsa osonlashdi. O'zlashtirish va ko'nikishning birinchi bosqichidan so'ng, baxtli sinov uchun umid paydo bo'ldi.

Men JMS Publisher va JMS Subscriber namuna oluvchilardan faol foydalanaman. JMS Point-to-Point-dan farqli o'laroq, bu juftlikdan foydalanish qulayroq tuyuldi. Masalan, JMS Selector-da Subscriber bilan siz o'zgaruvchini belgilashingiz mumkin, lekin Point-to-Point bilan siz qila olmaysiz (yoki bu usul unchalik aniq emas).

Namuna oluvchilarni tayyorlash

JMS nashriyoti

  • O'rnatish - Har bir namuna. Apache tavsiya qiladi Agar navbatlar/mavzular o'zgaruvchilar orqali ko'rsatilgan bo'lsa, ushbu parametrdan foydalaning.
  • Muddati (ms) = 120000. Muvaffaqiyatsiz bo'lsa, test so'rovlari 2 daqiqadan so'ng navbatdan yo'qoladi.
  • Doimiy bo'lmagan yetkazib berish rejimi ishlatilsinmi? - rost. IBM tasdiqlaydibu doimiy rejim to'satdan nosozlik bo'lgan taqdirda uzatilgan xabarlarning ishonchli saqlanishini ta'minlaydi. Va doimiy bo'lmagan rejimda tezroq almashish. Sinov maqsadlari uchun tezlik muhimroqdir.

Har bir nashriyotda men obunachi JMS selektorida foydalanadigan jms xususiyatini o'rnatdim. Har bir topshirish uchun foydalanuvchi parametrlari test rejasi elementida tasodifiy qiymat hosil bo'ladi:

Navbatlar va JMeter: nashriyotchi va obunachi bilan almashish

Shunday qilib, siz to'g'ri xabar o'qilganligiga ishonch hosil qilishingiz mumkin.

Oldindan tuzilgan JMS Publisherning yakuniy "bo'shligi":

Navbatlar va JMeter: nashriyotchi va obunachi bilan almashish

JMS obunachisi

  • O'rnatish - Har bir namuna. Xo'sh, tushunasiz.
  • Vaqt tugashi (ms) = 100000. Agar so'rov 100 soniya kutishdan keyin navbatga kelmasa, unda nimadir noto'g'ri ketdi.
  • Namunalar o'rtasida to'xtash kerakmi? - rost.

JMS Selector - juda qulay narsa. Yakuniy JMS obunachisi:

Navbatlar va JMeter: nashriyotchi va obunachi bilan almashish

Uzatilgan xabarlarda kirill alifbosi bilan qanday ishlash kerak. JMeter-da, sukut bo'yicha, tekshirilgandan so'ng, u egri ko'rsatiladi. Bunga yo'l qo'ymaslik va har doim va hamma joyda buyuk va qudratli narsadan bahramand bo'lish uchun sizga kerak:

  1. JMeter "boshlovchi" ga JVM argumentini qo'shing:
    -Dfile.encoding=UTF-8
  2. JSR223 PostProcessor-ni abonentga ajoyib chiziq bilan qo'shing:
    prev.setDataEncoding("UTF-8")

Matn yuboring

Eng dangasa variant. Yangi yozilgan testlarni tuzatish uchun javob beradi. Yoki hech bo'lmaganda kichik narsalarni yuborishingiz kerak bo'lgan holatlar uchun. Variantni tanlang Xabar manbai - Textarea va xabarning asosiy qismini matn blokiga joylashtiring:

Navbatlar va JMeter: nashriyotchi va obunachi bilan almashish

Faylni uzatish

Eng keng tarqalgan variant. Ko'pgina stsenariylar uchun javob beradi. Variantni tanlang Xabar manbai - fayldan va maydonda xabarga yo'lni ko'rsating Fayl - Fayl nomi:

Navbatlar va JMeter: nashriyotchi va obunachi bilan almashish

Faylni matn maydoniga o'tkazish

Eng ko'p qirrali variant. Ko'pgina stsenariylar uchun mos + JMS Point-to-Point-da ikkinchi yuborish opsiyasi mavjud bo'lmaganda ishlatilishi mumkin:

Navbatlar va JMeter: nashriyotchi va obunachi bilan almashish

Bayt massividan o'tish

Eng qiyin variant. So'rovlarning baytgacha, buzilmasdan, SMS va bezovtalanishsiz to'g'ri uzatilishini tekshirish uchun javob beradi. Siz buni standart JMeterda qila olmaysiz. shu yerda Menga bu haqda aniq aytishdi.

Shuning uchun men yuklab olishim kerak edi manbalar va o'zgartirish kodi JMS obunachisi.

Usulda almashtirildi extractContent(..) qator:

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

quyidagicha:

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

va JMeterni qayta tikladi.

Faqat bir nechta JSR223 namunalarini qo'shish qoladi. Birinchisi, tasodifiy baytlarni o'z ichiga olgan DAT faylini yaratish uchun Nashriyotchi/Abonent juftligidan oldin:

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

Ikkinchisi - skript oxirida faylni o'chiradi:

import java.io.File;

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

Va Publisher-da faylga yo'l qo'shishni unutmang:

Navbatlar va JMeter: nashriyotchi va obunachi bilan almashish

Shuningdek, JSR223 Assertion for Obunachini tekshirish - manba baytlarini qabul qiluvchining navbatda kelganlari bilan solishtiring:

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

xulosa

Men har kuni amalda ishlatadigan navbatlarga xabar yuborishning to'rtta usulini tasvirlab berdim. Umid qilamanki, bu ma'lumot hayotingizni osonlashtiradi. Davomida men bir uchida navbat, ikkinchi tomonida ma'lumotlar bazasi yoki fayl tizimi mavjud bo'lgan almashinuvni sinab ko'rish tajribam haqida gapirishni rejalashtirmoqdaman.

Vaqtingizni tejang. Va e'tiboringiz uchun rahmat.

Navbatlar va JMeter: nashriyotchi va obunachi bilan almashish

Manba: www.habr.com

a Izoh qo'shish