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] => ОАО СантехХоз
)

Заключение

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

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

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

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

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