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.
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.
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:
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:
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:
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:
Lägg till ett JVM-argument till JMeters "startprogram":
-Dfile.encoding=UTF-8
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:
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:
Ö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:
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");
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:
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.