Tere, Habr! See on minu , kus räägin JMeteriga sõnumite järjekordadesse paigutamise võimalustest.
Me loome andmebusse suurele riiklikule ettevõttele. Erinevad päringu formaadid, teisendused, keeruline marsruutimine. Testimise jaoks on vaja saata palju sõnumeid järjekordadesse. Kätega - see on valu, millega ei saa hakkama iga käsitööline.

Sissejuhatus
Kuigi selle valutunde talumisega tuli esialgu leppida. Kõik algas RFHUtilist. Tugev, kuid ebamugav ja hirmutav: Te juba teate Venemaad.

Asendamatu mõnes olukorras, kuid pidevalt kokku kukkuv aktiivse kasutamise korral.
Mugav testimine selle abil ei ole võimalik.
JMeteriga on kõik lihtsam. Pärast esimest etappi, millega tutvuda ja harjuda, paistis lootus õnnelikule testimisele.
Kasutab aktiivselt JMS Publisheri ja JMS Subscriberit. Erinevalt JMS Point-to-Point'ist, tundub see paar mugavam töötada. Näiteks Subscriberis saab JMS Selectoris määrata muutuja, Point-to-Pointis - ei saa (või see meetod ei ole liiga ilmne).
Süvendasemete ettevalmistus
JMS Publisher
- Seadistus - Iga näidis. Apache kasutada seda valikut, kui järjekorrad/teemad on määratletud muutuja kaudu.
- Aegumine (ms) = 120000. Kui testimispäringud katkevad, kaovad need järjekorrast kahe minuti pärast.
- Kas kasutada mitte-püsivat kohaletoimetamismoodust? - tõene. IBM , et püsiv režiim tagab edastatavate sõnumite usaldusväärse salvestamise ootamatute tõrgete korral. Ja mitte-püsivas režiimis kiirema vahetuse. Testimise eesmärkide jaoks on olulisem kiirus.
Igas Publisheris määran jms-omaduse, mida Subscriber kasutab JMS Selectoris. Iga saatmise jaoks genereeritakse testi plaani elementide User Parameters juhuslik väärtus:

Nii võib olla kindel, et loetakse õiget sõnumit.
Kokkuvõtlik „mall” eelkonfigureeritud JMS Publisherist:

JMS Subscriber
- Seadistus - Iga näidis. Noh, te mõistsite.
- Aegumine (ms) = 100000. Kui päring ei jõua järjekorda 100 sekundi jooksul, siis on midagi valesti läinud.
- Kas peatada näidiste vahel? - tõene.
JMS Selector - üsna mugav . Lõplik JMS Subscriber:

Kuidas tulla toime kirillitsaga edastatavates sõnumites. JMeteris kuvatakse see vaikimisi pärast lugemist nihkes. Selle vältimiseks ja suure ja vägeva nautimiseks igal ajal igal pool, tuleb:
- Lisada JMeteri "käivitajale" JVM argument:
-Dfile.encoding=UTF-8 - Lisada Subscriberisse JSR223 PostProcessor koos rida groovyga:
prev.setDataEncoding("UTF-8")
Teksti edastamine
Kõige lõdvem variant. Sobib värskelt kirjutatud testide silumiseks või olukordadeks, kus on vajalik saata midagi väikest. Valige valik Sõnumi allikas — Tekstiala ja paigalda sõnumi sisu tekstiblokki:

Faili edastamine
Kõige sagedasem variant. Sobib enamiku stsenaariumide jaoks. Valige valik Sõnumi allikas — Failist ja määrake sõnumi tee väljale Fail — Failinimi:

Faili edastamine tekstiväljas
Kõige universaalsem variant. Sobib enamiku stsenaariumide jaoks + võib kasutada JMS Punkt-punktis, kus ei ole teist edastusvarianti:

Baiti massiivi edastamine
Kõige keerulisem variant. Sobib nõudlike küsimuste täpseks edastamiseks, ilma moonutusteta, SMS-ideta ja peitumata. Seda ei saa standardse JMeteriga teha, mind on sellest kindlasti teavitatud.
Seetõttu tuli alla laadida ja modifitseerida JMS Subscriber.
Asendasin meetodis extractContent(..) rea:
buffer.append(bytesMessage.getBodyLength() + " baiti saadud BytesMessage'is");selle asemel:
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);
}ja ehitasin JMeteri kokku.
Jäänud on lisada paar JSR223 proovijat. Esimene — enne paar Publisheri / Subscriberi, et luua DAT-fail, mis sisaldab juhuslikke byte'e:
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("faili ei leitud");
}Teine — stsenaariumi lõpus, kustutab faili:
import java.io.File;
File RESULT_FILE = new File(vars.get("PATH_TO_BYTES"));
RESULT_FILE.delete();Ja ärge unustage lisada faili teed Publisherile:

Samuti kontrollige JSR223 Assertionis Subscriberis — võrrelge algseid byte'e nende alluva jadas olevatega:
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("Võrdlemine ebaõnnestus");
SampleResult.setResponseData("Baitid on muutunud","UTF-8");
IsSuccess=false;
}Kokkuvõte
Kirjeldasin nelja viisi, kuidas edastada sõnumeid järjekordades, mida kasutan igapäevaselt praktikas. Loodan, et see teave teeb teie elu lihtsamaks. Jätkates plaanin rääkida oma kogemustest vahetuste testimisel, kus ühes otsas on järjekord ja teises andmebaas või failisüsteem.
Hoidke oma aega. Tänan tähelepanu eest.

Allikas: habr.com
