如何使用ApacheJMeter发布GZip请求

如何使用ApacheJMeter发布GZip请求,jmeter,httprequest,gzip,Jmeter,Httprequest,Gzip,我有一个关于使用Apach JMeter的问题 我们的项目,Android应用程序将带有“Gzip压缩”的json数据发布到API服务器。 Android应用程序使用“ApacheHttpClient”及其“GzipCompressingEntity”类 对于API服务器的性能测试,我尝试通过JMeter的代理(=“HTTP(s)测试脚本记录器”)记录请求。 但是记录的请求主体是空的 我想做的是从ApacheJMeter向服务器发送“gzip HTTP请求数据”。 有什么办法吗 下面是我们的An

我有一个关于使用Apach JMeter的问题

我们的项目,Android应用程序将带有“Gzip压缩”的json数据发布到API服务器。 Android应用程序使用“ApacheHttpClient”及其“GzipCompressingEntity”类

对于API服务器的性能测试,我尝试通过JMeter的代理(=“HTTP(s)测试脚本记录器”)记录请求。 但是记录的请求主体是空的

我想做的是从ApacheJMeter向服务器发送“gzip HTTP请求数据”。 有什么办法吗

下面是我们的Android应用程序的请求头的示例

POST /api/test HTTP/1.1
Content-Type: application/json
Transfer-Encoding: chunked
Content-Encoding: gzip
Host: 192.168.11.11:8080
Connection: Keep-Alive
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.5)
Accept-Encoding: gzip,deflate
请求主体是gzip管道二进制数据。

我所做的是

  • 在JMeter上运行“HTTP(S)测试脚本记录器(代理服务器)”
  • 设置Android的http代理以使用该代理服务器
  • 执行HTTP客户端的Android测试代码(post数据由Gzip压缩) 然后,该测试代码以失败告终。(服务器没有响应)

    如果直接访问(不使用JMeter的代理服务器),则测试成功。 我可以像这样从JMeter发送压缩的请求数据吗

  • 添加到测试计划中,并至少添加以下标题:

    • 内容类型:application/json
    • 内容编码:gzip
  • 添加为需要编码的请求的子级,并将以下代码添加到其“脚本”区域:

    它将获取您的请求正文,压缩它并动态替换,这样请求将被gzip压缩


  • 编码是错误的,你们需要像这样把它保存在身体里

    sampler.getArguments().getArgument(0).setValue(new String(compressedBody, 0));
    

    欢迎来到Stackoverflow。请首先在提问之前使用serach函数,因为可能已经有其他问题与相同主题的答案。如果你发现问题,但答案不充分或问题本身不匹配,请将它们添加到你的帖子中,说明它们不相关。还请添加到目前为止您所做的详细信息。谢谢您的建议。对不起,我的描述不够。我检查了那个问题,但我认为它与我的问题不符。我可以通过压缩Gzip从服务器接收响应。但是,我无法发送Gziped“请求数据”。我想压缩来自JMeter的“请求数据”。(方向是“客户端=>服务器”)请使用此信息更新您的问题,而不是在评论中。您的android应用程序是否使用HTTPS?否。我在记录请求数据时没有使用SSL。谢谢!我成功地通过Beanshell预处理器发出Gziped请求。我真的很感激你的回答。请注意,如果你的HTTP请求采样器填写了“内容编码”字段,那将破坏压缩。您需要将该字段设置为空白。如果设置了大量的请求,您可以在文本编辑器中轻松打开JMX文件并进行搜索和替换以删除它。为了完成@BrianReichl的精彩评论,他说的是HTTP请求采样器中的内容编码字段(就在要调用的URL旁边),而不是您可能已添加到HTTP标头管理器中的内容编码标头。
    sampler.getArguments().getArgument(0).setValue(new String(compressedBody, 0));