如何在JMeter中的HTTP请求中将gzip文件作为字节数组发送

时间:2014-05-11 14:04:38

标签: bytearray jmeter beanshell

我有一个帖子请求,我必须将gzip文件作为字节数组发送。 我尝试过以下方法:

  1. 创建了一个BeanShell预处理器,使用以下函数将文件转换为字节数组(从此处获取此函数):

    import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream;

    FileInputStream in = new FileInputStream(“C:\ Users \ New \ Desktop \ Load_Testing”); ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte [] buffer = new byte [1024]; for(int i;(i = in.read(buffer))!= -1;){     bos.write(buffer,0,i); } 附寄(); byte [] postData = bos.toByteArray(); bos.close(); vars.put(“postData”,new String(postData));

    1. 在参数选项卡下的HTTP Request Sampler中添加参数postData为$ {postData}。还尝试在BodyData选项卡下的HTTP Request Sampler中添加参数$ {postData}。
  2. 但是文件没有发送。

    1. 我还尝试通过在HTTP请求采样器的“使用请求发送文件”选项卡下添加适当的编码来发送文件。
    2. 但是对于所有情况我都会收到错误:

      :{“结果”:“上传数据流时出错\ u000d \ u000a GZip标头中的幻数不正确。请确保您在System.IO.Compression.GZipDecoder中传入GZip流。\ u000d \ u000a。在System.IO.Compression.Inflater.Inflate(Byte []字节,Int32偏移量,Int32长度)\ u000d \的System.IO.Compression.Inflater.Decode()\ u000d \ u000a中的ReadHeader(InputBuffer输入)\ u000d \ u000a u000a at System.IO.Compression.DeflateStream.Read(Byte [] array,Int32 offset,Int32 count)\ u000d \ u000a at System.IO.Compression.GZipStream.Read(Byte [] array,Int32 offset,Int32 count)\ u000d \ u000a at Service.IO.Stream.ReadByte()\ u000d \ u000a at ServiceData.CompressionHelper.UnGZip(Byte [] input)

      • 请帮帮我。非常感谢任何帮助。

      非常感谢

1 个答案:

答案 0 :(得分:0)

首先,我不喜欢您的文件路径C:\Users\New\Desktop\Load_Testing。在Java和Beanshell中,您需要像C:\\Users\\New\\Desktop\\Load_Testing

那样使用反斜杠

第二:确保您发送了正确的gzip文件。如果您的C:\Users\New\Desktop\Load_Testing文件不是gzip格式,则需要在Beanshell预处理器中将其压缩,如下所示:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.GZIPOutputStream;

byte[] buffer = new byte[1024];
GZIPOutputStream gzos = new GZIPOutputStream(new FileOutputStream("C:/Users/New/Desktop/Load_Testing.gz"));
FileInputStream in = new FileInputStream("C:/Users/New/Desktop/Load_Testing");

int len;
while ((len = in.read(buffer)) > 0) {
    gzos.write(buffer, 0, len);
}

in.close();

gzos.finish();
gzos.close();

最后,请确保您正在发送正确的Accept-Encoding标头。为此,请在gzip节中添加HTTP Header Manager并包含Accept-Encoding值。

希望这会有所帮助。