Radhët dhe JMeter: shkëmbimi me Publisher dhe Subscriber

Përshëndetje, Habr! Ky është një vazhdim i publikimit të mëparshëm, ku do të flas për opsionet e publikimit të mesazheve në radhët me ndihmën e JMeter.

Ne po zhvillojmĂ« njĂ« autobus tĂ« dhĂ«nash pĂ«r njĂ« kompani tĂ« madhe federale. Formate tĂ« ndryshme tĂ« kĂ«rkesave, konvertime, rrugĂ«zim tĂ« ndĂ«rlikuar. PĂ«r testim, nevojitet tĂ« dĂ«rgohen shumĂ« mesazhe nĂ« radhĂ«. Me dorĂ« — Ă«shtĂ« njĂ« dhimbje, me tĂ« cilĂ«n nuk e pĂ«rballon çdo manual.

Radhët dhe JMeter: shkëmbimi me Publisher dhe Subscriber

Hyrje

Megjithatë, me këtë dhimbje ishim të detyruar të pajtohemi në fillim. E gjithë ky proces filloi me RFHUtil. I fuqishëm, por i parehatshëm dhe frikshëm: E dini ju, Rusin.

Radhët dhe JMeter: shkëmbimi me Publisher dhe Subscriber

I pazëvendësueshëm në disa raste, por vazhdimisht i rrëzuar në rast përdorimi të aktiv.
Testimi me të është i pamundur.

Me JMeter, gjithçka u bë më e lehtë. Pas fazës së parë të mësimit dhe zakonit, shpresa për një testim të suksesshëm filloi të shfaqet.

Përdor sëmplarët JMS Publisher dhe JMS Subscriber aktivisht. Ndryshe nga JMS Point-to-Point, kjo çift ka dukur më e lehtë për t'u punuar. Për shembull, te Subscriber në JMS Selector, mund të caktosh një variabël, te Point-to-Point - jo (ose ndoshta ky opsion nuk është shumë i qartë).

Përgatitja e sëmplarëve

JMS Publisher

  • Setup — Çdo SĂ«mplar. Apache kĂ«shillon pĂ«rdoreni kĂ«tĂ« opsion, nĂ«se radhĂ«t/tĂ« dhĂ«nat janĂ« caktuar pĂ«rmes variablave.
  • Skadimi (ms) = 120000. NĂ« rast dĂ«shtimi, kĂ«rkesat testuese do tĂ« zhduken nga radhĂ«t pas 2 minutash.
  • PĂ«rdorni modalitetin e dorĂ«zimit jo-pĂ«rsĂ«ritĂ«s? — e vĂ«rtetĂ«. IBM pretendon, qĂ« modaliteti i qĂ«ndrueshĂ«m siguron ruajtjen e besueshme tĂ« mesazheve tĂ« transmetuara nĂ« rast dĂ«shtimi tĂ« papritur. Dhe shkĂ«mbimi mĂ« i shpejtĂ« nĂ« modalitetin jo-pĂ«rsĂ«ritĂ«s. PĂ«r qĂ«llime testimi, shpejtĂ«sia Ă«shtĂ« mĂ« e rĂ«ndĂ«sishme.

Në çdo Publisher, caktova pronësinë jms, që Subscriber do të përdorë në JMS Selector. Për çdo dërgesë krijohet një vlerë rastësore në elementin e planit të testit User Parameters:

Radhët dhe JMeter: shkëmbimi me Publisher dhe Subscriber

Kështu mund të jemi të sigurt se është lexuar mesazhi i saktë.

Baza përfundimtare e JMS Publisher të paracaktuar:

Radhët dhe JMeter: shkëmbimi me Publisher dhe Subscriber

JMS Subscriber

  • Setup — Çdo SĂ«mplar. E kuptoni.
  • Koha e pritjes (ms) = 100000. NĂ«se kĂ«rkesa nuk arrin nĂ« radhĂ« pas 100 sekondash pritje, do tĂ« thotĂ« se diçka shkoi keq.
  • Ndalo midis sĂ«mplarĂ«ve? — e vĂ«rtetĂ«.

JMS Selector — njĂ« gjĂ« bastante e pĂ«rshtatshme. JMS Subscriber pĂ«rfundimtar:

Radhët dhe JMeter: shkëmbimi me Publisher dhe Subscriber

Si të veprojmë me cirilikun në mesazhet e transmetuara. Në JMeter, automatikisht pas leximit shfaqet keq. Për ta shmangur këtë dhe për të shijuar të madhin dhe të fuqishmin gjithmonë dhe kudo, është e nevojshme:

  1. Shtoni në "starter" JMeter argumentin JVM:
    -Dfile.encoding=UTF-8
  2. Shtoni JSR223 PostProcessor në Subscriber me linjën në groovy:
    prev.setDataEncoding("UTF-8")

Transmetimi i tekstit

Opsioni mĂ« tĂ« pĂ«rshtatshĂ«m. PĂ«rdoret pĂ«r testimin e testeve tĂ« reja tĂ« shkruara. Ose pĂ«r raste kur duhet tĂ« dĂ«rgohet diçka e vogĂ«l. Zgjidhni opsionin Burimi i mesazhit — Tekst Zona dhe vendosni trupin e mesazhit nĂ« bllokun e tekstit:

Radhët dhe JMeter: shkëmbimi me Publisher dhe Subscriber

Transferimi i skedarit

Opsioni mĂ« i zakonshĂ«m. PĂ«rdoret pĂ«r shumicĂ«n e skenarĂ«ve. Zgjidhni opsionin Burimi i mesazhit — Nga skedari dhe jepni rrugĂ«n pĂ«r mesazhin nĂ« fushĂ«n Skedari — Emri i skedarit:

Radhët dhe JMeter: shkëmbimi me Publisher dhe Subscriber

Transferimi i skedarit në fushën e tekstit

Opsioni më universale. Përdoret për shumicën e skenarëve + mund të përdoret në JMS Point-to-Point, ku nuk ka opsion të dytë për dërgim:

Radhët dhe JMeter: shkëmbimi me Publisher dhe Subscriber

Transferimi i vargut të byte-ve

Opsioni më i komplikuar. Përdoret për të kontrolluar një transmetim të saktë deri në byte, pa deformime, mesazhe dhe perturbacione. Kjo nuk mund të bëhet me JMeter-in e parazgjedhur, këtu mu e thamë me siguri.

Prandaj isha i detyruar të shkarkohej source code dhe modifikohej kod JMS Subscriber.

Këtu e zëvendësova në metodë extractContent(..) rreshtin:

buffer.append(bytesMessage.getBodyLength() + " byte janë pranuar në BytesMessage");

në:

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

dhe e rindërtova JMeter-in.

Tani mbetet tĂ« shtoni disa JSR223 Sampler. E para — para çiftit Publisher/Subscriber pĂ«r tĂ« krijuar njĂ« skedar DAT qĂ« pĂ«rmban byte tĂ« rastĂ«sishĂ«m:

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("skedari nuk u gjet");
        }

E dyta — nĂ« fund tĂ« skenarit, fshin skedarin:

import java.io.File;

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

Dhe mos harroni të shtoni rrugën për skedarin te Publisher:

Radhët dhe JMeter: shkëmbimi me Publisher dhe Subscriber

Po ashtu kontrolloni nĂ« JSR223 Assertion pĂ«r Subscriber — krahasoni byte-t origjinale me ata qĂ« mbĂ«rrijnĂ« nĂ« radhĂ«n e marrĂ«sit:

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("Krahasimi dështoi");
	   SampleResult.setResponseData("Byte-t kanë ndryshuar","UTF-8");
     	   IsSuccess=false;
	}

Përfundim

Përshkruajta katër mënyra për dërgimin e mesazheve në radhë, të cilat i përdor çdo ditë në praktikë. Shpresoj që kjo informacion të lehtësojë jetën tuaj. Në vazhdim, planifikoj të flas për përvojën time në testimin e shkëmbimit, ku në njërin anë është radhë, dhe në anën tjetër një bazë të dhënash ose sistem skedash.

Ruani kohën tuaj. Dhe faleminderit për vëmendjen.

Radhët dhe JMeter: shkëmbimi me Publisher dhe Subscriber

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster