У меня есть несколько тестовых файлов CSV (около 20 файлов с миллионом записей (только один столбец идентификаторов) в каждом файле) в папке. Я хочу провести тест производительности, используя эти данные.
Чтобы просмотреть файлы в цикле, я добился прогресса, но застрял на одной проблеме. Сначала я объясню, чего я достиг на данный момент, а затем расскажу о проблеме, с которой я столкнулся.
- Добавлен семплер 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++;
}
}
- Добавьте
ForEach
контроллер в цикл. Поля и значения ниже.
Префикс входной переменной: файл
Начальный индекс для цикла: 0
Имя выходной переменной: USER_FILE
Добавить _ перед числом - установлен
Добавлен препроцессор Beanshell как дочерний элемент контроллера
ForEach
. Преобразует вары в реквизиты.props.put("UserFile", vars.get("USER_FILE"));
Добавлена конфигурация набора данных 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? Я хочу запустить тест со всеми записями в первом файле, а затем во втором файле и так далее. Это предотвратит кеширование на стороне сервера.