Мастер работы с CSV в JMeter: как превратить данные в мощный инструмент тестирования

Зачем JMeter-инженеру CSV-файлы?

Представьте: вам нужно протестировать систему с 1000 уникальных пользователей. Вручную прописывать логины и пароли? Это прошлый век! CSV Data Set Config в JMeter — ваш «секретный ингредиент» для:

  • Тестирования с реальными данными без рутины
  • Создания динамических сценариев (регистрация, авторизация, персональные данные)
  • Повторного использования тестовых данных для разных сценариев

Как это работает: магия под капотом

  1. JMeter загружает CSV в память (но не весь сразу — это важно!)
  2. Данные распределяются между виртуальными пользователями (threads)
  3. Переменные подставляются в запросы автоматически

👉 Простой пример:

username,password
ivan,secret123
anna,qwerty777

В HTTP-запросе используете ${username} и ${password} — JMeter подставит нужные значения.

Где раздобыть тестовые данные?

  • Генераторы (Mockaroo, GenerateData)
  • Экспорт из БД (MySQL, PostgreSQL)
  • Ручное создание (Excel → Сохранить как CSV)
  • Реальные данные (обезличенные!)

⚠️ Важно: никогда не используйте реальные пароли из production!

Настройка за 4 шага

  1. Создаем CSV-файл (например, users.csv):csvid,email,token 1,user1@test.com,abc123 2,user2@test.com,xyz987
  2. Добавляем CSV Data Set Config:
    • ПКМ на Thread Group → Add → Config Element → CSV Data Set Config
  3. Заполняем ключевые поля:propertiesFilename: data/users.csv Variable Names: id,email,token Delimiter: , (или «;» если данные содержат запятые) Recycle on EOF? True (циклическое чтение) Stop thread on EOF? False Sharing mode: All threads
  4. Используем в запросе: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 смертельных ошибок (и как их избежать)

  1. Кодировка «кракозябр»
    • Всегда явно указывайте File Encoding: UTF-8
    • Проверяйте файл в Notepad++ (Кодировка → UTF-8)
  2. Конфликты данных
    • Для Sharing mode: Current thread нужен отдельный файл на поток
    • Или используйте уникальные префиксы: user_${__threadNum}_${id}
  3. Тормозит тест
    • Отключайте Allow quoted data? если нет кавычек
    • Уменьшайте cache.size для больших файлов
  4. Неожиданные дубли
    • Проверьте Recycle on EOF и Stop thread on EOF
    • Используйте ${__RandomString(10)} для уникальности
  5. Потеря данных
    • Всегда делайте бэкап 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 уровня мастерства

  1. Новичок: Ручное создание CSV, базовые запросы
  2. Продвинутый: Динамические пути, комбинирование данных
  3. Эксперт: Генерация CSV на лету + интеграция с CI/CD

Профессиональный совет: Начните с простого CSV из 10 строк, отладьте логику, а затем масштабируйте до тысяч записей. JMeter + CSV — это как швейцарский нож в мире тестирования: кажущаяся простота скрывает огромные возможности!