使用JMeter将一个PDF文件内容保存到另一个PDF文件时面临的问题

deikduxw  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(171)

我正在使用Beanshell采样器将一个PDF文件内容保存到另一个PDF文件中。
在Beanshell采样器中我已经把下面的代码:

FileInputStream in = new FileInputStream("C:\\Users\\Dey\\Downloads\\sample.pdf");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
for (int i; (i = in.read(buffer)) != -1; ) {
bos.write(buffer, 0, i);
}
in.close();
byte[] extractdata = bos.toByteArray();
bos.close();
vars.put("extractdata", new String(extarctdata));

使用beanshell后处理器,我将此变量${extractdata}保存在另一个pdf文件中。生成文件,但打开文件时,文件为空,意味着没有显示任何内容。
所以,有人能告诉我如何解决这个问题吗?上面的代码片段有什么错误吗?请指导我。

ar5n3qh5

ar5n3qh51#

1.你打错了字

byte[] extractdata = bos.toByteArray();

vars.put("extractdata", new String(extarctdata));

因此您的测试元素正在静默失败,请检查jmeter.log文件,它应该包含一些错误。
1.由于我们看不到Beanshell后处理器代码,因此无法说明还有什么问题,很可能是在将字节数组转换为字符串或将字符串转换为字节数组时,encoding存在问题。
所以我建议跳过这一步,使用vars.putObject()函数代替:

vars.put("extractdata", extractdata);

然后再

byte [] extractdata = vars.getObject("extractdata");

1.如果您只需要复制文件,则可以使用以下代码段:

import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths

Path source = Paths.get("C:\\Users\\Dey\\Downloads\\sample.pdf");
Path target = Paths.get("/location/for/the/new/file.pdf")

Files.copy(source, target);

1.从JMeter 3.1开始,建议使用JSR223测试元素和Groovy来编写脚本,因此您应该切换到Groovy,在这种情况下,您将能够执行以下操作:

new File('/location/for/the/new/file.pdf').bytes = new File('C:\\Users\\Dey\\Downloads\\sample.pdf').bytes

有关JMeter中的Groovy脚本的更多信息:Apache Groovy: What Is Groovy Used For?

相关问题