在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>
我认为这一定是罪魁祸首,但是,我不知道是什么导致这些问题出现或如何解决。
答案 0 :(得分:2)
JMeter无法正确解码Base64,因为JMeter无法解码Base64。如果您使用一些自定义代码来执行此操作,我建议您先查看此代码。
鉴于你需要做这个魔术:
String encodedFile = response.replace("
","").replaceAll("[\n]+","");
我的期望是您的正则表达式或服务器响应是糟糕的
data
简写来自Beanshell PostProcessor访问父采样器响应因此,您的优秀脚本可以优化为:
FileUtils.writeByteArrayToFile(new File("C:\\Users\\user\\Desktop\\decodedFile.pdf"), Base64.decodeBase64(data));
作为后备选项,您可以使用OS Process Sampler执行此decb64.exe
程序。