1 апреля 2016

Как генерировать случайные данные с помощью Faker?

Периодически возникают ситуации, когда нужно смоделировать данные различных форматов, чтобы протестировать работу приложения. Есть несколько возможностей решить задачу, и сегодня мы рассмотрим одну из них.
Как генерировать случайные данные с помощью Faker?

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

What is Faker?

Faker — это библиотека, которая позволяет генерировать случайные данные. С ее помощью можно заполнить таблицы в базе данных, построить корректные XML-документы, сформировать JSON-ответы для REST.

Особенности

  • Наличие множества групп форматированных данных;
  • Есть поддержка возврата локализованных данных, отличных от en_US;
  • Можно работать с готовыми наборами данных, так называемые « хэлперы»;
  • Есть возможность создавать собственных « поставщиков»;
  • Можно загружать faker.js из  CDN;
  • Присутствует обертка для работы с  CLI;
  • Для ленивых есть  сервис с рабочим функционалом.

Установка Faker

Установить Faker можно через менеджер зависимостей Composer:

composer require fzaninotto/faker

Установка с помощью npm:

npm install Faker

Работа с faker.js в браузере

Первым делом мы подключаем библиотеку с  нужной локализацией (опционно):

<script src="https://cdnjs.cloudflare.com/ajax/libs/Faker/3.1.0/faker.js"></script>

После этого можно создать объект пользователя с данными:

<script> var user = { login: faker.internet.email(), name: faker.name.firstName(), surname: faker.name.lastName(), country: faker.address.country(), avatar: faker.image.avatar(), }
</script>

Список доступных методов: https://github.com/marak/Faker.js/#api-methods

В результате объект «user» будет содержать тестовые данные:

{
  "login": "Stacey_Turner79@yahoo.com",
  "name": "Ruthe",
  "surname": "Dickens",
  "country": "Azerbaijan",
  "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/BrianPurkiss/128.jpg"
}

Установив локаль «ru» перед вызовом методов, можно получить результат в кириллице:

faker.locale = 'ru';
{  
   "login":"88@yahoo.com",
   "name":"Евгения",
   "surname":"Пахомова",
   "country":"Ливия",
   "avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/xadhix/128.jpg"
}

Значения некоторых параметров на русском языке.

Работа с хэлперами

Хэлперы (helpers) — это уже готовые объединенные наборы данных. Есть поддержка следующих наборов:

  • createCard
  • contextualCard
  • userCard
  • createTransaction

Пример вызова хэлпера транзакции:

<script> console.log(faker.helpers.createTransaction());
</script>
{
  "amount": "636.00",
  "date": "2012-02-01T21:00:00.000Z",
  "business": "Hilll - Gorczany",
  "name": "Auto Loan Account 4936",
  "type": "withdrawal",
  "account": "03557889"
}

Генерация данных в Node.js

Подключение библиотеки для работы в Node.js:

var faker = require('Faker');

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

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

console.log(faker.Name);

Вывод методов для группы «name».

В результате мы получим следующие методы:

{ firstName: [Function],
  firstNameFemale: [Function],
  firstNameMale: [Function],
  lastName: [Function],
  findName: [Function] }

Также при работе стоит обратить внимание на регистр групп:

console.log("Hello " + faker.Name.findName());

Faker и PHP

Рассмотрим простой пример использования PHP-библиотеки:

<?php
require_once '../vendor/autoload.php';

$faker = Faker\Factory::create();
echo "Hi {$faker->name()}!";

Список доступных методов: https://github.com/fzaninotto/Faker#formatters

Мы получим подобный результат:

Hi Kyle Smith!

Чтобы получить данные для другой локали, достаточно передать локаль в метод «create»:

$faker = Faker\Factory::create('ru_RU');

Поставщики контента (Provider)

Базовый класс «\Faker\Factory» содержит ограниченный набор данных, который можно расширять другими «поставщиками».

Для этого нужно собрать генератор данных, указав нужных поставщиков:

<?php
require_once '../vendor/autoload.php';

$faker = new Faker\Generator();
$faker->addProvider(new Faker\Provider\ru_RU\Person($faker));
$faker->addProvider(new Faker\Provider\ru_RU\Address($faker));
$faker->addProvider(new Faker\Provider\ru_RU\Company($faker));

$user = new stdClass;
$user->name = $faker->name;
$user->address = $faker->address;
$user->company = $faker->company;

ru_RU — название русской локали.

В данном примере мы подключаем контент из групп «Person», «Address», «Company» и создаем объект «user» со случайными данными. В результате объект «user» будет содержать случайные данные:

stdClass Object
(
    [name] => Розалина Фёдоровна Захарова
    [address] => 257268, Ярославская область, город Москва, наб. Космонавтов, 65
    [company] => ОАО СантехХоз
)

Заключение

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

Динар Мухаметшин, веб-разработчик
Автор: Динар Мухаметшин, ведущий разработчик веб-студии «Первый БИТ»

Обратитесь к нам сегодня!
Мы подберём решение специально для вашего бизнеса

Отзывы клиентов

«Проект был полезен и важен для управления заказами и продажами, а также контроля запасов. Кроме того, мы можем анализировать продажи по всей России».
Albert Liu
заместитель генерального директора компании TP-LINK
«Экспертами компании Первый БИТ настроен автоматический обмен данными с системой "1С:Зарплата и управление персоналом 8 ПРОФ", в которой ведется полнофункциональный учет персонала всей Корпорации – управленческий и регламентированный».
ООО "ТехноНИКОЛЬ"
Строительные системы
«Благодаря правильным отчётам можно видеть реальную картину движения денежных средств на предприятиях группы, что позволяет оптимизировать финансовые потоки. Наши ожидания полностью сбылись, выражаем огромную благодарность проектной команде компании Первый БИТ и надеемся на дальнейшее сотрудничество».
О. Карпов
руководитель отдела бюджетирования ОАО "Оборонстрой"