Кезектер және JMeter: Publisher және жазылушымен бөлісу

Сәлем, Хабр! Бұл менің жалғасы алдыңғы жарияланым, онда мен JMeter көмегімен хабарламаларды кезекке қою опциялары туралы айтатын боламын.

Біз үлкен федералды компания үшін деректер шинасын жасап жатырмыз. Түрлі сұрау форматтары, түрлендірулер, күрделі маршруттау. Тестілеу үшін кезекке көп хабарлама жіберу керек. Қолмен емдеу - бұл әр хиропрактордың қолынан келе бермейтін ауру.

Кезектер және JMeter: Publisher және жазылушымен бөлісу

Кіріспе

Бұл азапқа алғашында шыдауға тура келгенімен. Барлығы RFHUtil-тен басталды. Күшті, бірақ ыңғайсыз және қорқынышты: Сіз Русті білесіз.

Кезектер және JMeter: Publisher және жазылушымен бөлісу

Кейбір жағдайларда таптырмас, бірақ белсенді пайдалану жағдайында тұрақты түрде төмендейді.
Онымен ыңғайлы тестілеу мүмкін емес.

JMeter көмегімен бәрі оңайырақ болды. Меңгеріп, дағдыланудың бірінші кезеңінен кейін бақытты сынаққа үміт оты жая бастады.

Мен JMS Publisher және JMS Subscriber үлгілерін белсенді қолданамын. JMS Point-to-Point-тен айырмашылығы, бұл жұпты пайдалану ыңғайлырақ болып көрінді. Мысалы, JMS Selector ішіндегі Subscriber көмегімен айнымалы мәнді көрсетуге болады, бірақ Point-to-Point көмегімен мүмкін емес (немесе бұл әдіс өте айқын емес).

Сынамаларды дайындау

JMS Publisher

  • Орнату - Әрбір үлгі. Апачи ұсынады егер кезектер/тақырып айнымалы мәндер арқылы көрсетілген болса, осы опцияны пайдаланыңыз.
  • Жарамдылық мерзімі (мс) = 120000. Сәтсіздік жағдайында сынақ сұраулары 2 минуттан кейін кезектен жоғалады.
  • Тұрақты емес жеткізу режимін пайдалану керек пе? - рас. IBM бекітедібұл тұрақты режим кенеттен істен шыққан жағдайда жіберілген хабарламалардың сенімді сақталуын қамтамасыз етеді. Тұрақты емес режимде жылдам алмасу. Тестілеу мақсатында жылдамдық маңыздырақ.

Әрбір Publisher-де жазылушы JMS селекторында пайдаланатын jms сипатын орнатамын. Әрбір жіберу үшін пайдаланушы параметрлері сынақ жоспарының элементінде кездейсоқ мән жасалады:

Кезектер және JMeter: Publisher және жазылушымен бөлісу

Осылайша сіз дұрыс хабарлама оқылғанына сенімді бола аласыз.

Алдын ала конфигурацияланған JMS Publisher бағдарламасының соңғы "бос" орны:

Кезектер және JMeter: Publisher және жазылушымен бөлісу

JMS жазылушысы

  • Орнату - Әрбір үлгі. Жарайды, түсінесің.
  • Күту уақыты (мс) = 100000. Егер сұрау 100 секунд күткеннен кейін кезекке келмесе, бірдеңе дұрыс болмады.
  • Үлгілер арасында тоқтау керек пе? - рас.

JMS селекторы - өте ыңғайлы нәрсе. Соңғы JMS жазылушысы:

Кезектер және JMeter: Publisher және жазылушымен бөлісу

Жіберілген хабарламаларда кирилл әліпбиімен қалай күресуге болады. JMeter-де әдепкі бойынша, түзетуден кейін ол қисық көрсетіледі. Бұған жол бермеу және әрқашан және барлық жерде ұлы және күшті ләззат алу үшін сізге қажет:

  1. JMeter «іске қосу құралына» JVM аргументін қосыңыз:
    -Dfile.encoding=UTF-8
  2. JSR223 PostProcessor-ды жазылушыға қызықты сызықпен қосыңыз:
    prev.setDataEncoding("UTF-8")

Мәтінді жіберу

Ең жалқау нұсқа. Жаңадан жазылған сынақтарды түзету үшін қолайлы. Немесе кем дегенде кішкентай нәрсе жіберу қажет болған жағдайлар үшін. Опцияны таңдаңыз Хабарлама көзі - Textarea және мәтіндік блокқа хабарламаның негізгі бөлігін орналастырыңыз:

Кезектер және JMeter: Publisher және жазылушымен бөлісу

Файл беру

Ең көп таралған нұсқа. Көптеген сценарийлер үшін қолайлы. Опцияны таңдаңыз Хабар көзі - файлдан және өрісте хабарламаға жолды көрсетіңіз Файл - Файл атауы:

Кезектер және JMeter: Publisher және жазылушымен бөлісу

Файлды мәтіндік өріске тасымалдау

Ең әмбебап нұсқа. Көптеген сценарийлер үшін қолайлы + екінші жіберу опциясы жоқ JMS Point-to-Point бағдарламасында қолдануға болады:

Кезектер және JMeter: Publisher және жазылушымен бөлісу

Байт массивінен өту

Ең қиын нұсқа. Сұраныстардың байтқа дейін бұрмаланусыз, SMS және кедергісіз қатесіз дәл берілуін тексеру үшін қолайлы. Сіз мұны әдепкі 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 файлын жасау үшін Publisher/Accounter жұбының алдында:

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

қорытынды

Мен күн сайын тәжірибеде қолданатын хабарламаларды кезекке жіберудің төрт әдісін сипаттадым. Бұл ақпарат сіздің өміріңізді жеңілдетеді деп үміттенемін. Әрі қарай, мен бір жағында кезек, ал екінші жағында деректер базасы немесе файлдық жүйе бар алмасуды сынау тәжірибем туралы айтуды жоспарлап отырмын.

Уақытыңызды үнемдеңіз. Және назарларыңызға рахмет.

Кезектер және JMeter: Publisher және жазылушымен бөлісу

Ақпарат көзі: www.habr.com

пікір қалдыру