Hàng đợi và JMeter: chia sẻ với Nhà xuất bản và Người đăng ký

Xin chào, Habr! Đây là phần tiếp theo của tôi xuất bản trước, trong đó tôi sẽ nói về các tùy chọn đặt tin nhắn vào hàng đợi bằng JMeter.

Chúng tôi đang tạo một bus dữ liệu cho một công ty liên bang lớn. Các định dạng yêu cầu khác nhau, chuyển đổi, định tuyến phức tạp. Để thử nghiệm, bạn cần gửi nhiều tin nhắn đến hàng đợi. Bằng tay là một nỗi đau mà không phải bác sĩ chỉnh hình nào cũng có thể xử lý được.

Hàng đợi và JMeter: chia sẻ với Nhà xuất bản và Người đăng ký

Giới thiệu

Mặc dù lúc đầu tôi đã phải chịu đựng nỗi đau này. Tất cả bắt đầu với RFHUtil. Mạnh mẽ nhưng vụng về và đáng sợ: Bạn biết đấy Rus.

Hàng đợi và JMeter: chia sẻ với Nhà xuất bản và Người đăng ký

Không thể thiếu trong một số trường hợp, nhưng giảm dần trong trường hợp sử dụng tích cực.
Thử nghiệm thuận tiện là không thể với nó.

Với JMeter mọi thứ đã trở nên dễ dàng hơn. Sau giai đoạn đầu làm chủ và làm quen, hy vọng về một cuộc thử nghiệm vui vẻ bắt đầu ló dạng.

Tôi tích cực sử dụng các bộ lấy mẫu của Nhà xuất bản JMS và Người đăng ký JMS. Không giống như JMS Point-to-Point, cặp này có vẻ thuận tiện hơn khi sử dụng. Ví dụ: với Người đăng ký trong JMS Selector bạn có thể chỉ định một biến, nhưng với Point-to-Point thì bạn không thể (hoặc phương pháp này không rõ ràng lắm).

Chuẩn bị dụng cụ lấy mẫu

Nhà xuất bản JMS

  • Thiết lập - Mỗi mẫu. Apache đề nghị sử dụng tùy chọn này nếu hàng đợi/chủ đề được chỉ định thông qua các biến.
  • Hết hạn (ms) = 120000. Trong trường hợp thất bại, các yêu cầu kiểm tra sẽ biến mất khỏi hàng đợi sau 2 phút.
  • Sử dụng chế độ phân phối không liên tục? - ĐÚNG VẬY. IBM phê chuẩnchế độ liên tục đó đảm bảo việc lưu giữ tin nhắn được truyền đi một cách đáng tin cậy trong trường hợp có sự cố đột ngột. Và trao đổi nhanh hơn ở chế độ không liên tục. Đối với mục đích thử nghiệm, tốc độ là quan trọng hơn.

Trong mỗi Nhà xuất bản, tôi đặt thuộc tính jms mà Người đăng ký sẽ sử dụng trong Bộ chọn JMS. Đối với mỗi lần gửi, một giá trị ngẫu nhiên được tạo trong phần tử kế hoạch kiểm tra Thông số người dùng:

Hàng đợi và JMeter: chia sẻ với Nhà xuất bản và Người đăng ký

Bằng cách này bạn có thể chắc chắn rằng tin nhắn chính xác đã được đọc.

“Trống” cuối cùng của Nhà xuất bản JMS được định cấu hình trước:

Hàng đợi và JMeter: chia sẻ với Nhà xuất bản và Người đăng ký

Người đăng ký JMS

  • Thiết lập - Mỗi mẫu. Vâng, bạn hiểu.
  • Thời gian chờ (ms) = 100000. Nếu yêu cầu không đến hàng đợi sau 100 giây chờ đợi thì đã xảy ra lỗi.
  • Dừng giữa các mẫu? - ĐÚNG VẬY.

JMS Selector - khá tiện lợi một mảnh. Người đăng ký JMS cuối cùng:

Hàng đợi và JMeter: chia sẻ với Nhà xuất bản và Người đăng ký

Cách xử lý bảng chữ cái Cyrillic trong tin nhắn được truyền đi. Trong JMeter, mặc định sau khi hiệu đính sẽ hiển thị không đều. Để tránh điều này và tận hưởng sự vĩ đại và quyền năng mọi lúc, mọi nơi, bạn cần phải:

  1. Thêm một đối số JVM vào “trình khởi chạy” JMeter:
    -Dfile.encoding=UTF-8
  2. Thêm JSR223 PostProcessor vào Người đăng ký với dòng hấp dẫn:
    prev.setDataEncoding("UTF-8")

Gửi tin nhắn

Lựa chọn lười biếng nhất. Thích hợp để gỡ lỗi các bài kiểm tra mới được viết. Hoặc đối với những trường hợp bạn cần gửi ít nhất một thứ gì đó nhỏ. Chọn tùy chọn Nguồn tin nhắn - Textarea và đặt nội dung tin nhắn vào một khối văn bản:

Hàng đợi và JMeter: chia sẻ với Nhà xuất bản và Người đăng ký

Chuyển một tập tin

Tùy chọn phổ biến nhất. Thích hợp cho hầu hết các kịch bản. Chọn tùy chọn Nguồn tin nhắn - Từ tập tin và chỉ ra đường dẫn đến tin nhắn trong trường Tệp - Tên tệp:

Hàng đợi và JMeter: chia sẻ với Nhà xuất bản và Người đăng ký

Chuyển tập tin sang trường văn bản

Tùy chọn linh hoạt nhất. Thích hợp cho hầu hết các tình huống + có thể được sử dụng trong JMS Point-to-Point khi không có tùy chọn gửi thứ hai:

Hàng đợi và JMeter: chia sẻ với Nhà xuất bản và Người đăng ký

Truyền một mảng byte

Lựa chọn khó khăn nhất. Thích hợp để kiểm tra việc truyền yêu cầu xuống byte một cách chính xác đến từng byte mà không bị biến dạng, SMS và nhiễu loạn. Bạn sẽ không thể thực hiện việc này trong JMeter mặc định. đây Tôi chắc chắn đã được thông báo về điều này.

Vì vậy tôi đã phải tải xuống nguồn và sửa đổi Người đăng ký JMS.

Thay thế trong phương pháp extractContent(..) đường kẻ:

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

trong:

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à xây dựng lại JMeter.

Tất cả những gì còn lại là thêm một vài Bộ lấy mẫu JSR223. Đầu tiên là trước cặp Nhà xuất bản/Người đăng ký để tạo tệp DAT chứa các byte ngẫu nhiên:

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

Thứ hai - ở cuối tập lệnh, xóa tệp:

import java.io.File;

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

Và đừng quên thêm đường dẫn tới file trong Nhà xuất bản:

Hàng đợi và JMeter: chia sẻ với Nhà xuất bản và Người đăng ký

Và cũng là kiểm tra Xác nhận JSR223 dành cho Người đăng ký - so sánh các byte nguồn với các byte đến trong hàng đợi của người nhậ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;
	}

Kết luận

Tôi đã mô tả bốn cách để gửi tin nhắn đến hàng đợi mà tôi sử dụng hàng ngày trong thực tế. Tôi hy vọng thông tin này làm cho cuộc sống của bạn dễ dàng hơn. Tiếp theo, tôi dự định nói về trải nghiệm của mình khi thử nghiệm một sàn giao dịch trong đó có hàng đợi ở một đầu và cơ sở dữ liệu hoặc hệ thống tệp ở đầu kia.

Tiết kiệm thời gian của bạn. Và cảm ơn sự quan tâm của bạn.

Hàng đợi và JMeter: chia sẻ với Nhà xuất bản và Người đăng ký

Nguồn: www.habr.com

Thêm một lời nhận xét