Növbələr və JMeter: Nəşriyyatçı və Abunəçi ilə paylaşma

Salam, Habr! Bu mənim davamıdır əvvəlki nəşr, burada JMeter istifadə edərək mesajların növbələrə yerləşdirilməsi variantları haqqında danışacağam.

Böyük bir federal şirkət üçün məlumat avtobusu hazırlayırıq. Müxtəlif sorğu formatları, transformasiyalar, mürəkkəb marşrutlaşdırma. Sınaq üçün növbəyə çoxlu mesaj göndərmək lazımdır. Əl ilə hər bir şiroterapinin öhdəsindən gələ bilməyəcəyi bir ağrıdır.

Növbələr və JMeter: Nəşriyyatçı və Abunəçi ilə paylaşma

Giriş

Baxmayaraq ki, əvvəlcə bu ağrıya dözməli oldum. Hamısı RFHUtil ilə başladı. Güclü, lakin yöndəmsiz və qorxulu: Yaxşı, siz Rusiyanı tanıyırsınız.

Növbələr və JMeter: Nəşriyyatçı və Abunəçi ilə paylaşma

Bəzi hallarda əvəzolunmazdır, lakin aktiv istifadə zamanı davamlı olaraq azalır.
Onunla rahat sınaq mümkün deyil.

JMeter ilə hər şey asanlaşdı. Mənimsəmənin və öyrəşməyin ilk mərhələsindən sonra xoşbəxt sınaq üçün ümid yaranmağa başladı.

Mən aktiv olaraq JMS Publisher və JMS Subscriber nümunələrindən istifadə edirəm. JMS Point-to-Point-dən fərqli olaraq, bu cütün istifadəsi daha rahat görünürdü. Məsələn, JMS Selector-da Subscriber ilə siz dəyişəni təyin edə bilərsiniz, lakin Point-to-Point ilə bunu edə bilməzsiniz (yaxud bu üsul çox açıq deyil).

Nümunəçilərin hazırlanması

JMS nəşriyyatı

  • Quraşdırma - Hər Nümunə. Apache tövsiyə edir növbələr/mövzular dəyişənlər vasitəsilə göstərilibsə, bu seçimdən istifadə edin.
  • İstifadə müddəti (ms) = 120000. Uğursuzluq halında, test sorğuları 2 dəqiqədən sonra növbədən yox olacaq.
  • Davamlı olmayan çatdırılma rejimi istifadə edilsin? - doğru. IBM təsdiqləyirbu davamlı rejim qəfil uğursuzluq halında ötürülən mesajların etibarlı qorunmasını təmin edir. Və davamlı olmayan rejimdə daha sürətli mübadilə. Test məqsədləri üçün sürət daha vacibdir.

Hər bir Publisherdə Abunəçinin JMS Seçicisində istifadə edəcəyi jms xüsusiyyətini təyin etdim. Hər bir təqdimat üçün İstifadəçi Parametrləri test planı elementində təsadüfi bir dəyər yaradılır:

Növbələr və JMeter: Nəşriyyatçı və Abunəçi ilə paylaşma

Bu yolla düzgün mesajın oxunduğuna əmin ola bilərsiniz.

Əvvəlcədən konfiqurasiya edilmiş JMS Publisher-in son "boşluğu":

Növbələr və JMeter: Nəşriyyatçı və Abunəçi ilə paylaşma

JMS Abunəçisi

  • Quraşdırma - Hər Nümunə. Yaxşı, başa düşürsən.
  • Zaman aşımı (ms) = 100000. Əgər sorğu 100 saniyə gözlədikdən sonra növbəyə gəlmirsə, deməli, nəsə səhv olub.
  • Nümunələr arasında dayandırılsın? - doğru.

JMS Selector - olduqca rahatdır şey. Son JMS Abunəçisi:

Növbələr və JMeter: Nəşriyyatçı və Abunəçi ilə paylaşma

Göndərilən mesajlarda kiril əlifbası ilə necə davranmaq olar. JMeter-də, standart olaraq, düzəlişdən sonra əyri şəkildə göstərilir. Bunun qarşısını almaq və həmişə və hər yerdə böyük və güclüdən həzz almaq üçün sizə lazımdır:

  1. JMeter "başlatıcısına" JVM arqumenti əlavə edin:
    -Dfile.encoding=UTF-8
  2. Möhtəşəm xətt ilə Abunəçiyə JSR223 PostProcessor əlavə edin:
    prev.setDataEncoding("UTF-8")

Mətn göndərin

Ən tənbəl variant. Təzə yazılmış testləri aradan qaldırmaq üçün uyğundur. Və ya ən azı kiçik bir şey göndərməyiniz lazım olduğu hallarda. Seçim seçin Mesaj mənbəyi - Textarea və mesajın əsas hissəsini mətn blokuna yerləşdirin:

Növbələr və JMeter: Nəşriyyatçı və Abunəçi ilə paylaşma

Fayl ötürülməsi

Ən ümumi variant. Əksər ssenarilər üçün uyğundur. Seçim seçin Mesaj mənbəyi - Fayldan və sahədə mesajın yolunu göstərin Fayl - Fayl adı:

Növbələr və JMeter: Nəşriyyatçı və Abunəçi ilə paylaşma

Faylın mətn sahəsinə köçürülməsi

Ən çox yönlü seçim. Əksər ssenarilər üçün uyğundur +, ikinci göndərmə seçiminin olmadığı JMS Point-to-Point-də istifadə edilə bilər:

Növbələr və JMeter: Nəşriyyatçı və Abunəçi ilə paylaşma

Bayt massivi keçir

Ən çətin variant. Sorğuların təhrif, SMS və narahatlıq olmadan bayta qədər qüsursuz dəqiq ötürülməsini yoxlamaq üçün uyğundur. Siz bunu standart JMeter-də edə bilməyəcəksiniz. burada Mənə bu barədə mütləq deyilib.

Buna görə yükləməli oldum mənbələr və dəyişdirin kod JMS Abunəçisi.

Metodda əvəz edilmişdir extractContent(..) xətt:

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

haqqında:

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

və JMeter-i yenidən qurdu.

Bir neçə JSR223 Sampler əlavə etmək qalır. Birincisi, təsadüfi baytlardan ibarət DAT faylı yaratmaq üçün Nəşriyyatçı/Abunəçi cütlüyündən əvvəldir:

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

İkincisi - skriptin sonunda faylı silir:

import java.io.File;

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

Və Publisher-də fayla yol əlavə etməyi unutmayın:

Növbələr və JMeter: Nəşriyyatçı və Abunəçi ilə paylaşma

Həm də Abunəçi üçün JSR223 Təsdiqində bir yoxlama - mənbə baytlarını alıcının növbəsinə gələnlərlə müqayisə edin:

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

Nəticə

Mən praktikada hər gün istifadə etdiyim növbələrə mesaj göndərməyin dörd yolunu təsvir etdim. Ümid edirəm ki, bu məlumat sizin həyatınızı asanlaşdırır. Davam olaraq, bir ucunda növbənin, digərində isə verilənlər bazası və ya fayl sisteminin olduğu bir mübadiləni sınaqdan keçirmək təcrübəmdən danışmağı planlaşdırıram.

Vaxtınıza qənaət edin. Və diqqətiniz üçün təşəkkür edirik.

Növbələr və JMeter: Nəşriyyatçı və Abunəçi ilə paylaşma

Mənbə: www.habr.com

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