Köer och JMeter: delning med utgivare och prenumerant

Hej, Habr! Det här är en uppföljare till min tidigare publicering, där jag kommer att prata om alternativ för att placera meddelanden i köer med JMeter.

Vi gör en databuss för ett stort federalt företag. Olika förfrågningsformat, transformationer, intrikat routing. För att testa behöver du skicka många meddelanden till kön. Manuellt är en smärta som inte alla kiropraktorer kan hantera.

Köer och JMeter: delning med utgivare och prenumerant

Inledning

Fast jag fick stå ut med denna smärta först. Allt började med RFHUtil. Kraftfull, men besvärlig och skrämmande: Ja, du vet Rus.

Köer och JMeter: delning med utgivare och prenumerant

Oumbärlig i vissa fall, men minskar stadigt vid aktiv användning.
Bekväm testning är omöjlig med den.

Med JMeter har allt blivit enklare. Efter det första skedet av att bemästra och vänja sig vid det började hoppet gryta för glada tester.

Jag använder aktivt JMS Publisher och JMS Subscriber samplers. Till skillnad från JMS Point-to-Point verkade detta par bekvämare att använda. Till exempel, med Subscriber i JMS Selector kan du ange en variabel, men med Point-to-Point kan du inte (eller så är den här metoden inte särskilt uppenbar).

Förbereder provtagare

JMS förlag

  • Installation - Varje prov. Apache rekommenderar använd det här alternativet om köer/ämnen specificeras genom variabler.
  • Utgångsdatum (ms) = 120000. Vid misslyckande försvinner testbegäranden från kön efter 2 minuter.
  • Använd icke-beständig leveransläge? - Sann. IBM kravenatt beständigt läge säkerställer tillförlitlig bevarande av överförda meddelanden i händelse av ett plötsligt fel. Och snabbare utbyte i icke-beständigt läge. För teständamål är hastigheten viktigare.

I varje utgivare ställer jag in en jms-egenskap som prenumeranten kommer att använda i JMS-väljaren. För varje inlämning genereras ett slumpmässigt värde i testplanelementet för användarparametrar:

Köer och JMeter: delning med utgivare och prenumerant

På så sätt kan du vara säker på att rätt meddelande läses.

Den sista "tomma" för en förkonfigurerad JMS-utgivare:

Köer och JMeter: delning med utgivare och prenumerant

JMS-abonnent

  • Installation - Varje prov. Tja, du förstår.
  • Timeout (ms) = 100000. Om förfrågan inte kommer i kön efter 100 sekunders väntan, så gick något fel.
  • Stoppa mellan proverna? - Sann.

JMS Selector - ganska bekvämt en gädda. Slutlig JMS-prenumerant:

Köer och JMeter: delning med utgivare och prenumerant

Hur man hanterar det kyrilliska alfabetet i sända meddelanden. I JMeter, som standard, efter korrekturläsning, visas det snett. För att undvika detta och njuta av det fantastiska och kraftfulla alltid och överallt måste du:

  1. Lägg till ett JVM-argument till JMeters "startprogram":
    -Dfile.encoding=UTF-8
  2. Lägg till JSR223 PostProcessor till prenumerant med groovy linje:
    prev.setDataEncoding("UTF-8")

Skicka text

Det lataste alternativet. Lämplig för felsökning av nyskrivna tester. Eller för fall när du behöver skicka åtminstone något litet. Välj alternativ Meddelandekälla - Textarea och placera meddelandets brödtext i ett textblock:

Köer och JMeter: delning med utgivare och prenumerant

Filöverföring

Det vanligaste alternativet. Lämplig för de flesta scenarier. Välj alternativ Meddelandekälla - Från fil och ange sökvägen till meddelandet i fältet Fil - Filnamn:

Köer och JMeter: delning med utgivare och prenumerant

Överföra en fil till ett textfält

Det mest mångsidiga alternativet. Lämplig för de flesta scenarier + kan användas i JMS Point-to-Point där det inte finns något andra sändningsalternativ:

Köer och JMeter: delning med utgivare och prenumerant

Passerar en byte-array

Det svåraste alternativet. Lämplig för att kontrollera den ofelbart exakta överföringen av förfrågningar ner till byten, utan distorsion, SMS och störningar. Du kommer inte att kunna göra detta i standard JMeter. här Jag fick definitivt höra om detta.

Så jag var tvungen att ladda ner källor och ändra код JMS-abonnent.

Ersatt i metoden extractContent(..) linje:

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

på:

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.

Allt som återstår är att lägga till ett par JSR223 Samplers. Den första är före utgivare/prenumerantparet för att skapa en 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 skriptet, 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 i Publisher:

Köer och JMeter: delning med utgivare och prenumerant

Och även en check i JSR223 Assertion for Subscriber - jämför källbyten med de som kommer i 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("Comparison failed");
	   SampleResult.setResponseData("Bytes have changed","UTF-8");
     	   IsSuccess=false;
	}

Slutsats

Jag beskrev fyra sätt att skicka meddelanden till köer, som jag använder varje dag i praktiken. Jag hoppas att denna information gör ditt liv enklare. I fortsättningen tänker jag berätta om min erfarenhet av att testa en växel där det är kö i ena änden och en databas eller filsystem i den andra.

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

Köer och JMeter: delning med utgivare och prenumerant

Källa: will.com

Lägg en kommentar