Mga Queue at JMeter: pagbabahagi sa Publisher at Subscriber

Hello, Habr! Ito ay isang sequel sa akin nakaraang publikasyon, kung saan magsasalita ako tungkol sa mga opsyon para sa paglalagay ng mga mensahe sa mga pila gamit ang JMeter.

Gumagawa kami ng data bus para sa isang malaking pederal na kumpanya. Iba't ibang mga format ng kahilingan, pagbabago, masalimuot na pagruruta. Para sa pagsubok, kailangan mong magpadala ng maraming mensahe sa pila. Ang mano-mano ay isang sakit na hindi kayang hawakan ng bawat chiropractor.

Mga Queue at JMeter: pagbabahagi sa Publisher at Subscriber

Pagpapakilala

Bagaman kailangan kong tiisin ang sakit na ito noong una. Nagsimula ang lahat sa RFHUtil. Makapangyarihan, ngunit awkward at nakakatakot: Well, alam mo Rus.

Mga Queue at JMeter: pagbabahagi sa Publisher at Subscriber

Kailangan sa ilang mga kaso, ngunit patuloy na bumababa sa kaso ng aktibong paggamit.
Imposible ang maginhawang pagsubok dito.

Sa JMeter lahat ay naging mas madali. Matapos ang unang yugto ng mastering at masanay, nagsimulang sumikat ang pag-asa para sa masayang pagsubok.

Aktibo kong ginagamit ang JMS Publisher at JMS Subscriber samplers. Hindi tulad ng JMS Point-to-Point, mukhang mas maginhawang gamitin ang pares na ito. Halimbawa, sa Subscriber sa JMS Selector maaari kang tumukoy ng variable, ngunit sa Point-to-Point hindi mo magagawa (o hindi masyadong halata ang paraang ito).

Paghahanda ng mga sampler

JMS Publisher

  • Setup - Bawat Sample. Apache inirerekomenda gamitin ang opsyong ito kung ang mga pila/paksa ay tinukoy sa pamamagitan ng mga variable.
  • Expiration (ms) = 120000. Kung sakaling mabigo, mawawala sa queue ang mga kahilingan sa pagsubok pagkalipas ng 2 minuto.
  • Gamitin ang non-persistent delivery mode? - totoo. IBM claimstinitiyak ng persistent mode na iyon ang maaasahang pag-iingat ng mga ipinadalang mensahe sa kaganapan ng isang biglaang pagkabigo. At mas mabilis na palitan sa non-persistent mode. Para sa mga layunin ng pagsubok, ang bilis ay mas mahalaga.

Sa bawat Publisher ay nagtatakda ako ng jms property na gagamitin ng Subscriber sa JMS Selector. Para sa bawat pagsusumite, isang random na halaga ang nabuo sa elemento ng plano ng pagsubok ng Mga Parameter ng User:

Mga Queue at JMeter: pagbabahagi sa Publisher at Subscriber

Sa paraang ito, makatitiyak kang nabasa ang tamang mensahe.

Ang huling "blangko" ng isang paunang na-configure na JMS Publisher:

Mga Queue at JMeter: pagbabahagi sa Publisher at Subscriber

Subscriber ng JMS

  • Setup - Bawat Sample. Well, naiintindihan mo.
  • Timeout (ms) = 100000. Kung ang kahilingan ay hindi dumating sa queue pagkatapos ng 100 segundo ng paghihintay, may nangyaring mali.
  • Huminto sa pagitan ng mga sample? - totoo.

JMS Selector - medyo maginhawa bagay. Huling Subscriber ng JMS:

Mga Queue at JMeter: pagbabahagi sa Publisher at Subscriber

Paano haharapin ang Cyrillic alphabet sa mga ipinadalang mensahe. Sa JMeter, bilang default, pagkatapos ng pag-proofread, ito ay ipinapakita nang baluktot. Upang maiwasan ito at tamasahin ang dakila at makapangyarihan palagi at saanman, kailangan mong:

  1. Magdagdag ng argumento ng JVM sa "launcher" ng JMeter:
    -Dfile.encoding=UTF-8
  2. Magdagdag ng JSR223 PostProcessor sa Subscriber na may groovy line:
    prev.setDataEncoding("UTF-8")

Magpadala ng text

Ang pinakatamad na opsyon. Angkop para sa pag-debug ng mga bagong nakasulat na pagsubok. O para sa mga kaso kung kailan kailangan mong magpadala ng kahit na maliit. Pumili ng opsyon Pinagmulan ng mensahe - Textarea at ilagay ang katawan ng mensahe sa isang text block:

Mga Queue at JMeter: pagbabahagi sa Publisher at Subscriber

Paglilipat ng file

Ang pinakakaraniwang opsyon. Angkop para sa karamihan ng mga senaryo. Pumili ng opsyon Pinagmulan ng mensahe - Mula sa file at ipahiwatig ang landas patungo sa mensahe sa field File - Filename:

Mga Queue at JMeter: pagbabahagi sa Publisher at Subscriber

Paglilipat ng file sa isang text field

Ang pinaka maraming nalalaman na opsyon. Angkop para sa karamihan ng mga sitwasyon + ay maaaring gamitin sa JMS Point-to-Point kung saan walang pangalawang opsyon sa pagpapadala:

Mga Queue at JMeter: pagbabahagi sa Publisher at Subscriber

Pagpasa ng byte array

Ang pinakamahirap na opsyon. Angkop para sa pagsuri sa infallibly tumpak na pagpapadala ng mga kahilingan pababa sa byte, nang walang pagbaluktot, SMS at perturbation. Hindi mo ito magagawa sa default na JMeter. dito Talagang sinabihan ako tungkol dito.

Kaya kinailangan kong mag-download pinagmumulan at baguhin kodigo Subscriber ng JMS.

Pinalitan sa pamamaraan extractContent(..) linya:

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

sa:

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

at muling itinayo ang JMeter.

Ang natitira na lang ay magdagdag ng ilang JSR223 Sampler. Ang una ay bago ang pares ng Publisher/Subscriber upang lumikha ng isang DAT file na naglalaman ng mga random na byte:

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

Ang pangalawa - sa dulo ng script, tinatanggal ang file:

import java.io.File;

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

At huwag kalimutang idagdag ang path sa file sa Publisher:

Mga Queue at JMeter: pagbabahagi sa Publisher at Subscriber

At isang tseke din sa JSR223 Assertion for Subscriber - ihambing ang source byte sa mga dumarating sa queue ng tatanggap:

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

Konklusyon

Inilarawan ko ang apat na paraan upang magpadala ng mga mensahe sa mga pila, na ginagamit ko araw-araw sa pagsasanay. Umaasa ako na ang impormasyong ito ay gawing mas madali ang iyong buhay. Sa pagpapatuloy, plano kong pag-usapan ang aking karanasan sa pagsubok sa isang palitan kung saan may pila sa isang dulo at isang database o file system sa kabilang dulo.

I-save ang iyong oras. At salamat sa iyong pansin.

Mga Queue at JMeter: pagbabahagi sa Publisher at Subscriber

Pinagmulan: www.habr.com

Magdagdag ng komento