使用 JMETER 向带有二进制主体的 RESTful API 发出 POST 请求

Alu*_*ium 2 jmeter jmeter-plugins

我使用 RESTful API 测试服务,这些方法接收带有二进制数据的 POST 请求。我使用 JMeter 进行测试。但我用这个工具提出这样的请求时遇到了麻烦。

我使用 BeanShell Sampler 制作二进制数据并将其放入变量中

import java.util.Base64;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.codec.binary.Base64;

String base64Str="Some string";
//Encode the string
byte[] bytes = Base64.encodeBase64(base64Str.getBytes());
vars.putObject("bytes", bytes);
Run Code Online (Sandbox Code Playgroud)

然后是 HTTP 请求,我将其放入主体数据中${bytes},以便使其从变量中读取原始字节并在 POST 请求中发送。但后来我得到一个异常“java.lang.ClassCastException:[B无法转换为java.lang.String”,这意味着在Body Data中给定的变量bytes被转换为字符串。相当相似的问题是使用 JMeter 发送带有二进制正文的 HTTP 请求,但在注释中对字符串转换做出了相同的结论。也许可以通过发送带有请求的文件来完成?

有一个插件 HTTP Raw Request,但我找不到将请求发送到具体 API 方法的方法,而该插件只有端口字段(也许在端口后面写一个方法路径?),并且我找不到传递的方法字节到它。

Alu*_*ium 5

我设法使用 HTTP 请求发出带有二进制正文数据的 POST 请求。为了做到这一点,我添加了一个条目“通过请求发送文件”并仅填充文件路径字段(没有参数名称和 MIME 类型)。JMeter 读取给定文件,并在本例中发送其字节(如 POST 请求正文中所示)。

答案在这里找到 https://qnalist.com/questions/698175/does-jmeter-support-sending- Arbitration-binary-data-in-the-body-of-a-post并导致手动http:// jmeter.apache.org/usermanual/component_reference.html#HTTP_Request