qvib.pro
EN

Генерация тестовых данных с AI: ускоряем вайб-кодинг

Генерация тестовых данных с AI: ускоряем вайб-кодинг

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

Зачем это нужно

Представьте: вы разрабатываете новую фичу, и вам нужно наполнить базу данных сотнями или тысячами записей, чтобы проверить производительность, корректность фильтрации или отображение данных на UI. Вручную это долго и утомительно. Брать данные с продакшена — риск утечки персональных данных и нарушение конфиденциальности. Здесь на помощь приходит генерация синтетических данных. Это ваш инструмент, когда:

  • Нужен сид для разработки: Быстро поднять локальное окружение с реалистичными данными, чтобы начать кодить, а не заниматься дата-инжинирингом.
  • Фикстуры под тесты: Для юнит-, интеграционных или сквозных тестов нужны предсказуемые, но разнообразные данные. При этом важно, чтобы они включали как «счастливые пути», так и краевые, а также намеренно «грязные» записи для проверки устойчивости системы. Например, fixture-gen позволяет генерировать данные, которые гарантированно пройдут валидацию по вашей схеме, или, наоборот, создаст невалидные данные для негативных тестов [github.com/arjvand/fixture-gen].
  • Данные для демо/презентаций: Чтобы показать продукт в лучшем свете, нужны не test1, test2, а правдоподобные имена, адреса, транзакции.
  • Нагрузочное тестирование: Для проверки производительности базы данных или API на стейджинге требуются миллионы записей. В PostgreSQL можно генерировать JSONb-документы прямо в базе с помощью generate_series и jsonb_build_object, что позволяет избежать перетаскивания больших CSV-файлов [grishaev.me/json-sql].

Как пользоваться

Основной принцип прост: вы даете AI схему данных (например, TypeScript-интерфейс, Zod-схему или описание таблиц SQL), указываете формат и количество, а AI генерирует данные, соблюдая все ваши правила. Вот готовый промпт, который вы можете использовать:

Ты — инженер данных. Сгенерируй РЕАЛИСТИЧНЫЕ синтетические тестовые данные строго по схеме ниже. Никаких реальных персональных данных — только выдуманные.
СХЕМА / ПОЛЯ И ТИПЫ: «<ВСТАВЬ: таблицы и колонки, или TS-интерфейс, или описание полей с ограничениями>».
ФОРМАТ ВЫВОДА: <JSON-массив / SQL INSERT / CSV>. СКОЛЬКО ЗАПИСЕЙ: <N>. ЛОКАЛЬ/ЯЗЫК ДАННЫХ: <напр. русские имена и адреса>.
ОСОБЫЕ ПРАВИЛА: «<связи между полями, диапазоны, уникальность, бизнес-логика — напр. дата окончания > даты начала>».

Требования:
1. Соблюдай типы, ограничения и связи из схемы (внешние ключи, уникальные поля, форматы email/телефон/дат).
2. Данные должны быть ПРАВДОПОДОБНЫМИ и разнообразными (разные имена, города, значения), а не «test1/test2».
3. Включи КРАЕВЫЕ случаи: пустые/максимальной длины строки, граничные числа (0, минимум, максимум), даты на границах, спецсимволы и юникод, NULL там, где поле необязательно.
4. Добавь несколько НАМЕРЕННО «грязных»/невалидных записей ОТДЕЛЬНЫМ блоком (для негативных тестов) — и подпиши, чем каждая плоха.
5. Если в схеме есть связи (например заказы ссылаются на пользователей) — сохрани целостность ссылок.

Выдай: 1) валидные данные в указанном формате; 2) отдельно блок «невалидные/краевые для негативных тестов» с пометкой проблемы у каждой; 3) одну строку — как этим воспользоваться (импорт/сид).

Пример заполнения промпта:

Схема: users(id, email UNIQUE, name, age INT, city, created_at) и orders(id, user_id FK, amount NUMERIC, status, created_at). Формат: SQL INSERT. Записей: 10 пользователей и 20 заказов. Локаль: русские имена/города. Правило: amount > 0, status из ('new','paid','cancelled').

Ожидаемый ответ AI: INSERT-ы с правдоподобными данными (разные ФИО, города — Москва, Казань, Новосибирск; валидные email; возраст в разумном диапазоне), заказы ссылаются на существующие user_id, status только из списка, amount положительный, даты заказов ≥ дат регистрации; отдельный блок «невалидные для негатив-тестов» — запись с age=−1, пустым name, дублирующимся email, amount=0, статусом не из списка, каждая подписана «чем плоха»; в конце — «импортируй: psql -f <имя_файла.sql>».

Приёмы, о которых не пишут

  1. Сегментирование генерации: Если у вас сложная схема с множеством связанных таблиц, генерируйте данные по частям. Сначала пользователей, затем заказы, ссылаясь на сгенерированные ID пользователей. Это помогает AI лучше справляться со связями и уникальностью. Инструменты вроде mimicry-js позволяют создавать билдеры для объектов и генерировать уникальные ID с помощью sequence или unique функций [npmjs.com/package/mimicry-js].
  2. Использование сценариев: Для тестов часто нужны не просто случайные данные, а данные, соответствующие определенным сценариям. Например, happy-path, empty-state, boundary-min, boundary-max, invalid. Некоторые библиотеки, как fixture-gen, поддерживают такую концепцию, позволяя генерировать данные под конкретные тестовые сценарии [github.com/arjvand/fixture-gen].
  3. Пост-обработка: Иногда AI может допустить мелкие неточности. Используйте jq для форматирования или легкой корректировки JSON-данных после генерации [grishaev.me/json-sql]. Для SQL-данных можно написать небольшой скрипт, который проверит целостность или уникальность. Помните, что AI-сгенерированные данные всегда нужно проверять, так как они могут упускать граничные случаи [nodemaven.com/ru/blog/how-to-use-chatgpt-to-automate-vibe-coding/].

Связка с движком qvib.pro

Движки qvib.pro предоставляют готовые правила, роли и скиллы, которые уже включают в себя этот промпт и множество других для вайб-кодинга. Это позволяет вам не собирать всё вручную, а сразу получить настроенный инструмент для генерации данных, ускоряя процесс разработки и тестирования.

Полная карточка в арсенале: https://qvib.pro/arsenal/prompts/test-data-gen/

Ещё по теме «Инструменты»

Разобраться глубже