2015-05-21 4 views
1

Я использую JMeter (2.13 r1665067) для проверки сайта с Google Kaptcha при входе в систему и регистрации до тех пор, пока они не будут отключены в тестовой среде. Я записал сеанс и настроил «Сохранить ответы» на файл сэмплера, чтобы извлечь изображение kaptcha. Затем у меня есть сэмплер Beanshell, поэтому я могу ввести код по мере необходимости (thanks to this post).JMeter Beanshell sampler caches image

Проблема, с которой я столкнулся, - это первое изображение, полученное с сервера, которое отображается повторно. Я попытался настроить любые объекты, созданные в Beanshell, на нулевое использование после использования и проверить «Сбросить bsh.Interpreter перед каждым вызовом».

Мне удалось обойтись, используя функцию $ __ (Random) для добавления уникального идентификатора к каждому изображению при создании в файле «Сохранить ответы» в файле сэмплера, но приводит к созданию большого количества файлов. Я могу проверить, что файл сохраненной картинки меняется на файловую систему. Я также могу перезапустить JMeter или удалить файл из файловой системы, чтобы он отображался правильно, но только в первый раз. Добавление метки времени с помощью Save Responses в пробоотборник файла не является достаточно уникальным, но в любом случае создает дополнительные файлы.

Я хотел бы узнать, почему JMeter, похоже, кэширует изображения, и если есть способ, чтобы каждый файл записывался и читался каждый раз, избегая множества из них, которые я получил бы, добавив уникальный идентификатор. Я предполагаю, что это связано с моей конфигурацией.

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) 
+0

Как в стороне, вы можете попробовать удалить сохраненные файлы ответов в постпроцессоре beanshell после того, как вы закончите с капчей, чтобы не хранить много файлов к концу теста. – RaGe

+0

@RaGe Спасибо, я действительно считал это, но я хотел понять «кеширование», которое я испытываю, вместо того, чтобы просто обойти мое невежество. – ethesx

ответ

1

Ваш вопрос не является на самом деле с JMeter, но с функцией Toolkit.getImage(). От its documentation:

Возвращает изображение, которое получает данные пикселя из указанного файла, форма которого может быть GIF, JPEG или PNG. Основной инструментарий пытается разрешить несколько запросов с одним и тем же именем файла с тем же возвращенным изображением.

Поскольку механизм, необходимый для облегчения совместного использования объектов изображения, может продолжать удерживаться на изображениях, которые больше не используются в течение неопределенного периода времени, разработчикам предлагается реализовать собственное кэширование изображений, используя вариант createImage везде доступный. Если данные изображения, содержащиеся в указанном файле, меняются, объект Image, возвращенный этим методом, может содержать устаревшую информацию, которая была загружена из файла после предыдущего вызова. Ранее загруженные данные изображения могут быть отброшены вручную, вызвав метод flush по возвращенному Image.

+0

Использование .flush() работает как ожидалось. – ethesx