【问题标题】:How to Send Byte Array in http request in Jmeter如何在 Jmeter 中的 http 请求中发送字节数组
【发布时间】:2014-05-30 21:08:38
【问题描述】:

我正在使用 JMeter 进行负载测试,我必须通过 HTTP 请求调用上传图像 API,为了实现这一点,我必须将图像转换为压缩字节数组以通过 HTTP 将其作为发布数据发送出去请求。

谁能告诉我如何通过 JMeter 来实现?

非常感谢您的帮助。

【问题讨论】:

    标签: file-upload jmeter load-testing


    【解决方案1】:

    您可以通过多种方式进行选择:

    1. 您可以使用HTTP Raw Request Sampler(可通过JMeter Plugins 站点获得),它可以让您完全控制发送的内容、方式和位置。

    2. 您是否尝试过为 HTTP 请求采样器启用 Use multipart/form-data for POST?这是按照RFC-1867 上传文件的方式。

    3. 如果您的用例是特定的并且以上都不适用,您可以随时使用 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} 参数。

    【讨论】:

    • 感谢您提供详细信息。但我想知道在这种情况下如何使用 HTTP Raw Request Sampler,我必须将图像转换为 gzip 压缩字节数组。
    • 另外,我遵循了您的最后一点,以下是代码的 sn-p:
    • 导入 java.io.BufferedInputStream;导入 java.io.ByteArrayOutputStream;导入java.io.File;导入 java.io.FileInputStream; FileInputStream in = new FileInputStream("C:\\Users\\i\\Downloads\\Screen 2.jpg"); ByteArrayOutputStream bos = new ByteArrayOutputStream(); int size = (int) file.length();字节[]缓冲区=新字节[大小]; 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));
    • 这里,我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);
    【解决方案2】:

    是的,我按照这个方法“在你的 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"));

    HTTP Header Manager

    Beanshell Pre Processor

    HTTP Request

    Real Request

    【讨论】:

    • 非常感谢!我花了几个小时试图弄清楚为什么我的请求失败了,而你编码字节数组的方式正是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    相关资源
    最近更新 更多