Eilės ir JMeter: bendrinimas su leidėju ir prenumeratoriumi

Sveiki, Habr! Tai mano tęsinys ankstesnis leidinys, kuriame kalbėsiu apie pranešimų įdėjimo į eiles naudojant JMeter parinktis.

Gaminame duomenų magistralę didelei federalinei įmonei. Įvairūs užklausų formatai, transformacijos, sudėtingas maršruto parinkimas. Norint atlikti testavimą, į eilę reikia išsiųsti daug pranešimų. Rankiniu būdu yra skausmas, su kuriuo ne kiekvienas chiropraktikas gali susidoroti.

Eilės ir JMeter: bendrinimas su leidėju ir prenumeratoriumi

įvedimas

Nors iš pradžių turėjau taikstytis su šiuo skausmu. Viskas prasidėjo nuo RFHUtil. Galingas, bet nepatogus ir baisus: Na, tu žinai Rusą.

Eilės ir JMeter: bendrinimas su leidėju ir prenumeratoriumi

Kai kuriais atvejais būtinas, tačiau aktyvaus naudojimo atveju nuolat mažėja.
Patogus testavimas su juo neįmanomas.

Su JMeter viskas tapo lengviau. Po pirmojo įsisavinimo ir pripratimo etapo ėmė ryškėti laimingų išbandymų viltis.

Aktyviai naudoju JMS Publisher ir JMS Subscriber mėginių rinktuvus. Skirtingai nei JMS taškas į tašką, ši pora atrodė patogesnė naudoti. Pavyzdžiui, JMS selektoriuje su Subscriber galite nurodyti kintamąjį, bet su tašku į tašką to negalite (arba šis metodas nėra labai akivaizdus).

Mėginių ruošimas

JMS leidykla

  • Sąranka – kiekvienas pavyzdys. Apache rekomenduoja naudokite šią parinktį, jei eilės/temos nurodytos per kintamuosius.
  • Galiojimo laikas (ms) = 120000. Nesėkmės atveju testo užklausos dings iš eilės po 2 minučių.
  • Naudoti nenuolatinį pristatymo režimą? - tiesa. IBM pretenzijoskad nuolatinis režimas užtikrina patikimą perduodamų pranešimų išsaugojimą staigaus gedimo atveju. Ir greitesnis keitimas nenuolatiniu režimu. Testavimo tikslais greitis yra svarbesnis.

Kiekviename leidėjuje nustatau jms ypatybę, kurią prenumeratorius naudos JMS parinkiklyje. Kiekvienam pateikimui naudotojo parametrų testavimo plano elemente sugeneruojama atsitiktinė vertė:

Eilės ir JMeter: bendrinimas su leidėju ir prenumeratoriumi

Taip galite būti tikri, kad perskaitytas teisingas pranešimas.

Galutinis iš anksto sukonfigūruoto JMS leidėjo „tuščias“:

Eilės ir JMeter: bendrinimas su leidėju ir prenumeratoriumi

JMS abonentas

  • Sąranka – kiekvienas pavyzdys. Na, supranti.
  • Timeout (ms) = 100000. Jei užklausa nepatenka į eilę po 100 sekundžių laukimo, vadinasi, kažkas nutiko.
  • Sustoti tarp mėginių? - tiesa.

JMS Selector - gana patogu dalykas. Galutinis JMS abonentas:

Eilės ir JMeter: bendrinimas su leidėju ir prenumeratoriumi

Kaip elgtis su kirilicos abėcėle perduodamuose pranešimuose. JMeter pagal numatytuosius nustatymus po korektūros jis rodomas kreivai. Kad to išvengtumėte ir visada ir visur mėgautumėte didingumu ir galingumu, turite:

  1. Pridėkite JVM argumentą prie JMeter „paleidimo priemonės“:
    -Dfile.encoding=UTF-8
  2. Pridėkite JSR223 PostProcessor prie abonento su griovia linija:
    prev.setDataEncoding("UTF-8")

Siųsti tekstą

Pats tingiausias variantas. Tinka ką tik parašytų testų derinimui. Arba atvejams, kai reikia atsiųsti bent ką nors mažo. Pasirinkite parinktį Pranešimo šaltinis – Textarea ir įdėkite pranešimo turinį į teksto bloką:

Eilės ir JMeter: bendrinimas su leidėju ir prenumeratoriumi

Failų perkėlimas

Dažniausias variantas. Tinka daugeliui scenarijų. Pasirinkite parinktį Pranešimo šaltinis – iš failo ir lauke nurodykite kelią iki pranešimo Failas – failo pavadinimas:

Eilės ir JMeter: bendrinimas su leidėju ir prenumeratoriumi

Failo perkėlimas į teksto lauką

Pats universaliausias variantas. Tinka daugeliui scenarijų + gali būti naudojamas JMS taškas į tašką, kur nėra antros siuntimo parinkties:

Eilės ir JMeter: bendrinimas su leidėju ir prenumeratoriumi

Baitų masyvo perdavimas

Sunkiausias variantas. Tinka patikrinti neklystamai tikslų užklausų perdavimą iki baito, be iškraipymų, SMS ir trikdžių. Numatytajame JMeter to padaryti negalėsite. čia Man apie tai tikrai buvo pasakyta.

Taigi turėjau atsisiųsti šaltiniai ir modifikuoti kodas JMS abonentas.

Pakeistas metodu extractContent(..) eilutė:

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

apie:

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

ir atstatė JMeter.

Belieka pridėti porą JSR223 mėgintuvėlių. Pirmasis yra prieš leidėjo / prenumeratoriaus porą, kad būtų sukurtas DAT failas su atsitiktiniais baitais:

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

Antrasis - scenarijaus pabaigoje ištrina failą:

import java.io.File;

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

Ir nepamirškite pridėti kelio į failą Publisher:

Eilės ir JMeter: bendrinimas su leidėju ir prenumeratoriumi

Taip pat patikrinkite JSR223 patvirtinimą abonentui - palyginkite šaltinio baitus su tais, kurie patenka į gavėjo eilę:

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

išvada

Aprašiau keturis būdus, kaip siųsti žinutes į eiles, kuriuos praktikoje naudoju kasdien. Tikiuosi, kad ši informacija palengvins jūsų gyvenimą. Tęsinyje planuoju papasakoti apie savo patirtį bandant mainus, kurių viename gale yra eilė, o kitame - duomenų bazė arba failų sistema.

Taupykite savo laiką. Ir ačiū už dėmesį.

Eilės ir JMeter: bendrinimas su leidėju ir prenumeratoriumi

Šaltinis: www.habr.com

Добавить комментарий