Përshëndetje, Habr! Ky është një vazhdim i , ku do të flas për opsionet e publikimit të mesazheve në radhët me ndihmën e JMeter.
Ne po zhvillojmĂ« njĂ« autobus tĂ« dhĂ«nash pĂ«r njĂ« kompani tĂ« madhe federale. Formate tĂ« ndryshme tĂ« kĂ«rkesave, konvertime, rrugĂ«zim tĂ« ndĂ«rlikuar. PĂ«r testim, nevojitet tĂ« dĂ«rgohen shumĂ« mesazhe nĂ« radhĂ«. Me dorĂ« â Ă«shtĂ« njĂ« dhimbje, me tĂ« cilĂ«n nuk e pĂ«rballon çdo manual.

Hyrje
Megjithatë, me këtë dhimbje ishim të detyruar të pajtohemi në fillim. E gjithë ky proces filloi me RFHUtil. I fuqishëm, por i parehatshëm dhe frikshëm: E dini ju, Rusin.

I pazëvendësueshëm në disa raste, por vazhdimisht i rrëzuar në rast përdorimi të aktiv.
Testimi me të është i pamundur.
Me JMeter, gjithçka u bë më e lehtë. Pas fazës së parë të mësimit dhe zakonit, shpresa për një testim të suksesshëm filloi të shfaqet.
Përdor sëmplarët JMS Publisher dhe JMS Subscriber aktivisht. Ndryshe nga JMS Point-to-Point, kjo çift ka dukur më e lehtë për t'u punuar. Për shembull, te Subscriber në JMS Selector, mund të caktosh një variabël, te Point-to-Point - jo (ose ndoshta ky opsion nuk është shumë i qartë).
Përgatitja e sëmplarëve
JMS Publisher
- Setup â Ădo SĂ«mplar. Apache pĂ«rdoreni kĂ«tĂ« opsion, nĂ«se radhĂ«t/tĂ« dhĂ«nat janĂ« caktuar pĂ«rmes variablave.
- Skadimi (ms) = 120000. Në rast dështimi, kërkesat testuese do të zhduken nga radhët pas 2 minutash.
- PĂ«rdorni modalitetin e dorĂ«zimit jo-pĂ«rsĂ«ritĂ«s? â e vĂ«rtetĂ«. IBM , qĂ« modaliteti i qĂ«ndrueshĂ«m siguron ruajtjen e besueshme tĂ« mesazheve tĂ« transmetuara nĂ« rast dĂ«shtimi tĂ« papritur. Dhe shkĂ«mbimi mĂ« i shpejtĂ« nĂ« modalitetin jo-pĂ«rsĂ«ritĂ«s. PĂ«r qĂ«llime testimi, shpejtĂ«sia Ă«shtĂ« mĂ« e rĂ«ndĂ«sishme.
Në çdo Publisher, caktova pronësinë jms, që Subscriber do të përdorë në JMS Selector. Për çdo dërgesë krijohet një vlerë rastësore në elementin e planit të testit User Parameters:

Kështu mund të jemi të sigurt se është lexuar mesazhi i saktë.
Baza përfundimtare e JMS Publisher të paracaktuar:

JMS Subscriber
- Setup â Ădo SĂ«mplar. E kuptoni.
- Koha e pritjes (ms) = 100000. Nëse kërkesa nuk arrin në radhë pas 100 sekondash pritje, do të thotë se diçka shkoi keq.
- Ndalo midis sĂ«mplarĂ«ve? â e vĂ«rtetĂ«.
JMS Selector â njĂ« . JMS Subscriber pĂ«rfundimtar:

Si të veprojmë me cirilikun në mesazhet e transmetuara. Në JMeter, automatikisht pas leximit shfaqet keq. Për ta shmangur këtë dhe për të shijuar të madhin dhe të fuqishmin gjithmonë dhe kudo, është e nevojshme:
- Shtoni në "starter" JMeter argumentin JVM:
-Dfile.encoding=UTF-8 - Shtoni JSR223 PostProcessor në Subscriber me linjën në groovy:
prev.setDataEncoding("UTF-8")
Transmetimi i tekstit
Opsioni mĂ« tĂ« pĂ«rshtatshĂ«m. PĂ«rdoret pĂ«r testimin e testeve tĂ« reja tĂ« shkruara. Ose pĂ«r raste kur duhet tĂ« dĂ«rgohet diçka e vogĂ«l. Zgjidhni opsionin Burimi i mesazhit â Tekst Zona dhe vendosni trupin e mesazhit nĂ« bllokun e tekstit:

Transferimi i skedarit
Opsioni mĂ« i zakonshĂ«m. PĂ«rdoret pĂ«r shumicĂ«n e skenarĂ«ve. Zgjidhni opsionin Burimi i mesazhit â Nga skedari dhe jepni rrugĂ«n pĂ«r mesazhin nĂ« fushĂ«n Skedari â Emri i skedarit:

Transferimi i skedarit në fushën e tekstit
Opsioni më universale. Përdoret për shumicën e skenarëve + mund të përdoret në JMS Point-to-Point, ku nuk ka opsion të dytë për dërgim:

Transferimi i vargut të byte-ve
Opsioni më i komplikuar. Përdoret për të kontrolluar një transmetim të saktë deri në byte, pa deformime, mesazhe dhe perturbacione. Kjo nuk mund të bëhet me JMeter-in e parazgjedhur, mu e thamë me siguri.
Prandaj isha i detyruar të shkarkohej dhe modifikohej JMS Subscriber.
Këtu e zëvendësova në metodë extractContent(..) rreshtin:
buffer.append(bytesMessage.getBodyLength() + " byte janë pranuar në BytesMessage");në:
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);
}dhe e rindërtova JMeter-in.
Tani mbetet tĂ« shtoni disa JSR223 Sampler. E para â para çiftit Publisher/Subscriber pĂ«r tĂ« krijuar njĂ« skedar DAT qĂ« pĂ«rmban byte tĂ« rastĂ«sishĂ«m:
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("skedari nuk u gjet");
}E dyta â nĂ« fund tĂ« skenarit, fshin skedarin:
import java.io.File;
File RESULT_FILE = new File(vars.get("PATH_TO_BYTES"));
RESULT_FILE.delete();Dhe mos harroni të shtoni rrugën për skedarin te Publisher:

Po ashtu kontrolloni nĂ« JSR223 Assertion pĂ«r Subscriber â krahasoni byte-t origjinale me ata qĂ« mbĂ«rrijnĂ« nĂ« radhĂ«n e marrĂ«sit:
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("Krahasimi dështoi");
SampleResult.setResponseData("Byte-t kanë ndryshuar","UTF-8");
IsSuccess=false;
}Përfundim
Përshkruajta katër mënyra për dërgimin e mesazheve në radhë, të cilat i përdor çdo ditë në praktikë. Shpresoj që kjo informacion të lehtësojë jetën tuaj. Në vazhdim, planifikoj të flas për përvojën time në testimin e shkëmbimit, ku në njërin anë është radhë, dhe në anën tjetër një bazë të dhënash ose sistem skedash.
Ruani kohën tuaj. Dhe faleminderit për vëmendjen.

Burimi: habr.com
