【问题标题】:How to send Request file path in JSON request in Jmeter Test如何在 Jmeter Test 中的 JSON 请求中发送请求文件路径
【发布时间】:2020-12-22 21:25:08
【问题描述】:

我是 Jmeter 的新手,我正在尝试创建一个休息 api 请求,我可以用它来做一些负载测试。我能够进行身份验证并继续发送发布请求的下一步。

我们的请求基本上是这样的

{"id" : 112, "someversion" : "2.0", "policyData" : "C:/TEMP/PGF/someinput.json" }

我能够在服务器上捕获示例请求的样子。看来我们在发送请求之前正在压缩并进行一些base64编码......

我的主要问题是如何在发布之前对其进行压缩和编码,使其与该格式相似。

我在 jsr223 预处理器中尝试了以下方法:

import org.apache.commons.io.IOUtils;
import java.util.zip.GZIPOutputStream;
import org.apache.commons.codec.binary.Base64;

String bodyString = sampler.getArguments().getArgument(0).getValue();
byte [] requestBody = bodyString.getBytes();
ByteArrayOutputStream out = new ByteArrayOutputStream(requestBody.length);
GZIPOutputStream gzip = new GZIPOutputStream(out);

所以在这里我需要压缩它。它似乎在压缩,我的要求是这样的:

我在想我只需要编码策略数据而不是整个请求......

我需要在 java 中执行类似的操作,并可能在发送请求之前加密该文件。

using (var cryptStream = new CryptoStream(streamWriter.BaseStream, new 
ToBase64Transform(), CryptoStreamMode.Write, leaveOpen: true))
using (var gzipStream = new GZipStream(cryptStream, 
CompressionMode.Compress))
using (var inputFile = new FileStream(requestData.policyData, 
FileMode.Open, FileAccess.Read))
{
  inputFile.CopyTo(gzipStream);
}

【问题讨论】:

    标签: java jmeter


    【解决方案1】:

    我认为你需要:

    1. 使用JsonSlurper从请求正文中提取文件路径
    2. GZip这个文件内容
    3. 将字节数组编码为Base64

    示例代码:

    String bodyString = sampler.getArguments().getArgument(0).getValue();
    File policyData = new File(new groovy.json.JsonSlurper().parseText(bodyString).policyData)
    def fileStream = new ByteArrayOutputStream()
    def gzipStream = new java.util.zip.GZIPOutputStream(fileStream)
    gzipStream.write(policyData.bytes)
    gzipStream.close()
    def gzipped = fileStream.toByteArray()
    fileStream.close()
    log.info(gzipped.encodeBase64().toString())
    

    有关 JMeter 中 Groovy 脚本的更多信息:Apache Groovy - Why and How You Should Use It

    【讨论】:

    • 非常感谢......我将尝试您刚刚提供的这种方法。我能够更早地解决这个问题......请参阅我对我的问题的回答。谢谢德米特里 T!
    【解决方案2】:

    感谢您的帮助...这就是我最初解决问题的方式

    String bodyString = sampler.getArguments().getArgument(0).getValue();
    ByteArrayOutputStream rstBao = new ByteArrayOutputStream();
    String JsonRequest = FileUtils.readFileToString(new 
    File("C:/TEMP/PGF/pgf_svc_input.json"));
    GZIPOutputStream zos = new GZIPOutputStream(rstBao);
    zos.write(JsonRequest.getBytes());
    IOUtils.closeQuietly(zos);
    byte[] bytes = rstBao.toByteArray();
    //Here is where i am able to encode the bytes to base 64
    Base64.encodeBase64String(bytes);
    vars.put("postDataEncoded64",Base64.encodeBase64String(bytes));
    log.info("khemlall this is the content"+ Base64.encodeBase64String(bytes));
    log.info(vars.get("postDataEncoded64"));
    rstBao.close()
    
    In the body of my request i added the variable:
    
    {
     "id":"22351", 
     "pmmVersion":"2.0",
     "policyData" : "${postDataEncoded64}"
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多