Järjekorrad ja JMeter: jagamine avaldaja ja tellijaga

Tere, Habr! See on minu oma järg eelmine väljaanne, milles räägin JMeteri abil sõnumite järjekordadesse paigutamise võimalustest.

Valmistame andmesiini suurele föderaalettevõttele. Erinevad päringuvormingud, teisendused, keerukas marsruutimine. Testimiseks peate saatma järjekorda palju sõnumeid. Käsitsi on valu, millega mitte iga kiropraktik ei suuda toime tulla.

Järjekorrad ja JMeter: jagamine avaldaja ja tellijaga

Sissejuhatus

Kuigi ma pidin seda valu alguses taluma. Kõik sai alguse RFHUtilist. Võimas, kuid ebamugav ja hirmutav: Noh, sa tead Rusi.

Järjekorrad ja JMeter: jagamine avaldaja ja tellijaga

Mõnel juhul hädavajalik, kuid aktiivse kasutamise korral väheneb pidevalt.
Mugav testimine on sellega võimatu.

JMeteriga on kõik muutunud lihtsamaks. Pärast esimest meisterdamise ja sellega harjumise etappi hakkas koitma lootus õnnelikuks testimiseks.

Kasutan aktiivselt JMS Publisheri ja JMS Subscriberi proovivõtjaid. Erinevalt JMS-ist punktist punktini tundus seda paari mugavam kasutada. Näiteks JMS Selectori funktsiooni Subscriber abil saate määrata muutuja, kuid punktist punktini ei saa (või pole see meetod eriti ilmne).

Proovivõtturite ettevalmistamine

JMS kirjastus

  • Seadistamine – iga näidis. Apache soovitab kasutage seda valikut, kui järjekorrad/teemad on määratud muutujate kaudu.
  • Aegumine (ms) = 120000. Ebaõnnestumise korral kaovad testipäringud järjekorrast 2 minuti pärast.
  • Kas kasutada mittepüsivat edastusrežiimi? - tõsi. IBM nõudedet püsirežiim tagab edastatud sõnumite usaldusväärse säilimise äkilise tõrke korral. Ja kiirem vahetus mittepüsivas režiimis. Testimise eesmärgil on kiirus olulisem.

Igas väljaandjas määran jms atribuudi, mida tellija kasutab JMS-i valijas. Iga esitamise jaoks luuakse kasutajaparameetrite testiplaani elemendis juhuslik väärtus:

Järjekorrad ja JMeter: jagamine avaldaja ja tellijaga

Nii saate olla kindel, et loetakse õiget sõnumit.

Eelkonfigureeritud JMS-i avaldaja viimane "tühik":

Järjekorrad ja JMeter: jagamine avaldaja ja tellijaga

JMS-i tellija

  • Seadistamine – iga näidis. No saate aru.
  • Timeout (ms) = 100000. Kui päring ei jõua järjekorda pärast 100 sekundit ootamist, siis läks midagi valesti.
  • Peatada proovide vahel? - tõsi.

JMS Selector - üsna mugav asi. Lõplik JMS-i tellija:

Järjekorrad ja JMeter: jagamine avaldaja ja tellijaga

Kuidas käsitleda kirillitsa tähestikku edastatavates sõnumites. JMeteris kuvatakse see vaikimisi pärast korrektuuri lugemist kõveralt. Selle vältimiseks ja alati ja kõikjal suure ja võimsa nautimiseks peate:

  1. Lisage JMeteri käivitusprogrammile JVM argument:
    -Dfile.encoding=UTF-8
  2. Lisage JSR223 PostProcessor abonendile vaga joonega:
    prev.setDataEncoding("UTF-8")

Saada tekst

Kõige laisem variant. Sobib värskelt kirjutatud testide silumiseks. Või juhtudel, kui on vaja saata vähemalt midagi väikest. Valige suvand Sõnumi allikas – Textarea ja asetage sõnumi sisu tekstiplokki:

Järjekorrad ja JMeter: jagamine avaldaja ja tellijaga

Failide edastamine

Kõige tavalisem variant. Sobib enamiku stsenaariumide jaoks. Valige suvand Sõnumi allikas – failist ja märkige väljale sõnumi tee Fail – failinimi:

Järjekorrad ja JMeter: jagamine avaldaja ja tellijaga

Faili teisaldamine tekstiväljale

Kõige mitmekülgsem variant. Sobib enamiku stsenaariumide jaoks + saab kasutada JMS-i punkt-punktis, kus teist saatmisvalikut pole:

Järjekorrad ja JMeter: jagamine avaldaja ja tellijaga

Baitimassiivi edastamine

Kõige keerulisem variant. Sobib päringute eksimatult täpse edastamise kontrollimiseks kuni baidini ilma moonutuste, SMS-ide ja häiringuteta. Vaikimisi JMeteris seda teha ei saa. siin Mulle räägiti sellest kindlasti.

Nii et ma pidin alla laadima allikatest ja muuta kood JMS-i tellija.

Meetodis asendatud extractContent(..) rida:

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

peal:

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 ehitas ümber JMeteri.

Jääb vaid lisada paar JSR223 proovivõtturit. Esimene on enne väljaandja/tellija paari, et luua juhuslikke baite sisaldav DAT-fail:

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

Teine - skripti lõpus kustutab faili:

import java.io.File;

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

Ja ärge unustage Publisheris failile teed lisada:

Järjekorrad ja JMeter: jagamine avaldaja ja tellijaga

Ja ka JSR223 Assertion for Subscriber kontroll - võrrelge lähtebaite adressaadi järjekorda saabuvate baitidega:

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

Järeldus

Kirjeldasin nelja võimalust sõnumite järjekordadesse saatmiseks, mida ma praktikas igapäevaselt kasutan. Loodan, et see teave muudab teie elu lihtsamaks. Jätkuvalt plaanin rääkida oma kogemusest, kuidas testida börsi, kus ühes otsas on järjekord ja teises andmebaas või failisüsteem.

Säästa oma aega. Ja tänan tähelepanu eest.

Järjekorrad ja JMeter: jagamine avaldaja ja tellijaga

Allikas: www.habr.com

Lisa kommentaar