Databene Benerator — автоматическая генерация тестовых данных

Databene Benerator — подключение, настройка библиотеки и плагина maven-benerator-plugin. Генерация большого количества различных данных с использованием шаблонов, подзапросов, констант и т.д.

Используемые технологии и библиотеки
  • Databene Benerator 0.9.8
  • maven-benerator-plugin 0.7.7
  • Oracle 11g XE

1. Описание задачи

Рассмотреть использование библиотеки Databene Benerator для генерации больших объемов тестовых данных. Подключить maven плагин для удобного запуска генерации. Рассмотреть различные настройки создания таблиц и данных, таких как применение паттернов regex, подзапросов, использование шаблонизаторов и многих других.

2. Структура проекта

Для генерации данных нам необходим только каталог resource\benerator. В нем находятся скрипты создания таблиц и настройки подключения к бд (benerator/oracle). Различные настройки и варианты генерации данных. Пакет db.migration используется для плагина flyway, а так же в нем находится скрипт создания схемы для БД Oracle. Большая часть настроек pom.xml описана в отдельной статье (Flyway — подключение, настройка библиотеки и плагина flyway-maven-plugin).

3. pom.xml

Как было указано чуть выше, большая часть настроек описана в статье по подключению flyway. Под катом приведу общий файл настроек maven, а затем отдельно необходимые настройки только для библиотеки benerator.

pom.xml:

Теперь отдельно необходимые для работы с плагином и библиотекой databene настройки.

Тут всё достаточно очевидно из названий. Настройки указанные в ${ } описаны в отдельной статье, указанной в начале. Обратить внимание стоит на <descriptor> — это именно то, что мы будем выполнять при генерации данных. Вторая неочевидная настройка — зависимость для драйвера Oracle. По умолчанию библиотека не сообразит каким образом подключиться к базе данных Oracle и ей нужно в явном виде указать драйвер.

Еще одной добавленной зависимостью относительно проекта с flyway является сама библиотека databene-benerator.

Если поковыряться внутри, то можно найти, например, классы шаблонизаторы. С их помощью могут создаваться данные вроде адреса электронной почты, даты, ФИО людей и т.п..

4. Обзор демонстрационного проекта

В этой статье используется встроенный demo от авторов библиотеки, который эмулирует БД для обычного магазина. Здесь рассматривается немного урезанная версия, чтобы не путать читателя кучей настроек. Если кому-то будет интересно как подключаться к другим БД или разобраться более углублено в примере, то демка находится в databene-benerator-0.9.8.jar/demo/shop/ (там же другие примеры).

5. Настройки для генерации данных

Понять как настраивать, что и как будет создаваться при использовании бенератор — самая сложная задача. Но разобравшись один раз всё станет достаточно очевидно и просто, и вы сможете использовать эти знания в различных проектах.

Сразу приведу пример главного исполняемого файла, который указан в параметре <descriptor> в pom.xml.

shop.ben.xml:

Настройки

Тут достаточно много настроек и часть из них ссылаются еще и на дополнительные файлы. Рассмотрим всё по порядку.

Это служебный импорт пакетов и указания типа платформы (есть другие типы, подробнее на оф. сайте). Например с помощью первой записи мы можем обратиться к такому классу: org.databene.domain.person.Person. Он в свою очередь содержит шаблоны для генерации имени, дня рождения, электронной почты и многой другой информации о «Личности».

Далее:

Следующая группа определяет настройки. Вначале идет инициализации переменных ключ-значение, которые будут использованы в различных местах конфигурации. В нашем случае запись <include uri= «{ftl:${database}/shop.${database}.properties}» /> превратится в <include uri= «{ftl:oracle/shop.oracle.properties}» />. Эта та самая папка, которую вы могли заметить в описании проекта — resources/benerator/oracle/shop.oracle.properties.

Здесь задаются переменные для указания количества создаваемых записей, а так же путь к БД. Обратите внимание, что переменные не взяты с потолка, а указываются в файле с настройками shop.development.properties (development тоже параметр и указывался выше):

Настройки бд и выполняемых на старте скриптов:

Переменные указывались выше в настройках. Обратить внимание стоит на теги execute. В них выполнится сначала скрипт дропа таблиц, а потом их создания. Как и ранее, при выполнении переменные ${ } превратятся в обычный текст, например oracle/drop_tables.oracle.sql.

Начало генерации данных

Сначала указывается бин для инкремента, а далее подключается сторонний xml файл. Кто знаком с синтаксисом создания таблиц и данных от библиотеки DbUnit, тот сразу поймет что там внутри. Данные генерируются на основе простеньких xml записей, например:

Очевидно, что здесь будет создана таблица DB_USERS с колонками ID, NAME и т.д. Далее в них будет выполнен insert указанных полей.

Аналогичная демонстрация использования формата csv.

products.import.csv:

Вот мы и подошли к магии от benerator.

Здесь создается таблица DB_PRODUCT. В id с помощью встроенного класса EANGenerator будут создаваться записи в определенном формате. Следующей строчкой идет тег <reference>. С помощью него мы ссылаемся на другую таблицу (DB_CATEGORY) и тянем оттуда в случайном порядке записи. Магия сопоставления происходит с помощью foreign key, который создается при выполнении скрипта create_tables.sql. Атрибут price особого описания не требует.

XML Теги benerator

Далее код генерации тестовых данных в целом повторяется. Рассмотрим отдельно интересные теги.

person — тот самый пакет, который был указан при импорте; generator — класс, dataset=, locale= — поля класса. Чтобы было понятнее приведу часть класса:

Генерит с помощью класса выше имя и фамилию + происходит конкатенация строк.

Шаблон (класс) для электронной почты.

Обычный шаблон с использованием регулярных выражений.

Либо 0, либо 1.

Вот тут создается другая таблица DB_CUSTOMER, но на основании id из родительской таблицы.

Создается таблица DB_ORDER с количеством записей на основе переменных, указанных в начале настроек.

Пример подзапроса к базе данных DB_PRODUCT с выборкой по двум полям и определенным типом их записи (comulated).

Еще один пример с использованием выборки и обновлению данных (суммирование) для каждого заказа:

 

6. Запуск генерации тестовых данных

Чтобы запустить плагин для генерации данных нужно просто выполнить команду benerator:generate.

В консоль будут выведены результаты работы плагина.

Чтобы увидеть более подробную информацию нужно добавить к команде -X. Для этого нужно нажать правой кнопкой на команду и выбрать create ‘ …’. Далее прописать в поле benerator:generate -X.

Получим подробный вывод в консоль:

Проверим что получилось по окончанию генерации.

Другая таблица:

В данном примере было создано семь таблиц и записано несколько тысяч полей примерно за 10 секунд. Таким образом мы научились генерировать большие объемы тестовых данных и запись их в базу данных Oracle. Меняя различные настройки можно добиться совершенно разных данных практически под любую задачу.

 

Исходные коды

benerator-start

 

Share Button
14
636 Total Views 3 Views Today
1 комментарий для “Databene Benerator — автоматическая генерация тестовых данных
  1. Stas:

    Урааа!!! Ты вернулся. Даешь материал по многопоточности=)

Добавить комментарий