使用 JMeter 发送带有二进制正文的 HTTP 请求

Yuv*_*val 4 jmeter

我正在尝试使用 JMeter 发送带有二进制内容的 HTTP 请求。在文档中,我发现我可以发送包含二进制内容的文件。我认为这不是满足我需求的好解决方案,因为每个请求都有自己的二进制内容。

这是我用 Perl 编写的一个客户端示例,它演示了我尝试完成的任务:

$date_time = sprintf "%08X", time();
$BODY_TEMPLATE = "00${date_time}0015";
$body_len = (length (sprintf($BODY_TEMPLATE,0,0))) / 2;
# Here I set $TARGET & $HOST
$MSG_HEADER = "POST \/unil?URL=${TARGET} HTTP\/1.1\r\nHost: ${HOST}\r\ncontent-type:application/binary\r\ncontent-length: ${body_len}\r\n\r\n";
$body = pack ("H*", $BODY_TEMPLATE);
$message_to_send = $MSG_HEADER . $body;
# at this point I sent the entire message over a TCP socket I previously opened.
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢,尤瓦尔

Dmi*_*i T 6

可以使用 JMeter。我建议使用

  1. Beanshell Pre-Processor来构建您的请求主体并将其存储到 JMeter 变量(您不需要计算内容长度,因为 JMeter 足够聪明,可以为您完成)
  2. 与“体数据” BeanShell的预处理器产生的(设置一个HTTP取样器在人体产生代码的最后,你需要做这样的事情vars.put("mybody",generatedbodystring);。在你的HTTP取样器,你可以参考mybody变量,无论是${mybody}${__V(mybody)}
  3. 添加HTTP Header Manager以将 Content-Type 设置为“application/binary”

HTTP头Manager和BeanShell的预处理器必须是孩子的HTTP请求。

您可以使用调试采样器和查看结果树侦听器来检查请求/响应详细信息和正在发送的数据。

希望这可以帮助。

  • Dmitri,当作者要求提供二进制数据时,您为什么建议使用“generatedbodystring”?我现在有同样的问题 - 无法发送二进制 POST 请求,即使我在 BeanShell 中执行“vars.putObject("mybody", byteArray)”。然后在HTTP请求的正文数据中“${mybody}”,Jemeter在发送之前隐式地执行该数组的“toString()”,我不知道为什么以及如何解决它:( (4认同)