Fronty a JMeter: výmena s Publisherom a Subscriberom

Ahoj, Habr! Toto je sequel môjho predchádzajúceho príspevku, v ktorom sa podelím o možnosti umiestnenia správ do frontov pomocou JMeter.

Robíme dátovú zbernicu pre veľkú federálnu spoločnosť. Rôzne formáty požiadaviek, transformácie, zložitá routovanie. Na testovanie je potrebné odoslať veľa správ do frontov. Ručne — bolesť, ktorou sa nevyrovná každý testér.

Fronty a JMeter: výmena s Publisherom a Subscriberom

Úvod

Aj keď sa s touto bolesťou muselo vyrovnávať na začiatku. Všetko začalo s RFHUtil. Mocný, ale nepohodlný a desivý: No, poznáte Rusa.

Fronty a JMeter: výmena s Publisherom a Subscriberom

Nezastupiteľný v niektorých prípadoch, ale stabilne padajúci pri aktívnom používaní.
Pohodlné testovanie s ním je nemožné.

S JMeter sa všetko stalo jednoduchšie. Po prvom kroku s osvojením a zvyknutím si zasvietila nádej na šťastné testovanie.

Aktívne používam vzorkovače JMS Publisher a JMS Subscriber. Na rozdiel od JMS Point-to-Point, táto dvojica sa mi zdá pohodlnejšia na prácu. Napríklad, v Subscriberovi v JMS Selektore môžem uviesť premennú, v Point-to-Point — nie (buď tento spôsob nie je príliš zrejmý).

Príprava vzorkovačov

JMS Publisher

  • Nastavenie — každá vzorka. Apache odporúča použiť túto možnosť, ak sú fronty/témy definované prostredníctvom premenných.
  • Expiration (ms) = 120000. V prípade zlyhania testovacie požiadavky zmiznú z frontu po 2 minútach.
  • Použiť módu doručovania bez ukladania? — pravda. IBM tvrdí, že persistent mód zabezpečuje spoľahlivé uloženie prenášaných správ v prípade náhleho zlyhania. A rýchlejší prechod v móde bez ukladania. Pre testovacie účely je dôležitejšia rýchlosť.

V každom Publisheri nastavujem jms-vlastnosť, ktorú Subscriber použije v JMS Selektore. Pre každé odoslanie sa generuje náhodná hodnota v prvku testovacieho plánu User Parameters:

Fronty a JMeter: výmena s Publisherom a Subscriberom

Takto si môžeme byť istí, že prečítané je správne správa.

Konečná „šablóna“ prednastaveného JMS Publishera:

Fronty a JMeter: výmena s Publisherom a Subscriberom

JMS Subscriber

  • Nastavenie — každá vzorka. No, pochopili ste.
  • Timeout (ms) = 100000. Ak požiadavka nepríde do frontu po 100 sekundách čakania, znamená to, že niečo je zle.
  • Zastaviť medzi vzorkami? — pravda.

JMS Selektor — dosť pohodlná vecička. Konečný JMS Subscriber:

Fronty a JMeter: výmena s Publisherom a Subscriberom

Ako sa vyrovnať s cyrilikou v odosielaných správach. V JMeter sa predvolene po prečítaní zobrazuje krivo. Aby ste sa tomu vyhli a užívali si mocné a veľkolepé všade a vždy, potrebujete:

  1. Pridať do „spúšťacieho“ JMeteru argument JVM:
    -Dfile.encoding=UTF-8
  2. Pridať JSR223 PostProcessor do Subscriber s riadkom na groovy:
    prev.setDataEncoding("UTF-8")

Prenos textu

Najlenivejší variant. Vhodný na ladenie čerstvo napísaných testov. Alebo pre prípady, keď je potrebné poslať aspoň niečo malé. Vyberte možnosť Zdroj správy — Textarea a umiestnite telo správy do textového bloku:

Fronty a JMeter: výmena s Publisherom a Subscriberom

Prenos súboru

Najčastejší variant. Vhodný pre väčšinu scenárov. Vyberte možnosť Zdroj správy — Z súboru a zadajte cestu k správe do poľa Súbor — Názov súboru:

Fronty a JMeter: výmena s Publisherom a Subscriberom

Prenos súboru v textovom poli

Najuniverzálnejší variant. Vhodný pre väčšinu scenárov + môže sa používať v JMS Point-to-Point, kde neexistuje druhá možnosť odosielania:

Fronty a JMeter: výmena s Publisherom a Subscriberom

Prenos bajtového poľa

Najzložitejší variant. Vhodný na kontrolu bezchybného prenosu požiadaviek po bajtoch, bez skreslení, SMS a perturbácie. Urobiť to v predvolenom nastavení JMeter nie je možné, tu to mi jednoznačne povedali.

Preto som musel stiahnuť zdroje a upraviť kód JMS Subscriber.

Nahradil som v metóde extractContent(..) riadok:

buffer.append(bytesMessage.getBodyLength() + " bajtov prijatých v 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);
}

a znovu zostaviť JMeter.

Zostáva pridať pár JSR223 Sampler. Prvý — pred pár Publisher/Subscriber na vytvorenie DAT súboru, ktorý obsahuje náhodné bajty:

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("súbor nenájdený");
        }

Druhý — na konci scenára, odstraňuje súbor:

import java.io.File;

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

A nezabudnite pridať cestu k súboru u Publisher:

Fronty a JMeter: výmena s Publisherom a Subscriberom

A tiež kontrolu v JSR223 Assertion pre Subscriber — porovnať pôvodné bajty s týmito, ktoré prichádzajú do fronty príjemcu:

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("Porovnanie zlyhalo");
	   SampleResult.setResponseData("Bajty sa zmenili","UTF-8");
     	   IsSuccess=false;
	}

Záver

Opísal som štyri spôsoby odosielania správ do frontu, ktoré každý deň používam v praxi. Dúfam, že tieto informácie vám uľahčia život. V ďalšom pláne chcem hovoriť o svojej skúsenosti s testovaním výmeny, kde na jednom konci je front a na druhom databáza alebo súborový systém.

Chráňte si svoj čas. A ďakujem za pozornosť.

Fronty a JMeter: výmena s Publisherom a Subscriberom

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster