Зачем JMeter-инженеру CSV-файлы?
Представьте: вам нужно протестировать систему с 1000 уникальных пользователей. Вручную прописывать логины и пароли? Это прошлый век! CSV Data Set Config в JMeter — ваш «секретный ингредиент» для:
- Тестирования с реальными данными без рутины
- Создания динамических сценариев (регистрация, авторизация, персональные данные)
- Повторного использования тестовых данных для разных сценариев
Как это работает: магия под капотом
- JMeter загружает CSV в память (но не весь сразу — это важно!)
- Данные распределяются между виртуальными пользователями (threads)
- Переменные подставляются в запросы автоматически
👉 Простой пример:
username,password ivan,secret123 anna,qwerty777
В HTTP-запросе используете ${username}
и ${password}
— JMeter подставит нужные значения.
Где раздобыть тестовые данные?
- Генераторы (Mockaroo, GenerateData)
- Экспорт из БД (MySQL, PostgreSQL)
- Ручное создание (Excel → Сохранить как CSV)
- Реальные данные (обезличенные!)
⚠️ Важно: никогда не используйте реальные пароли из production!
Настройка за 4 шага
- Создаем CSV-файл (например,
users.csv
):csvid,email,token 1,user1@test.com,abc123 2,user2@test.com,xyz987 - Добавляем CSV Data Set Config:
- ПКМ на Thread Group → Add → Config Element → CSV Data Set Config
- Заполняем ключевые поля:propertiesFilename: data/users.csv Variable Names: id,email,token Delimiter: , (или «;» если данные содержат запятые) Recycle on EOF? True (циклическое чтение) Stop thread on EOF? False Sharing mode: All threads
- Используем в запросе:httpPOST /api/auth Content-Type: application/json { «userId»: ${id}, «email»: «${email}», «accessToken»: «${token}» }
Продвинутые техники
1. Работа с большими файлами
- Разбивайте CSV на части (по 10 000 строк)
- Используйте Directory Listing для загрузки нескольких файлов
- Включите Cache CSV Data в jmeter.properties:properties csvdataset.cache.size=1000
2. Динамические пути к файлам
Используйте переменные в пути:
properties
Filename: ${__P(data.dir)}/users_${__time(yyyy-MM-dd)}.csv
Где data.dir
задается через -Jdata.dir=/path
при запуске.
3. Комбинирование данных
csv
base_url,path,param https://api.example.com,/v1/login,debug=true https://staging.example.com,/v2/login,test_mode=1
В запросе:
http
${base_url}${path}?${param}
5 смертельных ошибок (и как их избежать)
- Кодировка «кракозябр»
- Всегда явно указывайте
File Encoding: UTF-8
- Проверяйте файл в Notepad++ (Кодировка → UTF-8)
- Всегда явно указывайте
- Конфликты данных
- Для
Sharing mode: Current thread
нужен отдельный файл на поток - Или используйте уникальные префиксы:
user_${__threadNum}_${id}
- Для
- Тормозит тест
- Отключайте
Allow quoted data?
если нет кавычек - Уменьшайте
cache.size
для больших файлов
- Отключайте
- Неожиданные дубли
- Проверьте
Recycle on EOF
иStop thread on EOF
- Используйте
${__RandomString(10)}
для уникальности
- Проверьте
- Потеря данных
- Всегда делайте бэкап CSV перед тестом
- Логируйте использованные данные через
Sample Variables
Интеграция с другими инструментами
+ Random CSV Generator
groovy
// В JSR223 Sampler def file = new File('dynamic_data.csv') file.write('id,name\n') (1..100).each { file.append("${it},User${it}\n") } vars.put('data.file', file.path)
+ Jenkins Pipeline
groovy
pipeline { stages { stage('Load Test') { steps { script { def testData = readCSV file: 'testdata.csv' sh "jmeter -Jusers=${testData.size()} -n -t test.jmx" } } } } }
Чек-лист перед запуском
- CSV-файл существует и доступен для чтения
- Количество строк ≥ количеству потоков × итераций
- Разделитель совпадает с указанным в конфиге
- Нет «битых» строк (проверить в Excel/LibreOffice)
- Переменные в запросах точно соответствуют Variable Names
Когда CSV — не лучший выбор
❌ Очень большие данные (1M+ строк) → используйте JDBC
❌ Сложная логика генерации → JSR223 + Groovy
❌ Бинарные данные → Base64 + параметризация
Вывод: 3 уровня мастерства
- Новичок: Ручное создание CSV, базовые запросы
- Продвинутый: Динамические пути, комбинирование данных
- Эксперт: Генерация CSV на лету + интеграция с CI/CD
Профессиональный совет: Начните с простого CSV из 10 строк, отладьте логику, а затем масштабируйте до тысяч записей. JMeter + CSV — это как швейцарский нож в мире тестирования: кажущаяся простота скрывает огромные возможности!