JMeter Beanshell取样器缓存图像
我正在使用JMeter(2.13 r1665067)在登录和注册时使用Google Kaptcha测试一个站点,直到它们可以在测试环境中禁用为止。我已经录制了一个会话,并设置了一个文件采样器的保存响应,以提取kaptcha图像。然后我有一个Beanshell取样器来显示它,这样我就可以根据需要输入代码() 我现在遇到的问题是,从服务器检索到的第一个图像会重复显示。我尝试过将Beanshell中创建的任何对象设置为空post use,并检查“每次调用前重置bsh.Interpreter” 当在文件采样器的“保存响应”中创建图像时,我可以通过使用$_;(随机)函数向每个图像附加一个唯一的id来解决这个问题,但这会导致创建大量文件。我可以验证文件系统上保存的映像文件是否正在更改。我还可以重新启动JMeter,或者从文件系统中清除文件以使其正确显示,但这只是第一次。通过文件采样器的保存响应添加时间戳不够独特,但会创建其他文件 我想找出为什么JMeter似乎在缓存图像,以及是否有办法每次都写入和读取一个文件,通过附加一个唯一的ID来避免大量的图像。我想这与我的配置有关 比恩希尔取样器代码:JMeter Beanshell取样器缓存图像,jmeter,captcha,beanshell,Jmeter,Captcha,Beanshell,我正在使用JMeter(2.13 r1665067)在登录和注册时使用Google Kaptcha测试一个站点,直到它们可以在测试环境中禁用为止。我已经录制了一个会话,并设置了一个文件采样器的保存响应,以提取kaptcha图像。然后我有一个Beanshell取样器来显示它,这样我就可以根据需要输入代码() 我现在遇到的问题是,从服务器检索到的第一个图像会重复显示。我尝试过将Beanshell中创建的任何对象设置为空post use,并检查“每次调用前重置bsh.Interpreter” 当在文件
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。底层工具包尝试将具有相同文件名的多个请求解析为相同的返回图像
由于促进图像对象共享所需的机制可能会继续保留在无限期内不再使用的图像上,因此鼓励开发人员通过使用createImage变体(只要可用)来实现自己的图像缓存如果指定文件中包含的图像数据发生更改,则此方法返回的图像对象可能仍然包含上次调用后从文件加载的过时信息。可以通过调用返回的图像上的刷新方法手动丢弃以前加载的图像数据
顺便说一下,你可以在BeaSek后处理程序中删除保存的响应文件,一旦你完成了CAPTCHA,就不会在测试结束之前保存很多文件。@ Ray-谢谢,我确实考虑过了,但是我想理解我正在经历的“缓存”,而不是仅仅在我的无知中工作。