Faker – генератор случайных данных

Faker – генератор случайных данных

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

скачать исходники

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

Официальную страничку библиотеки, вместе с краткой, но довольно информативной документацией, можно найти на сервисе GitHub по ссылке. Для установки библиотеки на Ваш проект, достаточно выполнить одну простую команду в консоли, используя инструмент Composer:

composer require fzaninotto/faker

При этом в директории проекта, будет создан каталог vendor, внутри которого Вы найдете рассматриваемую нами библиотеку. При этом хотел бы отметить, что по адресу vendor\fzaninotto\faker\src\Faker Вы найдете файл Generator.php, в котором определен одноименный класс Generator, свойства которого как раз предоставляют доступ к сгенерированным данным. Собственно в комментариях перед определением класса – приведен краткий справочник по хранимым данным в каждом свойстве (это на тот случай, если у Вас не будет доступа к страничке библиотеки на сервисе GitHub).

Теперь приступаем к работе с самой библиотекой. Собственно первым делом подключаем файл autoload.php, который был сгенерирован инструментом composer:

<?php
require "vendor/autoload.php";

Далее создаем объект класса Faker, используя метод create(). При этом в качестве первого аргумента можно передать код, интересующей Вас локализации (в комплекте библиотеки, поставляется множество различных локализаций).

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

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

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

echo $faker->name.'<br>';
echo $faker->address.'<br>';

Соответственно результат будет следующим:

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

for($i = 0; $i < 10; ++$i) { echo $faker->randomNumber.'<br>';
}

При этом на экране мы увидим следующее:

При добавлении модификатора unique(), Вы сможете создать уникальные не повторяющиеся данные.

for($i = 0; $i < 10; ++$i) { echo $faker->unique()->randomNumber.'<br>';
}

Есть также модификатор позволяющий, разрешить пропуск генерации данных, его имя optional():

for($i = 0; $i < 10; ++$i) { echo $faker-> optional()->randomNumber.'<br>';
}

Помимо этого создаваемые данные можно провалидировать, в соответствии с логикой, описанной в пользовательской функции. К примеру сгенерируем числа, которые больше 5:

$func = function($digit) { return $digit > 5;
};
for($i = 0; $i < 10; ++$i) { echo $faker->valid($func)->randomDigit.'<br>';
}

На экране мы увидим следующее:

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

for ($i=0;$i<10;$i++) { $cc[$i] = $faker->creditCardDetails; $cc[$i]['security']=$faker->numberBetween(199,499); }
echo "<pre>"; print_r ($cc); echo "</pre>";

На экране мы при этом увидим следующий результат:

Также можно создать информацию для формирования данных о пользователе:

echo $faker->name.'<br>';
echo $faker->firstNameMale.'<br>';
echo $faker->address.'<br>';
echo $faker->city.'<br>';
echo $faker->country.'<br>';
echo $faker->email.'<br>';
echo $faker->password.'<br>';

Ну и то же самое для русской локализации:

$faker = Faker\Factory::create(ru_RU);
echo $faker->name.'<br>';
echo $faker->firstNameMale.'<br>';
echo $faker->address.'<br>';
echo $faker->city.'<br>';
echo $faker->country.'<br>';
echo $faker->email.'<br>';
echo $faker->password.'<br>'; 

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

Как Вы видите инструмент достаточно полезный и буквально за несколько минут можно получить любой набор тестовых данных и передать их либо на отображение в браузер, либо на сохранение в базу данных, файл или же необходимый документ.

На этом статья завершена. Всего Вам доброго и удачного кодирования!