我有使用Apach JMeter的问题。
我们的项目,Android应用发布json数据" Gzip压缩"到API服务器。 使用" Apache HttpClient"的Android应用程序并且它是" GzipCompressingEntity"类。
对于API服务器的性能测试,我尝试通过JMeter的代理(=" HTTP(S)测试脚本记录器")记录请求。 但记录的请求正文是空的。
我想要做的是发送" Gziped HTTP 请求数据"从Apache JMeter到服务器。 有没有办法呢?
以下是我们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
RequestBody是Gziped二进制数据。
我所做的是
然后,该测试代码以失败告终。 (服务器无响应)
如果直接访问(没有JMeter的代理服务器),该测试成功。 我可以像这样从JMeter发送压缩的请求数据吗?
答案 0 :(得分:4)
将HTTP Header Manager添加到您的测试计划中,并至少添加以下标题:
添加Beanshell PreProcessor作为您需要编码的请求的子代,并将以下代码添加到其“脚本”区域:
import org.apache.commons.io.IOUtils;
import java.util.zip.GZIPOutputStream;
String bodyString = sampler.getArguments().getArgument(0).getValue();
byte [] requestBody = bodyString.getBytes();
ByteArrayOutputStream out = new ByteArrayOutputStream(requestBody.length);
GZIPOutputStream gzip = new GZIPOutputStream(out);
gzip.write(requestBody);
gzip.close();
sampler.getArguments().getArgument(0).setValue(out.toString(0));
它将获取您的请求正文,压缩它并在运行时替换,因此请求将被gzip压缩。
答案 1 :(得分:0)
编码错误,您需要将其保存在正文中
sampler.getArguments().getArgument(0).setValue(new String(compressedBody, 0));