ttools
тестированиебаза данныхfake dataразработкаqa

Как сгенерировать тестовые данные для базы за 5 минут

Генерируйте реалистичные фейковые данные (имена, emails, адреса) для тестирования без ручного заполнения. Экономит часы разработки.

Заполнять базу данных вручную перед каждым прогоном тестов — это путь к выгоранию. Скопировал «Иван Иванов», вставил в 50 строк, а потом выяснилось, что нужны уникальные email'ы и валидные номера телефонов. Генераторы фейковых данных решают эту задачу за пару минут: получаешь сотни реалистичных записей одной командой или через API.

Зачем вообще нужны фейковые данные

Тестирование на продакшен-данных — плохая идея по трём причинам. Первая: GDPR и другие законы о персональных данных не позволяют копировать реальные имена и email'ы в dev-окружение. Вторая: на продакшене может не быть нужных edge cases — пользователя с фамилией из 50 символов или email'а с кириллическим доменом. Третья: случайно отправишь тестовое письмо реальному клиенту, и привет жалобе в поддержку.

Фейковые данные покрывают все сценарии:

  • Проверка валидации форм (что будет, если в поле «Имя» 255 символов?)
  • Нагрузочное тестирование (нужна БД с миллионом записей)
  • UI-тесты (скриншоты должны выглядеть реалистично, а не показывать «Test User 1»)
  • Демо-стенды для клиентов (показываешь интерфейс с правдоподобными данными, а не абракадаброй)

Какие данные чаще всего генерируют

Стандартный набор для большинства проектов:

  • Имена и фамилии — желательно с учётом локали (Джон Смит для англоязычного сайта, Алексей Петров для русскоязычного)
  • Email'ы — синтаксически корректные, с разными доменами (@gmail.com, @yandex.ru, @corporate.com)
  • Номера телефонов — в формате страны (+7 для России, +1 для США)
  • Адреса — улица, город, индекс (для e-commerce и логистики)
  • Даты — дни рождения, даты регистрации, даты заказов
  • Числовые данные — цены, количество товаров, рейтинги

Для финтеха добавляются номера банковских карт (тестовые, не настоящие), для соцсетей — аватары и биографии, для блогов — случайный текст постов.

Библиотеки для разных языков

Faker.js / @faker-js/faker (JavaScript/TypeScript)

Самая популярная библиотека для Node.js. После скандала с оригинальным автором сообщество перешло на форк @faker-js/faker.

import { faker } from '@faker-js/faker';

const users = Array.from({ length: 100 }, () => ({
  id: faker.string.uuid(),
  name: faker.person.fullName(),
  email: faker.internet.email(),
  avatar: faker.image.avatar(),
  birthdate: faker.date.birthdate({ min: 18, max: 65, mode: 'age' }),
  address: {
    street: faker.location.streetAddress(),
    city: faker.location.city(),
    country: faker.location.country()
  }
}));

Поддерживает локализацию — меняешь faker.locale = 'ru' и получаешь русские имена.

Faker (Python)

Прямой аналог для Python-проектов. Удобен для генерации CSV или заполнения Django ORM.

from faker import Faker
fake = Faker('ru_RU')

for _ in range(100):
    User.objects.create(
        username=fake.user_name(),
        email=fake.email(),
        first_name=fake.first_name(),
        last_name=fake.last_name(),
        phone=fake.phone_number()
    )

Другие языки

  • PHP: fzaninotto/Faker (хотя разработка остановлена, всё ещё работает)
  • Java: javafaker или datafaker
  • Go: go-faker/faker
  • Ruby: faker gem

Все они работают по одному принципу: вызываешь метод, получаешь случайное значение нужного типа.

Онлайн-генераторы и API

Если не хочешь тянуть библиотеку в проект или нужно быстро сгенерировать данные для разового импорта, есть веб-инструменты.

Сценарии использования:

  • QA-инженер без доступа к коду готовит CSV для импорта
  • Дизайнер заполняет макет в Figma реалистичными именами
  • PM создаёт демо-данные для презентации стейкхолдерам

Большинство генераторов позволяют настроить:

  • Количество записей (от 10 до 10 000+)
  • Поля (выбираешь нужные: имя, email, телефон, адрес)
  • Формат вывода (JSON, CSV, SQL, XML)
  • Локаль (русский, английский, немецкий и т.д.)

Некоторые предоставляют REST API — отправляешь GET-запрос, получаешь JSON с фейковыми данными. Удобно для автоматизации: скрипт каждый вечер пересоздаёт тестовую БД со свежими данными.

Как использовать в CI/CD

Генерация тестовых данных должна быть частью пайплайна. Типичный сценарий для Docker Compose:

services:
  db:
    image: postgres:15
    environment:
      POSTGRES_DB: testdb
      POSTGRES_USER: test
      POSTGRES_PASSWORD: test
  
  seed:
    build: ./seed
    depends_on:
      - db
    command: npm run seed

Скрипт seed запускается после поднятия БД и заполняет её данными через Faker. В Dockerfile прописываешь установку зависимостей:

FROM node:18-alpine
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY seed.js ./
CMD ["node", "seed.js"]

Теперь каждый разработчик получает идентичную БД одной командой docker-compose up.

Проблемы и подводные камни

Уникальность. Генераторы могут создать дубликаты, если запрашиваешь много данных. Email'ы особенно опасны — у Faker ограниченный словарь имён. Решение: добавлять timestamp или UUID к каждому email'у.

email: `${faker.internet.userName()}.${Date.now()}@example.com`

Производительность. Генерация миллиона записей в цикле занимает время. Для больших объёмов лучше генерировать батчами по 1000 строк и использовать bulk insert.

Валидация. Faker не гарантирует, что данные пройдут бизнес-логику. Например, сгенерированный номер телефона может быть синтаксически корректным, но не существовать в реальной телефонной сети. Для критичных полей добавляй дополнительные проверки.

GDPR-совместимость. Фейковые данные всё ещё могут случайно совпасть с реальными. Если это критично (например, в медицинских системах), используй явно несуществующие домены (.test, .example) и специальные диапазоны номеров.

Инструменты для быстрого старта

Если нужно просто получить список имён, email'ов или UUID без настройки окружения, попробуй онлайн-генераторы. Генератор случайных имён создаёт реалистичные имена и фамилии для русской и английской локали — достаточно выбрать количество и скопировать результат. Для email'ов подойдёт генератор email-адресов, который создаёт валидные адреса с разными доменами. Нужны уникальные идентификаторы для каждой записи? Генератор UUID выдаст сколько угодно UUID v4 одним кликом.

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

Инструменты по теме