JMeter豆壳采样器缓存图像



我使用JMeter (2.13 r1665067)在登录和注册时使用Google Kaptcha测试网站,直到它们可以在测试环境中禁用。我录制了一个会话,并设置了一个保存响应到文件采样器来提取kaptcha图像。然后我有一个Beanshell采样器显示它,这样我就可以根据需要输入代码(感谢这篇文章)。

我现在遇到的问题是从服务器检索到的第一个图像反复显示。我试过设置在Beanshell中创建的任何对象为空后使用,并检查"重置bsh。

我能够通过使用$__(Random)函数在保存响应到文件采样器中创建时为每个图像附加一个唯一的id来解决问题,但结果是创建了很多文件。我可以验证保存的映像文件在文件系统上是否发生了变化。我也可以重新启动JMeter,或者从文件系统中清除文件,使其正确显示,但只能是第一次。通过Save Responses向文件采样器添加时间戳不够独特,但无论如何都会创建额外的文件。

我想找出为什么JMeter似乎是缓存图像,如果有一种方法有一个单一的文件写入和读取每次,避免他们的转换,我将通过附加一个唯一的ID。我想这和我的配置有关。

Beanshell采样器代码:

filenameOrURL = new URL("file://${FILE2}");
image = Toolkit.getDefaultToolkit().getImage(filenameOrURL);
icon = new javax.swing.ImageIcon(image);
pane = new JOptionPane("Enter Captcha", 0, 0, null);
String captcha = (String)pane.showInputDialog(null, "Captcha", "Captcha", 0, icon, null,null);
filenameOrURL = image = pane = icon = null;
log.info(captcha);
vars.putObject("captcha",captcha);

保存对文件采样器的响应参数:

Filename prefix: /response/response_
Variable name: FILE

线程组:

如果我的名声在我之前,我会发布一张图片。脸红:

  Recording Controller
      login.html (GET)
        Save Responses to a file
      BeanShell Sampler
      login.html (POST)
      logout.html (GET)

您的问题不是真正与JMeter,而是与Toolkit.getImage()函数。从它的文档:

返回从指定文件获取像素数据的图像,其格式可以是GIF, JPEG或PNG。底层工具包尝试将具有相同文件名的多个请求解析为相同返回的图像。

由于促进Image对象共享所需的机制可能会在一段不确定的时间内继续保留不再使用的图像,因此鼓励开发人员通过使用createImage变体来实现他们自己的图像缓存。如果指定文件中包含的图像数据发生了变化,则从该方法返回的image对象可能仍然包含先前调用后从文件中加载的陈旧信息。可以在返回的Image上调用flush方法手动丢弃先前加载的图像数据

相关内容

  • 没有找到相关文章

最新更新