【发布时间】:2014-05-30 21:08:38
【问题描述】:
我正在使用 JMeter 进行负载测试,我必须通过 HTTP 请求调用上传图像 API,为了实现这一点,我必须将图像转换为压缩字节数组以通过 HTTP 将其作为发布数据发送出去请求。
谁能告诉我如何通过 JMeter 来实现?
非常感谢您的帮助。
【问题讨论】:
标签: file-upload jmeter load-testing
我正在使用 JMeter 进行负载测试,我必须通过 HTTP 请求调用上传图像 API,为了实现这一点,我必须将图像转换为压缩字节数组以通过 HTTP 将其作为发布数据发送出去请求。
谁能告诉我如何通过 JMeter 来实现?
非常感谢您的帮助。
【问题讨论】:
标签: file-upload jmeter load-testing
您可以通过多种方式进行选择:
您可以使用HTTP Raw Request Sampler(可通过JMeter Plugins 站点获得),它可以让您完全控制发送的内容、方式和位置。
您是否尝试过为 HTTP 请求采样器启用 Use multipart/form-data for POST?这是按照RFC-1867 上传文件的方式。
如果您的用例是特定的并且以上都不适用,您可以随时使用 JMeter 脚本扩展。例如,如果您将 Beanshell Pre Processor 添加到您的 HTTP 请求中,该请求执行文件上传,例如:
FileInputStream in = new FileInputStream("/home/glinius/401.png");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
for (int i; (i = in.read(buffer)) != -1; ) {
bos.write(buffer, 0, i);
}
in.close();
byte[] imageData = bos.toByteArray();
bos.close();
vars.put("imageData", new String(imageData));
您将能够在您的 POST 请求中添加 ${imageData} 参数。
【讨论】:
m getting "Problem in BeanShell script org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: ``import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import . . . '' : Typed variable declaration : Attempt to resolve method: length() on undefined variable or class name: file". Could you please let me know what Im这里做错了
file 变量未定义,请将前两行代码修改为: File file = new File("C:\\Users\\i\\Downloads\\Screen 2. jpg"); FileInputStream in = new FileInputStream(file);
是的,我按照这个方法“在你的 HTTP 请求中添加一个 Beanshell 预处理器”,并且成功了。
就我而言,我还添加了一个“HTTP Header Manager”,指定:“Content-Encoding:gzip”、“Content-Type:”application/x-www-form-urlencoded”、“Accept: /”。 并且,通过以下方式设置字符串编码: vars.put("binaryData", new String(binThrift, "ISO-8859-1"));
【讨论】: