Redovi i JMeter: razmjena s Publisher i Subscriber

Pozdrav, Habr! Ovo je nastavak mog prošlog članka, u kojem ću govoriti o opcijama slanja poruka u redovima pomoću JMetera.

Radimo podatkovnu sabirnicu za veliku federalnu kompaniju. Različiti formati zahteva, konverzije, složeno usmeravanje. Za testiranje je potrebno slati puno poruka u redovima. Ručno — to je muka s kojom se ne može svako suočiti.

Redovi i JMeter: razmjena s Publisher i Subscriber

Uvod

Iako se s tom mukom prvo trebalo pomiriti. Sve je počelo s RFHUtilom. Moćan, ali nezgodan i zastrašujuć: Pa znate vi Rusa.

Redovi i JMeter: razmjena s Publisher i Subscriber

Neophodan u nekim slučajevima, ali stalno se ruši pri aktivnom korišćenju.
Udobno testiranje s njim nije moguće.

S JMeterom je sve postalo jednostavnije. Nakon prvog koraka u učenju i navikavanju, zasjala je nada za srećno testiranje.

Aktivno koristim JMS Publisher i JMS Subscriber uzorke. Za razliku od JMS Point-to-Point, ova dvojica su mi delovali praktičniji za rad. Na primer, kod Subscriber u JMS Selector možete navesti promenljivu, kod Point-to-Point — ne (ili taj način nije baš očigledan).

Priprema uzoraka

JMS Publisher

  • Postavka — Svaki Uzorak. Apache preporučuje koristiti ovu opciju ako su redovi/tokovi postavljeni putem promenljivih.
  • Istek (ms) = 120000. U slučaju kvara, testni zahtevi će nestati iz reda nakon 2 minuta.
  • Koristiti način isporuke koji nije postojan? — true. IBM tvrdio je, što postojani način osigurava pouzdano čuvanje prenesenih poruka u slučaju iznenadnog kvara. A brža razmena u nepostojanom režimu. Za testne svrhe važnija je brzina.

U svakom Publisheru postavljam jms-svojstvo koje će Subscriber koristiti u JMS Selector-u. Za svaku pošiljku generiše se nasumična vrednost u elementu testnog plana User Parameters:

Redovi i JMeter: razmjena s Publisher i Subscriber

Tako se može biti siguran da je pročitana ispravna poruka.

Konačni 'model' unapred podešenog JMS Publisher-a:

Redovi i JMeter: razmjena s Publisher i Subscriber

JMS Subscriber

  • Postavka — Svaki Uzorak. Pa ste shvatili.
  • Timeout (ms) = 100000. Ako zahtev ne stigne u red nakon 100 sekundi čekanja, znači da nešto nije u redu.
  • Prekinuti između uzorka? — true.

JMS Selector — prilično zgodna stvar. Konačni JMS Subscriber:

Redovi i JMeter: razmjena s Publisher i Subscriber

Kako da se nosimo s ćirilicom u poslatim porukama. U JMetru se po defaultu nakon čitanja prikazuje naopako. Da biste to izbegli i uživali u velikom i moćnom svuda i uvek, trebate:

  1. Dodati u 'pokretač' JMetra JVM argument:
    -Dfile.encoding=UTF-8
  2. Dodati JSR223 PostProcessor u Subscriber s redom na groovy:
    prev.setDataEncoding("UTF-8")

Slanje teksta

Najlijenija opcija. Prikladna za debugiranje svježe napisanih testova. Ili za slučajeve kada je potrebno poslati nešto malo. Odaberite opciju Izvor poruke — Textarea i stavite tijelo poruke u tekstualni blok:

Redovi i JMeter: razmjena s Publisher i Subscriber

Prenos datoteke

Najčešća opcija. Prikladna za većinu scenarija. Odaberite opciju Izvor poruke — Iz datoteke i navedite put do poruke u polju Datoteka — Ime datoteke:

Redovi i JMeter: razmjena s Publisher i Subscriber

Prenos datoteke u tekstualnom polju

Najuniverzalnija opcija. Prikladna za većinu scenarija + može se koristiti u JMS Point-to-Point, gdje nema druge opcije slanja:

Redovi i JMeter: razmjena s Publisher i Subscriber

Prenos bajtne niza

Najkompleksnija opcija. Prikladna za testiranje bezgrešne i precizne transmisije zahtjeva do bajta, bez iskrivljenja, sms i perturbacija. To se ne može postići u defaultnom JMeteru, ovdje potvrđeno mi je to.

Zato sam morao preuzeti izvori i modificirati kod JMS Subscriber.

Zamijenio sam u metodi extractContent(..) redak:

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

na:

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

i ponovno sastavio JMeter.

Preostalo je dodati par JSR223 Sampler. Prvi — ispred para Publisher/Subscriber za stvaranje DAT datoteke koja sadrži slučajne bajtove:

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

Drugi — na kraju scenarija, briše datoteku:

import java.io.File;

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

I ne zaboravite dodati put do datoteke kod Publishera:

Redovi i JMeter: razmjena s Publisher i Subscriber

A također provjeru u JSR223 Assertion za Subscriber — usporedite izvorne bajtove s onima koji dolaze u red primatelja:

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("Usporedba nije uspjela");
	   SampleResult.setResponseData("Bajti su se promijenili","UTF-8");
     	   IsSuccess=false;
	}

Zaključak

Opisao sam četiri načina slanja poruka u redove koje svakodnevno koristim u praksi. Nadam se da će vam ove informacije olakšati život. U nastavku planiram pričati o svom iskustvu testiranja razmjene, gdje je na jednom kraju red, a na drugom — baza podataka ili datotečni sustav.

Čuvajte svoje vrijeme. Hvala na pažnji.

Redovi i JMeter: razmjena s Publisher i Subscriber

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster