Redovi čekanja i JMeter: dijeljenje s izdavačem i pretplatnikom

Pozdrav, Habr! Ovo je nastavak mog prethodna objava, u kojem ću govoriti o opcijama za postavljanje poruka u redove pomoću JMetera.

Radimo podatkovnu sabirnicu za veliku saveznu tvrtku. Razni formati zahtjeva, transformacije, zamršeno usmjeravanje. Za testiranje morate poslati puno poruka u red čekanja. Ručno je bol s kojom se ne može nositi svaki kiropraktičar.

Redovi čekanja i JMeter: dijeljenje s izdavačem i pretplatnikom

Uvod

Iako sam u početku morala trpjeti tu bol. Sve je počelo s RFHUtilom. Moćno, ali neugodno i strašno: Pa, znaš Rusa.

Redovi čekanja i JMeter: dijeljenje s izdavačem i pretplatnikom

Nezamjenjiv u nekim slučajevima, ali stalno opada u slučaju aktivne uporabe.
Praktično testiranje je nemoguće s njim.

Uz JMeter sve je postalo lakše. Nakon prve faze svladavanja i privikavanja, rađala se nada za sretno testiranje.

Aktivno koristim uzorke JMS Publisher i JMS Subscriber. Za razliku od JMS Point-to-Point, ovaj par se činio praktičnijim za korištenje. Na primjer, s Pretplatnikom u JMS Selectoru možete navesti varijablu, ali s Point-to-Point ne možete (ili ova metoda nije baš očita).

Priprema uzorkivača

Izdavač JMS

  • Postavljanje - svaki uzorak. Apache preporučuje koristite ovu opciju ako su redovi/teme navedeni kroz varijable.
  • Istek (ms) = 120000. U slučaju neuspjeha, testni zahtjevi će nestati iz reda čekanja nakon 2 minute.
  • Koristiti način nepostojane isporuke? - istina. IBM zahtjevataj trajni način rada osigurava pouzdano očuvanje poslanih poruka u slučaju iznenadnog kvara. I brža razmjena u nepostojanom načinu rada. Za potrebe testiranja, brzina je važnija.

U svakom Publisheru postavljam jms svojstvo koje će Pretplatnik koristiti u JMS Selectoru. Za svako podnošenje generira se nasumična vrijednost u elementu plana testiranja korisničkih parametara:

Redovi čekanja i JMeter: dijeljenje s izdavačem i pretplatnikom

Na taj način možete biti sigurni da je pročitana ispravna poruka.

Posljednji "prazan prostor" unaprijed konfiguriranog JMS Publishera:

Redovi čekanja i JMeter: dijeljenje s izdavačem i pretplatnikom

JMS pretplatnik

  • Postavljanje - svaki uzorak. Pa, razumiješ.
  • Timeout (ms) = 100000. Ako zahtjev ne stigne u red nakon 100 sekundi čekanja, onda je nešto pošlo po zlu.
  • Zaustaviti između uzoraka? - istina.

JMS Selector - prilično zgodan stvar. Konačni JMS pretplatnik:

Redovi čekanja i JMeter: dijeljenje s izdavačem i pretplatnikom

Kako postupati s ćirilicom u prenesenim porukama. U JMeteru se prema zadanim postavkama, nakon lekture, prikazuje krivo. Kako biste to izbjegli i uživali u velikom i moćnom uvijek i posvuda, trebate:

  1. Dodajte JVM argument u JMeter "pokretač":
    -Dfile.encoding=UTF-8
  2. Dodajte JSR223 postprocesor pretplatniku s groovy linijom:
    prev.setDataEncoding("UTF-8")

Pošalji tekst

Najljenija opcija. Prikladno za otklanjanje pogrešaka u svježe napisanim testovima. Ili za slučajeve kada trebate poslati barem nešto sitno. Odaberite opciju Izvor poruke - Textarea i smjestite tijelo poruke u tekstualni blok:

Redovi čekanja i JMeter: dijeljenje s izdavačem i pretplatnikom

Prijenos datoteke

Najčešća opcija. Prikladno za većinu scenarija. Odaberite opciju Izvor poruke - Iz datoteke i u polju označiti put do poruke Datoteka - Naziv datoteke:

Redovi čekanja i JMeter: dijeljenje s izdavačem i pretplatnikom

Prijenos datoteke u tekstualno polje

Najsvestranija opcija. Prikladno za većinu scenarija + može se koristiti u JMS Point-to-Point gdje ne postoji druga opcija slanja:

Redovi čekanja i JMeter: dijeljenje s izdavačem i pretplatnikom

Prosljeđivanje niza bajtova

Najteža opcija. Prikladno za provjeru nepogrešivo točnog prijenosa zahtjeva do bajta, bez izobličenja, SMS-a i smetnji. Nećete to moći učiniti u zadanom JMeteru. здесь Definitivno su mi rekli za ovo.

Pa sam morao preuzeti izvori i modificirati šifra JMS pretplatnik.

Zamijenjeno u metodi extractContent(..) crta:

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 izgrađen JMeter.

Sve što preostaje je dodati par JSR223 uzorkivača. Prvi je prije para Izdavač/Pretplatnik za stvaranje DAT datoteke koja sadrži nasumične 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 skripte, 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 u Publisheru:

Redovi čekanja i JMeter: dijeljenje s izdavačem i pretplatnikom

I također provjera u JSR223 tvrdnji za pretplatnika - usporedite izvorne bajtove s onima koji stignu u red čekanja 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("Comparison failed");
	   SampleResult.setResponseData("Bytes have changed","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 se na jednom kraju nalazi red čekanja, a na drugom baza podataka ili datotečni sustav.

Uštedite svoje vrijeme. I hvala na pažnji.

Redovi čekanja i JMeter: dijeljenje s izdavačem i pretplatnikom

Izvor: www.habr.com

Dodajte komentar