Параметризация имени файла тестовых данных - Jmeter

У меня есть несколько тестовых файлов CSV (около 20 файлов с миллионом записей (только один столбец идентификаторов) в каждом файле) в папке. Я хочу провести тест производительности, используя эти данные.

Чтобы просмотреть файлы в цикле, я добился прогресса, но застрял на одной проблеме. Сначала я объясню, чего я достиг на данный момент, а затем расскажу о проблеме, с которой я столкнулся.

  1. Добавлен семплер BeanShell (сценарий ниже) в группе потоков. Он создает файловые переменные с путями к файлам в качестве значений.
    например. file_1 = /Users/Code/JMeter-Campaign/data/file_1.txt
import java.io.*; 

File fileDir = new File("/Users/Code/JMeter-Campaign/data"); 
File[] fList = fileDir.listFiles(); 

int counter = 1; 

for (File file:fList) {
    if (! file.isHidden()) {
        vars.put("file_" + counter, file.getAbsolutePath());
        log.info("file_" + counter + "=" + vars.get("file_" + counter));    
        counter++;
    }
}
  1. Добавьте ForEach контроллер в цикл. Поля и значения ниже.

Префикс входной переменной: файл
Начальный индекс для цикла: 0
Имя выходной переменной: USER_FILE
Добавить _ перед числом - установлен

  1. Добавлен препроцессор Beanshell как дочерний элемент контроллера ForEach. Преобразует вары в реквизиты.

    props.put("UserFile", vars.get("USER_FILE")); 
    
  2. Добавлена ​​конфигурация набора данных CSV как дочерний элемент контроллера ForEach.

Имя файла: $ {__ P (UserFile,)}
Разделитель:,

Сначала я тестирую простой сценарий - 3 файла (file_1, file_2 и file_3) по 1 записи в каждом.

Он перебирает все 3 файла (отлаженные с помощью log.info, отладочного семплера, дерева результатов просмотра), однако данные поступают только из последнего файла. Итак, для file_1 данные взяты из file_3

Также наблюдатель в jmeter.log, jmeter.services.FileServer всегда указывает на 3-й файл.

Есть ли лучший способ параметризовать тестовые файлы CSV? Я хочу запустить тест со всеми записями в первом файле, а затем во втором файле и так далее. Это предотвратит кеширование на стороне сервера.


person Harman    schedule 24.12.2015    source источник
comment
Я отредактировал ваш пост, чтобы сделать его более читабельным. Пожалуйста, просмотрите его и убедитесь, что он имеет смысл, и отредактируйте его, если я сделал его менее ясным.   -  person Dan Lowe    schedule 26.12.2015


Ответы (1)


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

jmeter -Jpath=/some/path.csv -n -t ....

и используйте функцию __P (), например ${__P(path,)} в конфигурации набора данных CSV. Но таким образом вы не сможете повторить.

Поэтому я предлагаю рассмотреть функцию __CSVRead (), которая, следовательно, оценивается во время выполнения он может содержать переменные.

См. Главу Руководства пользователя Функции и переменные и Как использовать функции JMeter, чтобы получить более подробную информацию о вышеуказанных и других функциях JMeter.

person Dmitri T    schedule 24.12.2015
comment
Привет, Дмитрий! Большое спасибо за ответ. - person Harman; 24.12.2015
comment
Привет, Дмитрий! Можете ли вы прислать образец плана тестирования для этого? - person Guru; 07.01.2016