Kuyruklar ve JMeter: Yayıncı ve Abone ile paylaşım

Merhaba Habr! Bu benimkinin devamı önceki yayınJMeter kullanarak mesajları kuyruklara yerleştirme seçeneklerinden bahsedeceğim.

Büyük bir federal şirket için veri yolu yapıyoruz. Çeşitli istek formatları, dönüşümler, karmaşık yönlendirme. Test için kuyruğa çok sayıda mesaj göndermeniz gerekir. Manuel olarak çalışmak, her kayropraktörün kaldıramayacağı bir acıdır.

Kuyruklar ve JMeter: Yayıncı ve Abone ile paylaşım

Giriş

Gerçi ilk başta bu acıya katlanmak zorunda kaldım. Her şey RFHUtil ile başladı. Güçlü ama garip ve korkutucu: Rus'u bilirsin.

Kuyruklar ve JMeter: Yayıncı ve Abone ile paylaşım

Bazı durumlarda vazgeçilmezdir ancak aktif kullanım durumunda giderek azalmaktadır.
Bununla uygun test yapmak imkansızdır.

JMeter ile her şey daha kolay hale geldi. Ustalaşmanın ve alışmanın ilk aşamasından sonra mutlu bir sınav için umut doğmaya başladı.

JMS Publisher ve JMS Abone örnekleyicilerini aktif olarak kullanıyorum. JMS Noktadan Noktaya'nın aksine, bu çiftin kullanımı daha uygun görünüyordu. Örneğin, JMS Seçici'deki Abone ile bir değişken belirtebilirsiniz, ancak Noktadan Noktaya ile bunu yapamazsınız (veya bu yöntem çok açık değildir).

Örnekleyicilerin hazırlanması

JMS Yayıncısı

  • Kurulum - Her Örnek. Apaçi önerir kuyruklar/konular değişkenler aracılığıyla belirtiliyorsa bu seçeneği kullanın.
  • Sona erme (ms) = 120000. Başarısızlık durumunda test istekleri 2 dakika sonra kuyruktan kaybolacaktır.
  • Kalıcı olmayan dağıtım modu kullanılsın mı? - doğru. IBM'in iddialarBu kalıcı mod, ani bir arıza durumunda iletilen mesajların güvenilir bir şekilde korunmasını sağlar. Kalıcı olmayan modda daha hızlı değişim. Test amacıyla hız daha önemlidir.

Her Yayımcıda, Abonenin JMS Seçicide kullanacağı bir jms özelliği ayarlıyorum. Her gönderim için Kullanıcı Parametreleri test planı öğesinde rastgele bir değer oluşturulur:

Kuyruklar ve JMeter: Yayıncı ve Abone ile paylaşım

Bu şekilde doğru mesajın okunduğundan emin olabilirsiniz.

Önceden yapılandırılmış bir JMS Yayımcısının son "boş" hali:

Kuyruklar ve JMeter: Yayıncı ve Abone ile paylaşım

JMS Abonesi

  • Kurulum - Her Örnek. Peki, anlıyorsun.
  • Zaman aşımı (ms) = 100000. 100 saniyelik beklemenin ardından istek kuyruğa ulaşmazsa bir şeyler ters gitti demektir.
  • Numuneler arasında durmak mı istiyorsunuz? - doğru.

JMS Seçici - oldukça kullanışlı şey. Nihai JMS Abonesi:

Kuyruklar ve JMeter: Yayıncı ve Abone ile paylaşım

İletilen mesajlarda Kiril alfabesiyle nasıl baş edilir? JMeter'de varsayılan olarak düzeltmeden sonra çarpık bir şekilde görüntülenir. Bundan kaçınmak ve her zaman ve her yerde büyük ve güçlü olanın tadını çıkarmak için şunları yapmanız gerekir:

  1. JMeter "başlatıcısına" bir JVM argümanı ekleyin:
    -Dfile.encoding=UTF-8
  2. Harika bir hat ile Aboneye JSR223 PostProcessor'u ekleyin:
    prev.setDataEncoding("UTF-8")

Metni gönder

En tembel seçenek. Yeni yazılmış testlerde hata ayıklamak için uygundur. Veya en azından küçük bir şey göndermeniz gereken durumlar için. Seçeneği seçin Mesaj kaynağı - Textarea ve mesajın gövdesini bir metin bloğuna yerleştirin:

Kuyruklar ve JMeter: Yayıncı ve Abone ile paylaşım

Dosya transferi

En yaygın seçenek. Çoğu senaryo için uygundur. Seçeneği seçin Mesaj kaynağı - Dosyadan ve alandaki mesajın yolunu belirtin Dosya - Dosya adı:

Kuyruklar ve JMeter: Yayıncı ve Abone ile paylaşım

Dosyayı metin alanına aktarma

En çok yönlü seçenek. Çoğu senaryo için uygundur + ikinci bir gönderme seçeneğinin bulunmadığı JMS Noktadan Noktaya'da kullanılabilir:

Kuyruklar ve JMeter: Yayıncı ve Abone ile paylaşım

Bir bayt dizisinin geçirilmesi

En zor seçenek. Taleplerin bozulma, SMS ve bozulma olmadan bayta kadar şaşmaz doğrulukta iletimini kontrol etmek için uygundur. Bunu varsayılan JMeter'da yapamazsınız. burada Bu bana kesinlikle söylendi.

Bu yüzden indirmem gerekti kaynaklar ve değiştir kod JMS Abonesi.

Yöntemde değiştirildi extractContent(..) astar:

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

in:

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

ve JMeter'ı yeniden inşa ettim.

Geriye kalan tek şey birkaç JSR223 Örnekleyici eklemek. Birincisi, Yayıncı/Abone çiftinin rastgele baytlar içeren bir DAT dosyası oluşturmasından önce:

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 - betiğin sonunda dosyayı siler:

import java.io.File;

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

Ayrıca Publisher'da dosyanın yolunu eklemeyi de unutmayın:

Kuyruklar ve JMeter: Yayıncı ve Abone ile paylaşım

Ayrıca Abone için JSR223 Onayında bir kontrol - kaynak baytlarını alıcının kuyruğuna gelen baytlarla karşılaştırın:

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

Sonuç

Sıralara mesaj göndermenin her gün pratikte kullandığım dört yolunu anlattım. Umarım bu bilgiler hayatınızı kolaylaştırır. Devamında bir ucunda kuyruk, diğer ucunda veritabanı veya dosya sisteminin olduğu bir borsayı test etme deneyimimden bahsetmeyi planlıyorum.

Zamandan tasarruf edin. İlginiz için teşekkürler.

Kuyruklar ve JMeter: Yayıncı ve Abone ile paylaşım

Kaynak: habr.com

Yorum ekle