Antrian dan JMeter: berbagi dengan Penerbit dan Pelanggan

Halo, Habr! Ini adalah sekuel dari saya publikasi sebelumnya, di mana saya akan berbicara tentang opsi untuk menempatkan pesan dalam antrian menggunakan JMeter.

Kami membuat bus data untuk perusahaan federal yang besar. Berbagai format permintaan, transformasi, perutean rumit. Untuk pengujian, Anda perlu mengirim banyak pesan ke antrian. Secara manual adalah rasa sakit yang tidak semua chiropractor bisa atasi.

Antrian dan JMeter: berbagi dengan Penerbit dan Pelanggan

pengenalan

Meskipun pada awalnya aku harus menahan rasa sakit ini. Semuanya dimulai dengan RFHUtil. Kuat, tapi canggung dan menakutkan: Ya, Anda tahu bahasa Rusia.

Antrian dan JMeter: berbagi dengan Penerbit dan Pelanggan

Sangat diperlukan dalam beberapa kasus, namun terus menurun jika digunakan secara aktif.
Pengujian yang mudah tidak mungkin dilakukan dengan itu.

Dengan JMeter segalanya menjadi lebih mudah. Setelah tahap pertama penguasaan dan pembiasaan, harapan mulai muncul untuk ujian yang membahagiakan.

Saya aktif menggunakan sampler JMS Publisher dan JMS Subscriber. Berbeda dengan JMS Point-to-Point, pasangan ini tampak lebih nyaman digunakan. Misalnya, dengan Pelanggan di JMS Selector Anda dapat menentukan variabel, tetapi dengan Point-to-Point Anda tidak bisa (atau metode ini tidak terlalu jelas).

Mempersiapkan sampler

Penerbit JMS

  • Pengaturan - Setiap Sampel. apache merekomendasikan gunakan opsi ini jika antrian/topik ditentukan melalui variabel.
  • Kedaluwarsa (ms) = 120000. Jika terjadi kegagalan, permintaan pengujian akan hilang dari antrian setelah 2 menit.
  • Gunakan mode pengiriman non-persisten? - BENAR. IBM klaimbahwa mode persisten memastikan pelestarian pesan yang dikirimkan jika terjadi kegagalan mendadak. Dan pertukaran lebih cepat dalam mode non-persisten. Untuk tujuan pengujian, kecepatan lebih penting.

Di setiap Penerbit saya menetapkan properti jms yang akan digunakan Pelanggan di Pemilih JMS. Untuk setiap pengiriman, nilai acak dihasilkan dalam elemen rencana pengujian Parameter Pengguna:

Antrian dan JMeter: berbagi dengan Penerbit dan Pelanggan

Dengan cara ini Anda dapat yakin bahwa pesan yang benar telah dibaca.

Bagian "kosong" terakhir dari Penerbit JMS yang telah dikonfigurasi sebelumnya:

Antrian dan JMeter: berbagi dengan Penerbit dan Pelanggan

Pelanggan JMS

  • Pengaturan - Setiap Sampel. Nah, Anda mengerti.
  • Timeout (ms) = 100000. Jika permintaan tidak masuk antrian setelah 100 detik menunggu, berarti ada yang tidak beres.
  • Berhenti di antara sampel? - BENAR.

JMS Selector - cukup nyaman sepotong. Pelanggan JMS Terakhir:

Antrian dan JMeter: berbagi dengan Penerbit dan Pelanggan

Bagaimana menangani alfabet Sirilik dalam pesan yang dikirimkan. Di JMeter, secara default, setelah proofreading, ditampilkan miring. Untuk menghindari hal ini dan menikmati yang agung dan berkuasa selalu dan di mana saja, Anda perlu:

  1. Tambahkan argumen JVM ke β€œpeluncur” JMeter:
    -Dfile.encoding=UTF-8
  2. Tambahkan JSR223 PostProcessor ke Pelanggan dengan baris asyik:
    prev.setDataEncoding("UTF-8")

Mengirim pesan

Pilihan paling malas. Cocok untuk men-debug tes yang baru ditulis. Atau jika Anda perlu mengirim setidaknya sesuatu yang kecil. Pilih opsi Sumber pesan - Textarea dan letakkan isi pesan di blok teks:

Antrian dan JMeter: berbagi dengan Penerbit dan Pelanggan

Transfer file

Opsi paling umum. Cocok untuk sebagian besar skenario. Pilih opsi Sumber pesan - Dari file dan tunjukkan jalur ke pesan di bidang File - Nama file:

Antrian dan JMeter: berbagi dengan Penerbit dan Pelanggan

Mentransfer file ke bidang teks

Pilihan paling serbaguna. Cocok untuk sebagian besar skenario + dapat digunakan di JMS Point-to-Point di mana tidak ada opsi pengiriman kedua:

Antrian dan JMeter: berbagi dengan Penerbit dan Pelanggan

Melewati array byte

Pilihan tersulit. Cocok untuk memeriksa transmisi permintaan yang sangat akurat hingga byte, tanpa distorsi, SMS, dan gangguan. Anda tidak akan dapat melakukan ini di JMeter default. di sini Saya pasti diberitahu tentang hal ini.

Jadi saya harus mengunduh sumber dan memodifikasi kode Pelanggan JMS.

Diganti dalam metode extractContent(..) garis:

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

ke:

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

dan membangun kembali JMeter.

Yang tersisa hanyalah menambahkan beberapa Sampler JSR223. Yang pertama adalah sebelum pasangan Publisher/Subscriber membuat file DAT yang berisi byte acak:

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

Yang kedua - di akhir skrip, menghapus file:

import java.io.File;

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

Dan jangan lupa menambahkan path ke file di Publisher:

Antrian dan JMeter: berbagi dengan Penerbit dan Pelanggan

Dan juga periksa di JSR223 Assertion for Subscriber - bandingkan byte sumber dengan byte yang tiba di antrian penerima:

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

Kesimpulan

Saya menjelaskan empat cara mengirim pesan ke antrian, yang saya gunakan setiap hari dalam praktik. Saya harap informasi ini membuat hidup Anda lebih mudah. Sebagai kelanjutannya, saya berencana untuk berbicara tentang pengalaman saya menguji pertukaran di mana terdapat antrian di satu ujung dan database atau sistem file di ujung lainnya.

Hemat waktu Anda. Dan terima kasih atas perhatian Anda.

Antrian dan JMeter: berbagi dengan Penerbit dan Pelanggan

Sumber: www.habr.com

Tambah komentar