【问题标题】:How to convert receiving bytes array as base64 to string and write to file in Jmeter如何将接收字节数组作为base64转换为字符串并写入Jmeter中的文件
【发布时间】:2020-09-21 21:57:52
【问题描述】:

{"result":{"success":true,"errMsg":"error"},"bytes":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxCdXNpbmVzc1J1bGUgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+DQogICAgPEN"}

我收到类似上面的响应,我需要将字节转换为字符串并使用 Jmeter 写入文件,这怎么可能,我能够使用 JSON 提取器提取值并写入文件来写入文件

receivedbytes =  vars.get("recvBytes");
log.info(receivedbytes);
FileWriter fstream = new FileWriter("C:\\tmp\\getSoftwarePackage.out", true);
BufferedWriter out = new BufferedWriter(fstream);
out.write(receivedbytes);
out.close();
fstream.close();

recvBytes 是响应字节数

【问题讨论】:

    标签: groovy https jmeter beanshell


    【解决方案1】:

    解码后就可以实现了。

    import org.apache.commons.codec.binary.Base64; String receivedbytes = 
    
    vars.get("recvBytes"); 
    log.info(receivedbytes); 
    log.info("Decoding base64 format");
    String decoded_response = new String(Base64.decodeBase64(receivedbytes));
    FileWriter fstream = new FileWriter("C:\\tmp\\getSoftwarePackage.out", true);
    BufferedWriter out = new BufferedWriter(fstream);
    out.write(decoded_response); 
    out.close(); 
    fstream.close();
    

    【讨论】:

      【解决方案2】:
      1. Since JMeter 3.1 you should be using JSR223 Test Elements and Groovy language,不是 Beanshell
      2. 您收到的不是字节数组,而是 Base64 字符串
      3. 如果您要使用多个线程编写同一个文件,您将遇到race condition 导致数据丢失

      假设以上所有:

      1. 将您的代码修改为如下所示:

        vars.put('decodedBytes', new String(vars.get('recvBytes').decodeBase64()))
        
      2. 将下一行添加到user.properties file:

        sample_variables=decodedBytes
        
      3. 使用Flexible File Writer将变量写入文件

      如果您不“害怕”竞态条件或使用 JMeter 进行功能测试,以 1 个虚拟用户运行它,您可以修改代码如下:

      new File('C:\\tmp\\getSoftwarePackage.out').text = new String(vars.get('recvBytes').decodeBase64())
      

      【讨论】:

      • 感谢您的回答,我们如何避免竞争条件并将其写入多个文件
      • 您的意见很有帮助。关注这个blazemeter.com/blog/… 几乎实现了我正在做的事情。但是现在由于响应大小而面临异常,Exceptionon 在视图结果树和侦听器中。有什么办法可以克服吗?
      • 解决了文件大小缓冲区的问题。我在 user.properties 中发送了这个 kg.apc.jmeter.reporters.FFWBufferSize=100000000 并且它有效。现在看看我是否可以为每个请求创建多个不同的文件
      • 是否可以将灵活文件写入器输出写为带有时间戳或其他内容的多个文件
      猜你喜欢
      • 2016-10-21
      • 2012-07-21
      • 1970-01-01
      • 2016-10-21
      • 2014-06-09
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      相关资源
      最近更新 更多