如何从 JMeter JMS 订阅者响应主体中提取和比较字节

How to extract and compare bytes from JMeter JMS Subscriber Response Body

我通过 JMS 发布者发送请求(来自文件的字节数)(JMS Publisher screenshot),通过 JMS 订阅者读取响应 (JMS Subscriber screenshot) and try to compare request and response data via BeanShell Assertion in this way (BeanShell Assertion screenshot):

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;

Path path = Paths.get("${pathToTesting}/queries/randomBytes/randomBytes.dat", new String[0]);
byte[] originalArray = Files.readAllBytes(path);
byte[] changedArray = ctx.getPreviousResult().getResponseData();
System.out.println(changedArray.length);
if (Arrays.equals(originalArray, changedArray))
{
    System.out.println("same!");

} else {
    System.out.println("diff!");
     SampleResult.setSuccessful(false);
    SampleResult.setResponseMessage("Comparison failed");
     SampleResult.setResponseData("Byte arrays has changed after sending through connectors","UTF-8");
    IsSuccess=false;
}

在查看结果树中(在 JMS 订阅者中)我看到了

5000 bytes received in BytesMessage

问题是如何获取实际的 5000 字节(不是消息“在 BytesMessage 中收到 5000 字节”)并将其与我通过 JMS Publisher 发送的原始字节进行比较?

我需要重新配置 samplers\assertion 还是只是重构代码?

如果有任何帮助和相关链接,我将不胜感激

查看 JMSSampler class source code 我看不出如何在不修改上述 class 的情况下获得实际的响应内容,因为它似乎已被丢弃,因此您将无法断言它。

} else if (msg instanceof BytesMessage) {
    BytesMessage bytesMessage = (BytesMessage) msg;
    buffer.append(bytesMessage.getBodyLength() + " bytes received in BytesMessage");
}

您创建了一个 enhancement request,它有可能会包含在下一个版本中,或者至少修改您的断言逻辑以比较发送消息与接收消息的大小。

另请注意 starting from JMeter 3.1 it is recommended to switch to JSR223 Test Elements and Groovy language for any form of scripting so consider migrating to JSR223 Assertion 下次有空的机会。