JMeter无法正确解码base64 - 结果为空白PDF

时间:2017-03-28 13:13:02

标签: java jmeter base64 beanshell

在JMeter中,我在响应中获得了base64编码的PDF,我使用RegEx Extractor提取。这一切都很有效。

然后我需要解码该base64编码文档并将其写入文件,我在BeanShell后处理器中执行以下操作:

import org.apache.commons.io.FileUtils;
import org.apache.commons.codec.binary.Base64;

// Set the response variable
String response = vars.get("documentText");

// Remove the carriage return hex code and condense to single string
String encodedFile = response.replace("
","").replaceAll("[\n]+","");

// Decode the encoded string
vars.put("decodedFile",new String(Base64.decodeBase64(encodedFile)));

// Write out the decoded file
Output = vars.get("decodedFile");
f = new FileOutputStream("C:\\Users\\user\\Desktop\\decodedFile.pdf");
p = new PrintStream(f); 
this.interpreter.setOut(p); 
print(Output);
p.flush();
f.close();

我的问题是,解码和写出的文件将打开为空白PDF。

在对此进行故障排除时,我使用JMeter编码的字符串写出了一个文件,然后使用this base64工具手动解码。当我手动解码文件时,它按预期打开。

然后我比较了JMeter生成的文件和我用工具解码的文件的文本,并注意到JMeter生成的文件包含随机的&#39 p>

我认为这一定是罪魁祸首,但是,我不知道是什么导致这些问题出现或如何解决。

1 个答案:

答案 0 :(得分:2)

JMeter无法正确解码Base64,因为JMeter无法解码Base64。如果您使用一些自定义代码来执行此操作,我建议您先查看此代码。

  1. 鉴于你需要做这个魔术:

    String encodedFile = response.replace("
","").replaceAll("[\n]+","");
    

    我的期望是您的正则表达式或服务器响应是糟糕的

  2. 鉴于您使用基于脚本的后处理器,您将不再需要这个" regex"临时步骤,您应该能够通过data简写来自Beanshell PostProcessor访问父采样器响应
  3. 因此,您的优秀脚本可以优化为:

    FileUtils.writeByteArrayToFile(new File("C:\\Users\\user\\Desktop\\decodedFile.pdf"), Base64.decodeBase64(data));
    

    作为后备选项,您可以使用OS Process Sampler执行此decb64.exe程序。