Queues และ JMeter: แบ่งปันกับผู้จัดพิมพ์และสมาชิก

สวัสดีฮับ! นี่เป็นภาคต่อของฉัน สิ่งพิมพ์ก่อนหน้าซึ่งฉันจะพูดถึงตัวเลือกในการวางข้อความในคิวโดยใช้ JMeter

เรากำลังสร้างบัสข้อมูลสำหรับบริษัทรัฐบาลกลางขนาดใหญ่ รูปแบบคำขอต่างๆ การแปลง การกำหนดเส้นทางที่ซับซ้อน ในการทดสอบคุณต้องส่งข้อความจำนวนมากไปที่คิว ความเจ็บปวดด้วยตนเองคือความเจ็บปวดที่แพทย์จัดกระดูกทุกคนไม่สามารถรับมือได้

Queues และ JMeter: แบ่งปันกับผู้จัดพิมพ์และสมาชิก

การแนะนำ

แม้ว่าฉันจะต้องทนกับความเจ็บปวดนี้ในตอนแรก ทุกอย่างเริ่มต้นด้วย RFHUtil ทรงพลัง แต่น่าอึดอัดและน่ากลัว: คุณรู้จักมาตุภูมิ

Queues และ JMeter: แบ่งปันกับผู้จัดพิมพ์และสมาชิก

ขาดไม่ได้ในบางกรณี แต่จะลดลงเรื่อยๆ ในกรณีใช้งานอยู่
การทดสอบที่สะดวกนั้นเป็นไปไม่ได้

ด้วย JMeter ทุกอย่างจะง่ายขึ้น หลังจากขั้นตอนแรกของการเรียนรู้และทำความคุ้นเคย ความหวังก็เริ่มรุ่งเรืองสำหรับการทดสอบอย่างมีความสุข

ฉันใช้ตัวอย่าง JMS Publisher และ JMS Subscriber อย่างต่อเนื่อง ต่างจาก JMS แบบจุดต่อจุด คู่นี้ดูสะดวกกว่าในการใช้งาน ตัวอย่างเช่น ด้วย Subscriber ใน JMS Selector คุณสามารถระบุตัวแปรได้ แต่ด้วย Point-to-Point คุณไม่สามารถทำได้ (หรือวิธีนี้ไม่ชัดเจนนัก)

การเตรียมตัวอย่าง

สำนักพิมพ์ JMS

  • ตั้งค่า - แต่ละตัวอย่าง อาปาเช่ แนะนำ ใช้ตัวเลือกนี้หากมีการระบุคิว/หัวข้อผ่านตัวแปร
  • การหมดอายุ (ms) = 120000 ในกรณีที่ล้มเหลว คำขอทดสอบจะหายไปจากคิวหลังจาก 2 นาที
  • ใช้โหมดการนำส่งแบบไม่ถาวรใช่ไหม - จริง. ไอบีเอ็ม การเรียกร้องโหมดถาวรนั้นช่วยให้มั่นใจได้ถึงการเก็บรักษาข้อความที่ส่งอย่างเชื่อถือได้ในกรณีที่เกิดความล้มเหลวกะทันหัน และแลกเปลี่ยนได้เร็วขึ้นในโหมดไม่ถาวร เพื่อวัตถุประสงค์ในการทดสอบ ความเร็วมีความสำคัญมากกว่า

ในผู้เผยแพร่แต่ละราย ฉันตั้งค่าคุณสมบัติ jms ที่สมาชิกจะใช้ในตัวเลือก JMS สำหรับการส่งแต่ละครั้ง ค่าสุ่มจะถูกสร้างขึ้นในองค์ประกอบแผนการทดสอบพารามิเตอร์ผู้ใช้:

Queues และ JMeter: แบ่งปันกับผู้จัดพิมพ์และสมาชิก

วิธีนี้ทำให้คุณมั่นใจได้ว่าอ่านข้อความที่ถูกต้องแล้ว

“ว่าง” สุดท้ายของผู้เผยแพร่ JMS ที่กำหนดค่าไว้ล่วงหน้า:

Queues และ JMeter: แบ่งปันกับผู้จัดพิมพ์และสมาชิก

สมาชิก JMS

  • ตั้งค่า - แต่ละตัวอย่าง คุณเข้าใจแล้ว
  • หมดเวลา (ms) = 100000 หากคำขอไม่มาถึงคิวหลังจากรอ 100 วินาที แสดงว่ามีสิ่งผิดปกติเกิดขึ้น
  • หยุดระหว่างตัวอย่าง? - จริง.

ตัวเลือก JMS - ค่อนข้างสะดวก สิ่ง. สมาชิก JMS สุดท้าย:

Queues และ JMeter: แบ่งปันกับผู้จัดพิมพ์และสมาชิก

วิธีจัดการกับอักษรซีริลลิกในข้อความที่ส่ง ตามค่าเริ่มต้นใน JMeter หลังจากการพิสูจน์อักษรแล้ว จะแสดงในลักษณะคด เพื่อหลีกเลี่ยงปัญหานี้และเพลิดเพลินไปกับความยิ่งใหญ่และทรงพลังทุกที่ทุกเวลา คุณต้อง:

  1. เพิ่มอาร์กิวเมนต์ JVM ให้กับ JMeter “launcher”:
    -Dfile.encoding=UTF-8
  2. เพิ่ม JSR223 PostProcessor ให้กับสมาชิกด้วยบรรทัด Groovy:
    prev.setDataEncoding("UTF-8")

ส่งข้อความ

ตัวเลือกที่ขี้เกียจที่สุด เหมาะสำหรับการดีบักการทดสอบที่เขียนใหม่ หรือสำหรับกรณีที่คุณต้องการส่งของเล็กๆ น้อยๆ เป็นอย่างน้อย เลือกตัวเลือก แหล่งที่มาของข้อความ - พื้นที่ข้อความ และวางเนื้อหาของข้อความไว้ในบล็อกข้อความ:

Queues และ JMeter: แบ่งปันกับผู้จัดพิมพ์และสมาชิก

การถ่ายโอนไฟล์

ตัวเลือกที่พบบ่อยที่สุด เหมาะสำหรับสถานการณ์ส่วนใหญ่ เลือกตัวเลือก แหล่งที่มาของข้อความ - จากไฟล์ และระบุเส้นทางไปยังข้อความในช่อง ไฟล์ - ชื่อไฟล์:

Queues และ JMeter: แบ่งปันกับผู้จัดพิมพ์และสมาชิก

การถ่ายโอนไฟล์ไปยังช่องข้อความ

ตัวเลือกที่หลากหลายที่สุด เหมาะสำหรับสถานการณ์ส่วนใหญ่ + สามารถใช้ใน JMS แบบจุดต่อจุดโดยไม่มีตัวเลือกการส่งครั้งที่สอง:

Queues และ JMeter: แบ่งปันกับผู้จัดพิมพ์และสมาชิก

การส่งผ่านอาร์เรย์ไบต์

ตัวเลือกที่ยากที่สุด เหมาะสำหรับการตรวจสอบการส่งคำขอที่แม่นยำอย่างไม่มีข้อผิดพลาดจนถึงระดับไบต์ โดยไม่มีการบิดเบือน SMS และการก่อกวน คุณจะไม่สามารถทำได้ใน JMeter เริ่มต้น ที่นี่ ฉันได้รับการบอกเกี่ยวกับเรื่องนี้อย่างแน่นอน

ฉันจึงต้องดาวน์โหลด แหล่งที่มา และแก้ไข รหัส สมาชิก JMS

แทนที่ด้วยวิธีการ extractContent(..) เส้น:

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

ของ:

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

และสร้าง JMeter ขึ้นมาใหม่

สิ่งที่เหลืออยู่คือการเพิ่มตัวอย่าง JSR223 สองสามรายการ อย่างแรกคือก่อนที่คู่ Publisher/Subscriber จะสร้างไฟล์ DAT ที่มีไบต์แบบสุ่ม:

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

ประการที่สอง - ในตอนท้ายของสคริปต์ให้ลบไฟล์:

import java.io.File;

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

และอย่าลืมเพิ่มเส้นทางไปยังไฟล์ใน Publisher:

Queues และ JMeter: แบ่งปันกับผู้จัดพิมพ์และสมาชิก

และการตรวจสอบใน JSR223 Assertion for Subscriber - เปรียบเทียบไบต์ต้นทางกับไบต์ที่มาถึงคิวของผู้รับ:

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

ข้อสรุป

ฉันอธิบายสี่วิธีในการส่งข้อความไปยังคิว ซึ่งฉันใช้ทุกวันในทางปฏิบัติ ฉันหวังว่าข้อมูลนี้จะทำให้ชีวิตของคุณง่ายขึ้น ต่อไป ฉันวางแผนที่จะพูดคุยเกี่ยวกับประสบการณ์ของฉันในการทดสอบ Exchange โดยมีคิวอยู่ที่ปลายด้านหนึ่งและมีฐานข้อมูลหรือระบบไฟล์อยู่ที่อีกด้านหนึ่ง

ประหยัดเวลาของคุณ และขอขอบคุณสำหรับความสนใจของคุณ

Queues และ JMeter: แบ่งปันกับผู้จัดพิมพ์และสมาชิก

ที่มา: will.com

เพิ่มความคิดเห็น