如何从ctx.getPreviousResult()获取图像宽度.getResponseData()

时间:2015-07-27 20:49:16

标签: jmeter

我在Jmeter中编写BeanShell Sampler代码以获取图像宽度,这是我们从之前的jmeter http请求获得的。

byte[] samplerdata=ctx.getPreviousResult().getResponseData();

如何存储上述代码中的图像,并获取图像的宽度和高度?

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用ImageIO包。

示例代码:

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;

byte[] samplerData=ctx.getPreviousResult().getResponseData();

InputStream in = new BufferedInputStream(new ByteArrayInputStream(samplerData));
String mimeType = URLConnection.guessContentTypeFromStream(in);

BufferedImage image = ImageIO.read(in);
int width = image.getWidth();
int height = image.getHeight();
String extension = mimeType.split("/")[1];
File file = new File("image." + extension);
ImageIO.write(image, extension, file);

return "Written image: " + file.getAbsolutePath() + "; width: " + width + "; height: " + height;

我们不建议使用Beanshell进行脚本编写,因为它有一些已知的性能问题,并且在严重负载的情况下可能会破坏您的测试。

根据JMeter Best Practices,最好使用JSR223测试元素和#34; groovy"作为一种语言。

请参阅Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For!指南,了解groovy脚本引擎安装说明,脚本最佳模式和不同的脚本引擎基准。

不要担心兼容性,因为有效的Java或Beanshell代码在99%的情况下都是有效的Groovy代码。