Toue en JMeter: deel met uitgewer en intekenaar

Hallo, Habr! Hierdie is 'n vervolg op myne vorige publikasie, waarin ek sal praat oor opsies om boodskappe in rye te plaas met behulp van JMeter.

Ons maak 'n databus vir 'n groot federale maatskappy. Verskeie versoekformate, transformasies, ingewikkelde roetering. Vir toetsing moet jy baie boodskappe na die tou stuur. Handmatig is 'n pyn wat nie elke chiropraktisyn kan hanteer nie.

Toue en JMeter: deel met uitgewer en intekenaar

Inleiding

Alhoewel ek eers hierdie pyn moes verduur. Dit het alles begin met RFHUtil. Kragtig, maar ongemaklik en skrikwekkend: Wel, jy ken vir Rus.

Toue en JMeter: deel met uitgewer en intekenaar

Onontbeerlik in sommige gevalle, maar neem geleidelik af in geval van aktiewe gebruik.
Gerieflike toetsing is daarmee onmoontlik.

Met JMeter het alles makliker geword. Na die eerste fase van bemeestering en gewoond raak daaraan, het hoop begin aanbreek vir gelukkige toetsing.

Ek gebruik aktief die JMS Publisher en JMS Subscriber monsternemers. Anders as JMS Point-to-Point, het hierdie paar geriefliker gelyk om te gebruik. Byvoorbeeld, met Subscriber in JMS Selector kan jy 'n veranderlike spesifiseer, maar met Point-to-Point kan jy nie (of hierdie metode is nie baie voor die hand liggend nie).

Voorbereiding van monsternemers

JMS Uitgewer

  • Opstelling - Elke monster. Apache beveel aan gebruik hierdie opsie as toue/onderwerpe deur veranderlikes gespesifiseer word.
  • Verval (ms) = 120000. In die geval van mislukking sal toetsversoeke na 2 minute uit die tou verdwyn.
  • Gebruik nie-aanhoudende afleweringmodus? - waar. IBM eisedaardie aanhoudende modus verseker betroubare bewaring van gestuurde boodskappe in die geval van 'n skielike mislukking. En vinniger uitruil in nie-aanhoudende modus. Vir toetsdoeleindes is spoed belangriker.

In elke Publisher stel ek 'n jms-eienskap wat die Subscriber in die JMS Selector sal gebruik. Vir elke indiening word 'n ewekansige waarde in die Gebruiker Parameters toetsplan element gegenereer:

Toue en JMeter: deel met uitgewer en intekenaar

Op hierdie manier kan jy seker wees dat die korrekte boodskap gelees is.

Die laaste "blank" van 'n vooraf-gekonfigureerde JMS-uitgewer:

Toue en JMeter: deel met uitgewer en intekenaar

JMS-intekenaar

  • Opstelling - Elke monster. Wel, jy verstaan.
  • Time-out (ms) = 100000. As die versoek nie in die ry kom na 100 sekondes se wag nie, dan het iets verkeerd geloop.
  • Stop tussen monsters? - waar.

JMS Selector - redelik gerieflik ding. Finale JMS-intekenaar:

Toue en JMeter: deel met uitgewer en intekenaar

Hoe om die Cyrilliese alfabet in oorgedrade boodskappe te hanteer. In JMeter word dit by verstek, na proeflees, skeef vertoon. Om dit te vermy en die groot en kragtige altyd en oral te geniet, moet jy:

  1. Voeg 'n JVM-argument by die JMeter "lanseerder":
    -Dfile.encoding=UTF-8
  2. Voeg JSR223 PostProcessor by intekenaar met groovy lyn:
    prev.setDataEncoding("UTF-8")

Stuur teks

Die luiste opsie. Geskik vir die ontfouting van varsgeskrewe toetse. Of vir gevalle waar jy ten minste iets kleins moet stuur. Kies opsie Boodskapbron - Teksarea en plaas die liggaam van die boodskap in 'n teksblok:

Toue en JMeter: deel met uitgewer en intekenaar

Lêeroordrag

Die mees algemene opsie. Geskik vir die meeste scenario's. Kies opsie Boodskapbron - Van lêer en dui die pad na die boodskap in die veld aan Lêer - Lêernaam:

Toue en JMeter: deel met uitgewer en intekenaar

Dra 'n lêer oor na 'n teksveld

Die mees veelsydige opsie. Geskik vir die meeste scenario's + kan in JMS Point-to-Point gebruik word waar daar geen tweede stuuropsie is nie:

Toue en JMeter: deel met uitgewer en intekenaar

Verlaat 'n greepskikking

Die moeilikste opsie. Geskik vir die nagaan van die onfeilbaar akkurate oordrag van versoeke tot by die greep, sonder vervorming, SMS en versteuring. Jy sal dit nie in die verstek JMeter kan doen nie. hier Ek is beslis hieroor vertel.

So ek moes aflaai bronne en wysig kode JMS-intekenaar.

Vervang in die metode extractContent(..) lyn:

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

op:

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

en herboude JMeter.

Al wat oorbly, is om 'n paar JSR223-monsters by te voeg. Die eerste is voor die uitgewer/intekenaar-paar om 'n DAT-lêer te skep wat ewekansige grepe bevat:

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

Die tweede - aan die einde van die skrif, vee die lêer uit:

import java.io.File;

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

En moenie vergeet om die pad by die lêer in Publisher te voeg nie:

Toue en JMeter: deel met uitgewer en intekenaar

En ook 'n tjek in JSR223 Assertion for Subscriber - vergelyk die brongrepe met dié wat in die ontvanger se tou aankom:

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

Gevolgtrekking

Ek het vier maniere beskryf om boodskappe na toue te stuur, wat ek elke dag in die praktyk gebruik. Ek hoop hierdie inligting maak jou lewe makliker. In voortsetting beplan ek om te praat oor my ervaring van die toets van 'n uitruil waar daar 'n tou aan die een kant is en 'n databasis of lêerstelsel aan die ander kant.

Spaar jou tyd. En dankie vir jou aandag.

Toue en JMeter: deel met uitgewer en intekenaar

Bron: will.com

Voeg 'n opmerking