Järjekorrad ja JMeter: vahetus Publisheri ja Subscriberiga

Tere, Habr! See on minu eelmine postitus, 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.

Järjekorrad ja JMeter: vahetus Publisheri ja Subscriberiga

Sissejuhatus

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

Järjekorrad ja JMeter: vahetus Publisheri ja Subscriberiga

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 soovitab 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 väidab, 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:

Järjekorrad ja JMeter: vahetus Publisheri ja Subscriberiga

Nii võib olla kindel, et loetakse õiget sõnumit.

Kokkuvõtlik „mall” eelkonfigureeritud JMS Publisherist:

Järjekorrad ja JMeter: vahetus Publisheri ja Subscriberiga

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 asi. Lõplik JMS Subscriber:

Järjekorrad ja JMeter: vahetus Publisheri ja Subscriberiga

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:

  1. Lisada JMeteri "käivitajale" JVM argument:
    -Dfile.encoding=UTF-8
  2. 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:

Järjekorrad ja JMeter: vahetus Publisheri ja Subscriberiga

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:

Järjekorrad ja JMeter: vahetus Publisheri ja Subscriberiga

Faili edastamine tekstiväljas

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

Järjekorrad ja JMeter: vahetus Publisheri ja Subscriberiga

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, siin mind on sellest kindlasti teavitatud.

Seetõttu tuli alla laadida allikakoode ja modifitseerida koodi 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:

Järjekorrad ja JMeter: vahetus Publisheri ja Subscriberiga

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.

Järjekorrad ja JMeter: vahetus Publisheri ja Subscriberiga

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster