1/12/2015

JMeter: читаем CSV с помощью BeanShell

Когда заходит речь о чтении данных из CSV-файла для использования их в нагрузочных тестах на JMeter, то первая рекомендация - CSV Data Set Config. Для большинства сценариев его хватает и он работает ожидаемо и без ошибок. Однако, в некоторых специфических случаях его поведение оказалось для меня непредсказуемым и стоило мне нескольких часов отладки.  В отладке сценариев JMeter незаменимый инструмент это Debug Sampler. Он помог мне выявить проблему - при последовательном чтении нескольких файлов с именами вида <filename>_N.csv, где N меняется от 1 до 5 (для примера) CSV Data Set Config вёл себя непредсказуемо. Если быть конкретным, то при работе CSV Data Set Config во вложенных Loop/While Controller некорректно формировалось имя следуюшего файла и были проблемы с определением момента окончания чтения файла текущего. Поиски в Google не дали результатов - все примеры были с более простыми сценариями. В результате пришлось написать свою реализацию чтения данных из CSV на BeanShell.

Дано:
Есть веб-приложение "Опросник" (пример выдуман). Каждый пользователь должен ответить на 5 наборов из Х вопросов в каждом (X для каждого набора разное). После ответа на все вопросы одного набора, нужно перейти на следующий. Для проведения нагрузочного тестирования были подготовлены CSV-файлы с ответами вида:
answer1,0
answer2,1
answer3,2
...
answerX,X-1
где в первом столбце записаны ответы (answer), а во втором номера вопросов в наборе (answerNum).

Общий сценарий тестирования:
  1. Начинаем отвечать на i-ый набор вопросов.
  2. Читаем данные из i-го файла с ответами (построчно)
  3. Если это не последняя строка, то отвечаем на j-ый вопрос
  4. Если это последняя строка, то i++ и переходим к следующему набору вопросов (п. 1)
Реализация чтения CSV:
Выполнена на встроенном в JMeter языке BeanShell. Для использования необходимо воспользоваться компонентом BeanShell Sampler. Сам код можно скачать по ссылке Manually read CSV data in JMeter witn BeanShell или посмотреть ниже:
Также можно скачать тест-план. Он нерабочий с точки зрения HTTP-запросов, но даёт представление об общей структуре теста.

За помощь в исследовании проблемы благодарю Илью Пономаренко.

Комментариев нет:

Отправить комментарий