Baris Gilir dan JMeter: berkongsi dengan Penerbit dan Pelanggan

Hello, Habr! Ini adalah sekuel kepada saya penerbitan sebelumnya, di mana saya akan bercakap tentang pilihan untuk meletakkan mesej dalam baris gilir menggunakan JMeter.

Kami sedang membuat bas data untuk sebuah syarikat persekutuan yang besar. Pelbagai format permintaan, transformasi, penghalaan yang rumit. Untuk ujian, anda perlu menghantar banyak mesej ke baris gilir. Secara manual adalah kesakitan yang tidak semua pakar kiropraktik boleh menangani.

Baris Gilir dan JMeter: berkongsi dengan Penerbit dan Pelanggan

Pengenalan

Walaupun saya terpaksa menahan sakit ini pada mulanya. Semuanya bermula dengan RFHUtil. Berkuasa, tetapi janggal dan menakutkan: Nah, anda tahu Rus.

Baris Gilir dan JMeter: berkongsi dengan Penerbit dan Pelanggan

Sangat diperlukan dalam beberapa kes, tetapi semakin berkurangan dalam kes penggunaan aktif.
Ujian yang mudah adalah mustahil dengannya.

Dengan JMeter semuanya menjadi lebih mudah. Selepas peringkat pertama menguasai dan membiasakan diri, harapan mula menjelma untuk ujian yang bahagia.

Saya secara aktif menggunakan pensampel JMS Publisher dan Pelanggan JMS. Tidak seperti JMS Point-to-Point, pasangan ini kelihatan lebih mudah untuk digunakan. Sebagai contoh, dengan Pelanggan dalam Pemilih JMS anda boleh menentukan pembolehubah, tetapi dengan Point-to-Point anda tidak boleh (atau kaedah ini tidak begitu jelas).

Menyediakan pensampel

Penerbit JMS

  • Persediaan - Setiap Sampel. Apache mengesyorkan gunakan pilihan ini jika baris gilir/topik ditentukan melalui pembolehubah.
  • Tamat tempoh (ms) = 120000. Sekiranya berlaku kegagalan, permintaan ujian akan hilang daripada baris gilir selepas 2 minit.
  • Gunakan mod penghantaran tidak berterusan? - benar. IBM tuntutanmod berterusan itu memastikan pemeliharaan yang boleh dipercayai bagi mesej yang dihantar sekiranya berlaku kegagalan secara tiba-tiba. Dan pertukaran yang lebih pantas dalam mod tidak berterusan. Untuk tujuan ujian, kelajuan adalah lebih penting.

Dalam setiap Penerbit saya menetapkan sifat jms yang Pelanggan akan gunakan dalam Pemilih JMS. Untuk setiap penyerahan, nilai rawak dijana dalam elemen pelan ujian Parameter Pengguna:

Baris Gilir dan JMeter: berkongsi dengan Penerbit dan Pelanggan

Dengan cara ini anda boleh memastikan bahawa mesej yang betul dibaca.

"Kosong" terakhir dari Penerbit JMS yang diprakonfigurasikan:

Baris Gilir dan JMeter: berkongsi dengan Penerbit dan Pelanggan

Pelanggan JMS

  • Persediaan - Setiap Sampel. Nah, anda faham.
  • Tamat masa (ms) = 100000. Jika permintaan tidak tiba dalam baris gilir selepas 100 saat menunggu, maka sesuatu telah berlaku.
  • Berhenti antara sampel? - benar.

Pemilih JMS - agak mudah sekeping. Pelanggan JMS Akhir:

Baris Gilir dan JMeter: berkongsi dengan Penerbit dan Pelanggan

Cara menangani abjad Cyrillic dalam mesej yang dihantar. Dalam JMeter, secara lalai, selepas membaca pruf, ia dipaparkan secara bengkok. Untuk mengelakkan ini dan menikmati yang hebat dan berkuasa sentiasa dan di mana-mana, anda perlu:

  1. Tambahkan hujah JVM pada "pelancar" JMeter:
    -Dfile.encoding=UTF-8
  2. Tambahkan JSR223 PostProcessor kepada Pelanggan dengan baris groovy:
    prev.setDataEncoding("UTF-8")

Hantar teks

Pilihan paling malas. Sesuai untuk menyahpepijat ujian bertulis yang baru. Atau untuk kes apabila anda perlu menghantar sekurang-kurangnya sesuatu yang kecil. Pilih pilihan Sumber mesej - Textarea dan letakkan badan mesej dalam blok teks:

Baris Gilir dan JMeter: berkongsi dengan Penerbit dan Pelanggan

Pemindahan fail

Pilihan yang paling biasa. Sesuai untuk kebanyakan senario. Pilih pilihan Sumber mesej - Daripada fail dan tunjukkan laluan ke mesej dalam medan Fail - Nama fail:

Baris Gilir dan JMeter: berkongsi dengan Penerbit dan Pelanggan

Memindahkan fail ke medan teks

Pilihan yang paling serba boleh. Sesuai untuk kebanyakan senario + boleh digunakan dalam JMS Point-to-Point di mana tiada pilihan hantar kedua:

Baris Gilir dan JMeter: berkongsi dengan Penerbit dan Pelanggan

Melepasi tatasusunan bait

Pilihan yang paling sukar. Sesuai untuk menyemak penghantaran permintaan yang sangat tepat hingga ke bait, tanpa herotan, SMS dan gangguan. Anda tidak akan dapat melakukan ini dalam JMeter lalai. di sini Saya pasti diberitahu tentang ini.

Jadi saya terpaksa memuat turun sumber dan ubah suai kod Pelanggan JMS.

Digantikan dalam kaedah extractContent(..) baris:

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

pada:

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 membina semula JMeter.

Yang tinggal hanyalah menambah beberapa Pensampel JSR223. Yang pertama ialah sebelum pasangan Penerbit/Pelanggan untuk mencipta fail DAT yang mengandungi bait rawak:

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 - pada akhir skrip, memadamkan fail:

import java.io.File;

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

Dan jangan lupa untuk menambah laluan ke fail dalam Penerbit:

Baris Gilir dan JMeter: berkongsi dengan Penerbit dan Pelanggan

Dan juga semakan dalam Penegasan JSR223 untuk Pelanggan - bandingkan bait sumber dengan bait yang tiba dalam baris gilir 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 menerangkan empat cara untuk menghantar mesej ke baris gilir, yang saya gunakan setiap hari dalam amalan. Saya harap maklumat ini memudahkan hidup anda. Sebagai kesinambungan, saya bercadang untuk bercakap tentang pengalaman saya menguji pertukaran di mana terdapat baris gilir di satu hujung dan pangkalan data atau sistem fail di hujung yang lain.

Jimat masa anda. Dan terima kasih atas perhatian anda.

Baris Gilir dan JMeter: berkongsi dengan Penerbit dan Pelanggan

Sumber: www.habr.com

Tambah komen