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

Përshëndetje, Habr! Ky është vazhdimi i publikimi i mëparshëm, ku do të flas për opsionet e vendosjes së mesazheve në radhë me ndihmën e JMeter.

Ne po krijojmĂ« njĂ« autobus tĂ« dhĂ«nash pĂ«r njĂ« kompani tĂ« madhe federale. Formate tĂ« ndryshme tĂ« kĂ«rkesave, transformime, rregullim i komplikuar i rrugĂ«ve. PĂ«r testim ne duhet tĂ« dĂ«rgojmĂ« shumĂ« mesazhe nĂ« radhĂ«. Me dorĂ« — Ă«shtĂ« njĂ« dhimbje qĂ« nuk mund ta pĂ«rballojĂ« çdo punĂ«tor manual.

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

Hyrje

Edhe pse me këtë dhimbje na duhej të pajtoheshim në fillim. gjithçka filloi me RFHUtil. I fuqishëm, por i padëshirueshëm dhe i frikshëm: Të gjithë e dinë Rusin.

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

I pazëvendësueshëm në disa raste, por që ra në mënyrë të vazhdueshme në rastin e përdorimit aktiv.
Testimi i rehatshëm me të është i pamundur.

Me JMeter gjithçka u bë më e thjeshtë. Pas fazës së parë të përvetësimit dhe zakonit, shpresa për testim të lumtur filloi të shkëlqejë.

E pĂ«rdor aktivisht tĂ« dy sĂ«mplanĂ«t JMS Publisher dhe JMS Subscriber. NĂ« ndryshim nga JMS Point-to-Point, kjo çift duket mĂ« e rehatshme nĂ« punĂ«. PĂ«r shembull, te Subscriber nĂ« JMS Selector mund tĂ« pĂ«rcaktoni njĂ« variabĂ«l, te Point-to-Point — jo (ose ky mĂ«nyrĂ« nuk Ă«shtĂ« shumĂ« e dukshme).

Përgatitja e sëmplanëve

JMS Publisher

  • Setup — Çdo Shembull. Apache rekomandon pĂ«rdorni kĂ«tĂ« opsion nĂ«se radhĂ«t/temat ndahen pĂ«rmes variablave.
  • Skadenca (ms) = 120000. NĂ« rast tĂ« dĂ«shtimit, kĂ«rkesat e testit do tĂ« zhduken nga radha pas 2 minutash.
  • PĂ«rdorni modalitetin e dĂ«rgimit jo-pĂ«rhershĂ«m? — e vĂ«rtetĂ«. IBM pretendon, qĂ« mĂ«nyra e pĂ«rhershme siguron ruajtjen e besueshme tĂ« mesazheve tĂ« dĂ«rguara nĂ« rast dĂ«shtimi tĂ« papritur. Dhe njĂ« shkĂ«mbim mĂ« tĂ« shpejtĂ« nĂ« modalitetin jo-pĂ«rhershĂ«m. PĂ«r qĂ«llime testi, rĂ«ndĂ«sishĂ«m Ă«shtĂ« shpejtĂ«sia.

Në çdo Publisher caktoj karakteristikën jms që Subscriber do të përdorë në JMS Selector. Për çdo dërgesë gjenerohet 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ë jesh i sigurt se është lexuar mesazhi i duhur.

Përfundimi "skica" e JMS Publisher të parapërgatitur:

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

JMS Subscriber

  • Cakto — Çdo Shembull. E kuptove.
  • Koha e pritjes (ms) = 100000. NĂ«se kĂ«rkesa nuk arrin nĂ« radhĂ« pas 100 sekondash pritjeje, do tĂ« thotĂ« se diçka shkoi keq.
  • TĂ« ndalosh midis mostrave? — e vĂ«rtetĂ«.

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

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

Si të merremi me cirilikun në mesazhet e dërguara. Në JMeter me default pas leximit ajo shfaqet e deformuar. Për ta evituar këtë dhe për të shijuar të madhin dhe të fuqishmin gjithmonë dhe gjithkund, nevojitet:

  1. Shto në "startuesin" e JMeter argumentin JVM:
    -Dfile.encoding=UTF-8
  2. Shto JSR223 PostProcessor në Subscriber me rresht në groovy:
    prev.setDataEncoding("UTF-8")

Transmetimi i tekstit

Opcioni mĂ« i lenĂ«. I pĂ«rshtatshĂ«m pĂ«r debugimin e testeve tĂ« shkruara sĂ« fundi. Ose pĂ«r rastet kur Ă«shtĂ« e nevojshme tĂ« dĂ«rgohet ndonjĂ« gjĂ« e vogĂ«l. Zgjidhni opsionin Burimi i mesazhit — Tekstare dhe vendosni trupin e mesazhit nĂ« bllokun e tekstit:

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

Dërgimi i skedarit

Opcioni mĂ« i shpeshtĂ«. I pĂ«rshtatshĂ«m pĂ«r shumicĂ«n e skenarĂ«ve. Zgjidhni opsionin Burimi i mesazhit — Nga skedari dhe specifikoni rrugĂ«n pĂ«r tek mesazhi nĂ« fushĂ« Skedari — Emri i skedarit:

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

Dërgimi i skedarit në fushën e tekstit

Opcioni më universale. I përshtatshëm për shumicën e skenarëve + mund të përdoret në JMS Point-to-Point, ku nuk ka opsion të dytë dërgimi:

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

Dërgimi i një vargu bajtësh

Opcioni më i komplikuar. I përshtatshëm për verifikimin e një dërgimi të saktë deri në bajt, pa deformime, SMS dhe perturbacione. Nuk do ta arrini këtë në JMeterin standard, këtu më e qartë u tha këtë.

Prandaj duhej të shkarkohej burimet e kodit dhe modifikohej kod JMS Subscriber.

Zëvendësova në metodën extractContent(..) rreshtin:

buffer.append(bytesMessage.getBodyLength() + " bajta janë marrë 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 rihapat JMeterin.

Duhet shtuar disa JSR223 Sampler. I pari — para disa Publisher/Subscriber pĂ«r krijimin e njĂ«rĂ«s DAT-fajl, 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("file not found");
        }

I dyti — nĂ« fund tĂ« skenarit, fshin fajlin:

import java.io.File;

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

Dhe mos harro të shtosh rrugën e fajlit te Publisher:

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

Po ashtu verifikimin nĂ« JSR223 Assertion pĂ«r Subscriber — krahaso byte-t fillestare me ato qĂ« vijnĂ« 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ërfundimi

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

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

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

Burimi: habr.com

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