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

时间:2013-11-26 14:26:29

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

任何想法? 谢谢, Yuval

1 个答案:

答案 0 :(得分:4)

可以使用JMeter。我建议使用

  1. Beanshell Pre-Processor构建请求的主体并将其存储到JMeter变量(您不需要计算内容长度,因为JMeter足够聪明,可以为您完成)
  2. 使用Beanshell预处理器中生成的“正文数据”设置HTTP采样器(在正文生成代码的末尾,您需要执行vars.put("mybody",generatedbodystring);之类的操作。在HTTP采样器中,您可以参考{{ 1}}变量为mybody${mybody}
  3. 添加HTTP Header Manager以将Content-Type设置为“application / binary”
  4. HTTP标头管理器和BeanShell预处理器必须是HTTP请求的子级

    您可以使用Debug Sampler和View Results Tree Listener来检查请求/响应详细信息和正在发送的数据。

    希望这会有所帮助。