Fronty a JMeter: sdílení s vydavatelem a předplatitelem

Dobrý den, Habr! Toto je moje pokračování předchozí publikace, ve kterém budu hovořit o možnostech umístění zpráv do front pomocí JMeter.

Vyrábíme datovou sběrnici pro velkou federální společnost. Různé formáty požadavků, transformace, složité směrování. Pro testování je potřeba poslat do fronty hodně zpráv. Ručně je bolest, kterou ne každý chiropraktik zvládne.

Fronty a JMeter: sdílení s vydavatelem a předplatitelem

úvod

I když jsem tu bolest zpočátku musel snášet. Všechno to začalo s RFHUtil. Mocné, ale trapné a děsivé: No, znáš Rus.

Fronty a JMeter: sdílení s vydavatelem a předplatitelem

V některých případech nepostradatelný, ale v případě aktivního používání neustále klesá.
Pohodlné testování s ním není možné.

S JMeter je vše jednodušší. Po první fázi osvojování a zvykání začala svítat naděje na šťastné testování.

Aktivně používám samplery JMS Publisher a JMS Subscriber. Na rozdíl od JMS Point-to-Point se tato dvojice zdála pohodlnější k použití. Například s Subscriber v JMS Selector můžete zadat proměnnou, ale s Point-to-Point nemůžete (nebo tato metoda není příliš zřejmá).

Příprava vzorkovačů

Vydavatel JMS

  • Nastavení - každý vzorek. Apache doporučuje použijte tuto volbu, pokud jsou fronty/témata zadány pomocí proměnných.
  • Vypršení platnosti (ms) = 120000. V případě selhání testovací požadavky zmizí z fronty po 2 minutách.
  • Použít netrvalý režim doručování? - skutečný. IBM schvaluježe trvalý režim zajišťuje spolehlivé uchování přenášených zpráv v případě náhlého selhání. A rychlejší výměna v neperzistentním režimu. Pro účely testování je důležitější rychlost.

V každém vydavateli nastavím vlastnost jms, kterou bude odběratel používat v selektoru JMS. Pro každé odeslání je v prvku plánu testování uživatelských parametrů vygenerována náhodná hodnota:

Fronty a JMeter: sdílení s vydavatelem a předplatitelem

Tímto způsobem si můžete být jisti, že je přečtena správná zpráva.

Poslední „prázdné místo“ předkonfigurovaného JMS Publisher:

Fronty a JMeter: sdílení s vydavatelem a předplatitelem

Předplatitel JMS

  • Nastavení - každý vzorek. No, rozumíš.
  • Timeout (ms) = 100000. Pokud požadavek nedorazí do fronty po 100 sekundách čekání, pak se něco pokazilo.
  • Zastavit mezi vzorky? - skutečný.

JMS Selector - docela pohodlné věc. Konečný odběratel JMS:

Fronty a JMeter: sdílení s vydavatelem a předplatitelem

Jak zacházet s azbukou v přenášených zprávách. V JMeter se standardně po korektuře zobrazuje křivě. Chcete-li se tomu vyhnout a užít si skvělé a mocné vždy a všude, musíte:

  1. Přidejte argument JVM do „spouštěče“ JMeter:
    -Dfile.encoding=UTF-8
  2. Přidejte JSR223 PostProcessor do Subscriber s groovy linkou:
    prev.setDataEncoding("UTF-8")

Poslat zprávu

Nejlínější varianta. Vhodné pro ladění čerstvě napsaných testů. Nebo pro případy, kdy potřebujete poslat alespoň něco malého. Vyberte možnost Zdroj zprávy - Textarea a umístěte tělo zprávy do textového bloku:

Fronty a JMeter: sdílení s vydavatelem a předplatitelem

Přenos souborů

Nejběžnější možnost. Vhodné pro většinu scénářů. Vyberte možnost Zdroj zprávy - Ze souboru a v poli označte cestu ke zprávě Soubor – název souboru:

Fronty a JMeter: sdílení s vydavatelem a předplatitelem

Přenos souboru do textového pole

Nejuniverzálnější možnost. Vhodné pro většinu scénářů + lze použít v JMS Point-to-Point, kde není možnost druhého odeslání:

Fronty a JMeter: sdílení s vydavatelem a předplatitelem

Předávání bajtového pole

Nejtěžší varianta. Vhodné pro kontrolu neomylně přesného přenosu požadavků až na byte, bez zkreslení, SMS a rušení. Ve výchozím JMeter to nebudete moci udělat. zde Určitě mi o tom bylo řečeno.

Musel jsem tedy stáhnout Zdroje a upravit kód Předplatitel JMS.

Nahrazeno v metodě extractContent(..) čára:

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

v:

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 přestavěl JMeter.

Zbývá jen přidat pár vzorků JSR223. První je před párem Vydavatel/Předplatitel, aby se vytvořil soubor DAT obsahující 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 odstraní soubor:

import java.io.File;

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

A nezapomeňte přidat cestu k souboru v Publisheru:

Fronty a JMeter: sdílení s vydavatelem a předplatitelem

A také kontrola v JSR223 Assertion for Subscriber - porovnejte zdrojové bajty s těmi, které přicházejí do fronty příjemce:

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ávěr

Popsal jsem čtyři způsoby odesílání zpráv do front, které používám každý den v praxi. Doufám, že vám tyto informace usnadní život. V pokračování plánuji mluvit o svých zkušenostech s testováním výměny, kde je na jednom konci fronta a na druhém databáze nebo souborový systém.

Ušetřete čas. A děkuji za pozornost.

Fronty a JMeter: sdílení s vydavatelem a předplatitelem

Zdroj: www.habr.com

Přidat komentář