Köer och JMeter: utbyte med Publisher och Subscriber

Hej, Habr! Detta Àr en sequel till min tidigare publicering, dÀr jag kommer att berÀtta om olika alternativ för att publicera meddelanden i köer med hjÀlp av JMeter.

Vi skapar en databas för ett stort federalt företag. Olika begÀran format, transformationer, komplicerad routing. För testning behöver vi skicka mÄnga meddelanden till köer. Att göra det manuellt Àr en plÄga, vilket inte alla manualhanterare klarar av.

Köer och JMeter: utbyte med Publisher och Subscriber

Introduktion

Även om man fick uthĂ€rda denna smĂ€rta i början. Allt började med RFHUtil. Kraftfull, men obekvĂ€m och skrĂ€mmande: Ni vet ju vem Руса.

Köer och JMeter: utbyte med Publisher och Subscriber

OersÀttlig i vissa fall, men kraschar konsekvent vid aktiv anvÀndning.
BekvÀm testning med den Àr omöjlig.

Med JMeter blev allt enklare. Efter första steget med att lÀra sig och vÀnja sig, tÀndes hoppet för lyckad testning.

Jag anvÀnder aktivt JMS Publisher och JMS Subscriber. Till skillnad frÄn JMS Point-to-Point, verkar denna duo vara mer bekvÀm i arbetet. Till exempel, hos Subscriber i JMS Selector kan man ange en variabel, hos Point-to-Point gÄr det inte (eller sÄ Àr denna metod inte sÄ uppenbar).

Förberedelse av samplers

JMS Publisher

  • Setup — Varje exempel. Apache rekommenderar anvĂ€nda detta alternativ om köerna/topicarna sĂ€tts via variabler.
  • Expiration (ms) = 120000. Vid ett misslyckande kommer de testbegĂ€rningar som skickats att försvinna frĂ„n kön efter 2 minuter.
  • AnvĂ€nd icke-bestĂ€ndig leveranslĂ€ge? — sant. IBM hĂ€vdar, att bestĂ€ndigt lĂ€ge sĂ€kerstĂ€ller tillförlitlig lagring av överförda meddelanden vid plötsligt fel. Och snabbare utbyte i icke-bestĂ€ndigt lĂ€ge. För testĂ€ndamĂ„l Ă€r hastighet viktigare.

I varje Publisher stÀller jag in jms-egenskapen som Subscriber kommer att anvÀnda i JMS Selector. För varje sÀndning genereras ett slumpmÀssigt vÀrde i testplanens User Parameters:

Köer och JMeter: utbyte med Publisher och Subscriber

SÄ kan man vara sÀker pÄ att rÀtt meddelande lÀsts.

Den slutliga "dummy" av den förinstÀllda JMS Publisher:

Köer och JMeter: utbyte med Publisher och Subscriber

JMS Subscriber

  • Setup — Varje exempel. Ni förstĂ„r.
  • Timeout (ms) = 100000. Om begĂ€ran inte anlĂ€nder till kön efter 100 sekunders vĂ€ntan, betyder det att nĂ„got gĂ„tt fel.
  • Stopp mellan exempel? — sant.

JMS Selector — ganska praktisk sak. Den slutliga JMS Subscriber:

Köer och JMeter: utbyte med Publisher och Subscriber

Hur hantera kyrilliska tecken i skickade meddelanden. I JMeter visas de som standard snett nÀr de lÀses. För att undvika detta och njuta av den stora och mÀktiga alltid och överallt, mÄste man:

  1. LĂ€gga till ett JVM-argument i "startaren" JMeter:
    -Dfile.encoding=UTF-8
  2. LĂ€gg till JSR223 PostProcessor i Subscriber med raden i groovy:
    prev.setDataEncoding("UTF-8")

Överföring av text

Det mest latenta alternativet. Passar för att göra fel sökningar av nyss skrev tester. Antingen för situationer dĂ€r man behöver skicka nĂ„got litet. VĂ€lj alternativ Meddelande kĂ€lla — Textarea och placera meddelandets kropp i textblocket:

Köer och JMeter: utbyte med Publisher och Subscriber

Filöverföring

Det vanligaste alternativet. Passar för de flesta scenarier. VĂ€lj alternativ Meddelande kĂ€lla — FrĂ„n fil och ange sökvĂ€gen till meddelandet i fĂ€ltet Fil — Filnamn:

Köer och JMeter: utbyte med Publisher och Subscriber

Filöverföring i textfÀltet

Det mest universella alternativet. Passar för de flesta scenarier + kan anvÀndas i JMS Point-to-Point, dÀr det inte finns nÄgot andra överföringsalternativ:

Köer och JMeter: utbyte med Publisher och Subscriber

Överföring av byte-array

Det mest komplexa alternativet. Passar för att kontrollera felfri överföring av förfrÄgningar till byte, utan förvrÀngning, sms och störningar. Detta kan inte göras i standard JMeter, hÀr det blev uttalat för mig.

DÀrför var jag tvungen att ladda ner kÀllkod och modifiera kod JMS Subscriber.

Jag ersatte i metoden extractContent(..) raden:

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

till:

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

och byggde om JMeter.

Bara att lĂ€gga till ett par JSR223 Sampler. Första — före paret Publisher/Subscriber för att skapa DAT-fil som innehĂ„ller slumpmĂ€ssiga byte:

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

Den andra — i slutet av scenariot, tar bort filen:

import java.io.File;

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

Och glöm inte att lÀgga till sökvÀgen till filen vid Publisher:

Köer och JMeter: utbyte med Publisher och Subscriber

Samt kontroll i JSR223 Assertion för Subscriber — jĂ€mför de ursprungliga bytena med dem som kommer till mottagarens kö:

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("JÀmförelsen misslyckades");
	   SampleResult.setResponseData("Byten har Àndrats","UTF-8");
     	   IsSuccess=false;
	}

Slutsats

Jag har beskrivit fyra sÀtt att skicka meddelanden i köer som jag anvÀnder i praktiken varje dag. Jag hoppas att denna information gör ditt liv enklare. Framöver planerar jag att berÀtta om mina erfarenheter av att testa utbyten, dÀr det i ena Ànden Àr en kö och i den andra en databas eller filsystem.

Spara din tid. Och tack för din uppmÀrksamhet.

Köer och JMeter: utbyte med Publisher och Subscriber

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster