Генерация фейковых данных при помощи Elizabeth

автор

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

  • Добыча необходимой информации
  • Публикация данных
  • Создание самого генератора данных

Становится очень тяжко, когда вам нужно сгенерировать не 10-15 пользователей, а 100-150 тысяч юзеров (или других типов данных). В данной статье мы рассмотрим инструмент, который невероятно упрощает генерацию фейковых данных, первоначальное наполнение базы данных и её тестирование в целом.

Elizabeth – это библиотека Python, которая помогает генерировать макетные данные для различных целей. Эта библиотека была написана с использованием инструментов из стандартной библиотеки Python, и, следовательно, в ней нет никаких сторонних зависимостей. На данный момент, библиотека поддерживает 30 языков и 19 классовых провайдеров, а также различные виды данных.

Установка

Нормальный способ установки Elizabeth – через pip:

Если по какой-то причине вы не можете установить пакет при помощи pip, вы можете попробовать установить его вручную, вот так:

Обратите внимание на то, что данная библиотека запускается только на Python 3.4+. Разработчики не планируют добавлять поддержку Python 2.7

Генерация данных

Сначала я думал показать, как это делается на примере небольшого веб-приложения под названием Flask, но решил этого не делать, так как не каждый знаком с Flask, и не у каждого может возникнуть объективное желание изменить в нем что-либо. Следовательно, мы будем работать непосредственно в Python. В случае, если вам нужно перенести весь свой проект на Flask или Django, вам просто нужно определить статический метод, который запустит все манипуляции, связанные с предоставленной моделью, и вызвать его когда вам будет нужна начальная загрузка базы данных, как показано в примере ниже:
Модель под Flask будет выглядеть вот так:

Теперь перейдем в shell-mode:

И сгенерируем данные. Нам нужно заранее убедиться в том, что база database и model являются доступными.

Введение

Стоит отметить, что мы рассмотрим основные возможности библиотеки и используем несколько наиболее распространенных классовых провайдеров, так как на самом деле их слишком много, чтобы рассматривать все по отдельности. Если по прочтению данной статьи у вас возникнет яркий интерес к данной библиотеке, вы можете найти великое множество информации о ней в интернете. Эта библиотека очень простая. Все что вам нужно для начала работы с данными – это создать классовый провайдер. Самый распространенный тип данных в приложениях – это персональные данные пользователя, такие как имя, фамилия, информация о кредитных картах, и т.д. Существует специальный классовый провайдер для таких данных, под названием Personal(), который использует код из стандартного языка в виде строки, как показано ниже:

Результат:

Практически каждое веб-приложение запрашивает адрес электронной почты для регистрации. Естественно, что библиотека поддерживает возможность генерации электронных адресов при помощи метода email() класса Personal(), как показано ниже:

Однако есть небольшая проблема с указанным выше методом, которая может сделать код слегка «грязным» в случае, если приложение использует более одного классового провайдера. В данном случае вам нужно использовать объект Generic(), который предоставляет доступ ко всем провайдерам из одного объекта:

Объединенные данные – это обширное поле для экспериментов. Например, вы можете создать фейковых владельцев кредитных карт Visa (Maestro, MasterCard):

Результат:

Как было упомянуто выше, библиотека поддерживает более 19 классовых провайдеров с данными для всех возможных ситуаций (если нет, то ваш PR с исправлением такой ужасной несправедливости окажется более чем полезным). Например, если вы работаете с приложением, ориентированным на транспортировку и логистику и вам нужно создать модели транспортировок, вы можете легко выполнить эту задачу при помощи провайдера Transport(), который содержит необходимые данные, связанные с транспортировкой:

Результат:

Также вы можете указать модель транспортной маски:

Результат:

При тестировании веб приложений (блог – хороший тому пример), довольно часто вам нужно будет генерировать текстовые данные (текст, предложения, теги, и т.д.). Делать это вручную довольно скучно, к счастью Elizabeth дает возможность вам избежать этого, благодаря классу Text():

Результат:

Вы можете получить список случайных слов:

Результат:

Генерировать названия улиц:

Результат:

Получить название штата\района\провинции, связанной с выбранным языком, в данном случае, это один из штатов США:

Наша библиотека также поддерживает кириллицу (на данный момент поддерживаются только Украинский и Русский языки):

Подведем итоги

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

Документация: http://elizabeth.readthedocs.io/en/latest/

Вам может быть интересно