Fronty a JMeter: zdieľanie s vydavateľom a predplatiteľom

Ahoj Habr! Toto je pokračovanie môjho predchádzajúcej publikácii, v ktorej budem hovoriť o možnostiach umiestňovania správ do frontov pomocou JMeter.

Vyrábame dátovú zbernicu pre veľkú federálnu spoločnosť. Rôzne formáty požiadaviek, transformácie, zložité smerovanie. Na testovanie musíte do fronty poslať veľa správ. Manuálne je bolesť, ktorú nie každý chiropraktik zvládne.

Fronty a JMeter: zdieľanie s vydavateľom a predplatiteľom

Úvod

Aj keď som najprv musel znášať túto bolesť. Všetko to začalo s RFHUtil. Silný, ale trápny a desivý: No, poznáš Rusa.

Fronty a JMeter: zdieľanie s vydavateľom a predplatiteľom

V niektorých prípadoch nepostrádateľný, ale v prípade aktívneho používania neustále klesá.
Pohodlné testovanie je s ním nemožné.

S JMeter je všetko jednoduchšie. Po prvej fáze zvládnutia a zvyknutia začala svitať nádej na šťastné testovanie.

Aktívne používam samplery JMS Publisher a JMS Subscriber. Na rozdiel od JMS Point-to-Point sa tento pár zdal pohodlnejší na použitie. Napríklad s Subscriber v JMS Selector môžete zadať premennú, ale s Point-to-Point nie (alebo táto metóda nie je veľmi zrejmá).

Príprava vzorkovníkov

Vydavateľ JMS

  • Nastavenie - Každá vzorka. Apache odporúča použite túto voľbu, ak sú fronty/témy špecifikované prostredníctvom premenných.
  • Expirácia (ms) = 120000. V prípade zlyhania zmiznú požiadavky na test z frontu po 2 minútach.
  • Použiť režim trvalého doručovania? - pravda. IBM nárokyže trvalý režim zaisťuje spoľahlivé uchovanie prenášaných správ v prípade náhleho zlyhania. A rýchlejšia výmena v neperzistentnom režime. Pre účely testovania je dôležitejšia rýchlosť.

V každom vydavateľovi nastavím vlastnosť jms, ktorú bude predplatiteľ používať v selektore JMS. Pre každé odoslanie sa v prvku plánu testovania používateľských parametrov vygeneruje náhodná hodnota:

Fronty a JMeter: zdieľanie s vydavateľom a predplatiteľom

Takto si môžete byť istí, že je prečítaná správna správa.

Posledný „prázdny priestor“ vopred nakonfigurovaného vydavateľa JMS:

Fronty a JMeter: zdieľanie s vydavateľom a predplatiteľom

Predplatiteľ JMS

  • Nastavenie - Každá vzorka. No chápeš.
  • Časový limit (ms) = 100000 100. Ak požiadavka nepríde do frontu po XNUMX sekundách čakania, niečo sa pokazilo.
  • Zastaviť medzi vzorkami? - pravda.

JMS Selector - celkom pohodlné vec. Konečný predplatiteľ JMS:

Fronty a JMeter: zdieľanie s vydavateľom a predplatiteľom

Ako sa vysporiadať s azbukou v prenášaných správach. V JMeter sa štandardne po korektúre zobrazuje krivo. Aby ste sa tomu vyhli a užili si skvelé a mocné vždy a všade, musíte:

  1. Pridajte argument JVM do „spúšťača“ JMeter:
    -Dfile.encoding=UTF-8
  2. Pridajte JSR223 PostProcessor k odberateľovi s drážkou:
    prev.setDataEncoding("UTF-8")

Odoslať text

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

Fronty a JMeter: zdieľanie s vydavateľom a predplatiteľom

Prenos súborov

Najbežnejšia možnosť. Vhodné pre väčšinu scenárov. Vyberte možnosť Zdroj správy - Zo súboru a v poli uveďte cestu k správe Súbor – názov súboru:

Fronty a JMeter: zdieľanie s vydavateľom a predplatiteľom

Prenos súboru do textového poľa

Najuniverzálnejšia možnosť. Vhodné pre väčšinu scenárov + možno použiť v JMS Point-to-Point, kde nie je možnosť druhého odoslania:

Fronty a JMeter: zdieľanie s vydavateľom a predplatiteľom

Odovzdanie bajtového poľa

Najťažšia možnosť. Vhodné na kontrolu bezchybne presného prenosu požiadaviek až na bajt, bez skreslenia, SMS a rušenia. V predvolenom JMeter to nebudete môcť urobiť. tu Bolo mi o tom určite povedané.

Tak som musel stiahnuť zdrojov a upravovať kód Predplatiteľ JMS.

Nahradené v metóde extractContent(..) riadok:

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

a prestavaný JMeter.

Zostáva len pridať pár vzoriek JSR223. Prvý je pred párom Publisher/Subscriber, aby sa vytvoril súbor DAT obsahujúci 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("file not found");
        }

Druhý - na konci skriptu vymaže 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 v Publisheri:

Fronty a JMeter: zdieľanie s vydavateľom a predplatiteľom

A tiež kontrola v tvrdení JSR223 pre predplatiteľa - porovnajte zdrojové bajty s tými, ktoré prichádzajú do frontu 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("Comparison failed");
	   SampleResult.setResponseData("Bytes have changed","UTF-8");
     	   IsSuccess=false;
	}

Záver

Popísal som štyri spôsoby odosielania správ do frontov, ktoré v praxi používam každý deň. Dúfam, že vám tieto informácie uľahčia život. V pokračovaní plánujem hovoriť o mojich skúsenostiach s testovaním výmeny, kde je na jednom konci front a na druhom databáza alebo súborový systém.

Ušetrite čas. A ďakujem za pozornosť.

Fronty a JMeter: zdieľanie s vydavateľom a predplatiteľom

Zdroj: hab.com

Pridať komentár