如何从JMeter JMS用户响应主体中提取和比较字节

时间:2018-11-02 13:54:55

标签: java arrays jmeter jms publish-subscribe

我由JMS Publisher (JMS Publisher screenshot)发送请求(文件中的字节),由JMS Subscriber读取响应 (JMS Subscriber screenshot),并尝试通过BeanShell断言以这种方式比较请求和响应数据(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订阅服务器中)中,我看到了

  BytesMessage中收到

5000个字节

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

我需要重新配置采样器\断言还是仅重构代码?

感谢您的帮助和相关链接

1 个答案:

答案 0 :(得分:0)

研究JMSSampler class source code时,我看不到如何在不修改上述类的情况下获得实际响应内容而又不修改上述类,因此您将无法断言它。

} 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适用于任何形式的脚本,因此请考虑在下一个可用机会时迁移到JSR223 Assertion