【问题标题】:JMeter Beanshell sampler caches imageJMeter Beanshell 采样器缓存图像
【发布时间】:2015-05-21 11:57:46
【问题描述】:

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

我现在遇到的问题是从服务器检索到的第一张图片重复显示。我尝试将 Beanshell 中创建的任何对象设置为使用后为空,并检查“每次调用前重置 bsh.Interpreter”。

我能够通过使用 $__(Random) 函数来解决问题,当在将响应保存到文件采样器中创建时,将唯一的 id 附加到每个图像,但会导致创建大量文件。我可以验证文件系统上保存的图像文件是否正在更改。我也可以重新启动 JMeter,或者从文件系统中清除文件以使其正确显示,但只是第一次。通过保存响应向文件采样器添加时间戳不够独特,但无论如何都会创建其他文件。

我想知道为什么 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)

【问题讨论】:

  • 顺便说一句,您可以尝试在完成验证码后删除 beanshell 后处理器中保存的响应文件,以免在测试结束时保留大量文件。
  • @RaGe 谢谢,我确实考虑过这一点,但我想了解我正在经历的“缓存”,而不是仅仅解决我的无知。

标签: jmeter captcha beanshell


【解决方案1】:

您的问题不在于 JMeter,而在于 Toolkit.getImage() 函数。来自its documentation

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

由于促进这种 Image 对象共享所需的机制可能会继续无限期地保留不再使用的图像,因此鼓励开发人员在可用的情况下使用 createImage 变体来实现自己的图像缓存. 如果指定文件中包含的图像数据发生变化,则此方法返回的 Image 对象可能仍包含在先前调用后从文件中加载的陈旧信息。 之前加载的图像数据可以通过以下方式手动丢弃在返回的Image 上调用flush 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多