Xin chào, Habr! Đây là phần tiếp theo của tôi , 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.

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.

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 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 chế độ 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:

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:

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 . Người đăng ký JMS cuối cùng:

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:
- Thêm một đối số JVM vào “trình khởi chạy” JMeter:
-Dfile.encoding=UTF-8 - 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:

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:

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:

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. 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 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:

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.

Nguồn: www.habr.com
