Ahoj, Habr! Toto je sequel môjho , 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.

Ú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.

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 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 , ž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:

Takto si môžeme byť istí, že prečítané je správne správa.
Konečná „šablóna“ prednastaveného JMS Publishera:

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á . Konečný JMS Subscriber:

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:
- Pridať do „spúšťacieho“ JMeteru argument JVM:
-Dfile.encoding=UTF-8 - 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:

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:

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:

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é, to mi jednoznačne povedali.
Preto som musel stiahnuť a upraviť 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:

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ť.

Zdroj: habr.com
