Faker — это библиотека с открытым исходным кодом, созданная Франсуа Занинотто, которая генерирует данные искусственного наполнителя для вашего приложения и его потребностей в тестировании.
Faker можно использовать в ванильном PHP-приложении, фреймворке, таком как Yii или Laravel, или в библиотеке тестирования, на которую мы ссылались в Codeception в этом более раннем руководстве Envato Tuts +.
В сегодняшнем уроке я расскажу об основной установке и использовании Faker и его возможностях. Как говорит Занинотто:
«Если вам нужно загрузить свою базу данных, создать привлекательные XML-документы, заполнить вашу настойчивость к стресс-тестированию или анонимизировать данные, полученные из производственного сервиса, Faker для вас».
И, в целом, он предоставляет широкий спектр простых возможностей, полезных для любого режима тестирования.
Небольшое напоминание, прежде чем мы начнем, я участвую в комментариях ниже. Мне особенно интересно, если у вас есть дополнительные мысли или вы хотите предложить темы для будущих уроков. Если у вас есть вопрос или предложение по теме, пожалуйста, напишите ниже. Вы также можете связаться со мной через Twitter @reifman напрямую.
Начиная
Установка Факера
Я начал с создания нового дерева кода и добавления fzaninotto/faker
в composer.json ниже:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
{
«name»: «Faker Demonstration»,
«description»: «for Envato Tuts+»,
«keywords»: [«faker»,»php»,»jeff reifman»],
«homepage»: «http://www.lookahead.io/»,
«type»: «project»,
«license»: «BSD-3-Clause»,
«minimum-stability»: «stable»,
«require»: {
«php»: «>=5.6.0»,
«fzaninotto/faker» : «*»
}
}
|
Затем я обновил композитор:
1
2
3
4
5
6
7
8
|
$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
— Installing fzaninotto/faker (v1.6.0)
Loading from cache
Writing lock file
Generating autoload files
|
Фейкер устанавливается в каталог производителя. Итак, я загрузил в начало файла index.php:
1
2
3
|
<?php
// require the Faker autoloader
require __DIR__ .
|
Далее я хотел бы попробовать несколько простых примеров сценариев генерации данных.
Простые примеры
Я расширил примеры Faker следующим образом и запустил их с http: // localhost: 8888 / faker :
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<?php
// require the Faker autoloader
require __DIR__ .
// use the factory to create a Faker\Generator instance
$faker = Faker\Factory::create();
// generate data by accessing properties
echo $faker->name;
// ‘Lucy Cechtelar’;
spacer();
echo $faker->address;
// «426 Jordy Lodge
// Cartwrightshire, SC 88120-6700″
spacer();
echo $faker->text;
// Dolores sit sint laboriosam dolorem culpa et autem.
// et sit et mollitia sed.
// Fuga deserunt tempora facere magni omnis.
// sit minima sint.
spacer();
function spacer() {
echo ‘<br />’;
}
?>
|
При быстром обновлении мне были представлены различные результаты, такие как:
1
2
3
|
Ruthie Beier
37851 Gusikowski Flat Suite 594 Port Keithmouth, NM 06110
Reprehenderit eos suscipit sit modi architecto necessitatibus.
|
И:
1
2
3
|
Darron Hessel
657 Elijah Lock Suite 202 Nitzschemouth, AZ 11166
Culpa dolorum quidem distinctio eius necessitatibus.
|
И:
1
2
3
|
Fredy Fadel MD
53328 Eldora Isle Apt.
Eligendi eos laudantium eveniet ad.
|
Факер выполняет свое обещание.
Поставщики Faker по умолчанию
Все методы генерации данных в Faker созданы из реализации провайдеров. Вот код, который регистрирует провайдеров Faker по умолчанию — это сделано для вас:
1
2
3
4
5
6
7
8
|
<?php
$faker = new Faker\Generator();
$faker->addProvider(new Faker\Provider\en_US\Person($faker));
$faker->addProvider(new Faker\Provider\en_US\Address($faker));
$faker->addProvider(new Faker\Provider\en_US\PhoneNumber($faker));
$faker->addProvider(new Faker\Provider\en_US\Company($faker));
$faker->addProvider(new Faker\Provider\Lorem($faker));
$faker->addProvider(new Faker\Provider\Internet($faker));
|
Итак, выше, когда я запрашивал address
у Faker, он искал во всех провайдерах подходящие методы, в конечном итоге используя провайдера Address()
.
Вы также можете написать своих собственных провайдеров или просмотреть ряд расширений для Faker , которые доступны в Интернете.
Модификаторы
Faker также предлагает специальные модификаторы, чтобы помочь вашему тестированию, такие как unique (), option () или valid () . Например, вы можете генерировать уникальные номера:
1
2
3
4
5
6
7
|
// unique() forces providers to return unique values
$values = array();
for ($i=0; $i < 10; $i++) {
// get a random digit, but always a new one, to avoid duplicates
$values []= $faker->unique()->randomDigit;
}
print_r($values);
|
Вот вывод уникальных значений:
1
|
Array ( [0] => 7 [1] => 6 [2] => 0 [3] => 2 [4] => 5 [5] => 1 [6] => 8 [7] => 4 [8] => 9 [9] => 3 )
|
Если вы используете optional()
метод optional()
, некоторые числа будут возвращены как NULL
как если бы пользователь не вводил поле в вашей форме. Примечание: я не мог заставить этот метод работать должным образом.
С помощью valid()
вы можете зарегистрировать функции, которые определяют, соответствуют ли данные-заполнители определенным требованиям, будут ли они возвращать ошибку или генерировать сообщение об ошибке в форме пользователя.
Изучение поставщиков
Faker предлагает широкий набор методов для генерации случайных данных для вашего приложения:
- База: простые методы для случайных букв, чисел, обработанных строк и регулярных выражений
- Lorem Ipsum Text: случайный латинский текст
- Персона: имена людей
- Адрес: почтовые адреса
- Номер телефона: номера телефонов
- Компания: названия компаний
- Настоящий текст: фактический текст, написанный людьми против бессмысленных латинских строк
- Дата и время: случайные даты и время
- Интернет: электронная почта, домены и т. Д.
- Пользовательский агент: строки браузера
- Оплата: кредитная карта и строки и номера SWIFT
- Цвет: случайные цвета
- Файл: расширения файлов, типы файлов и имена файлов
- Изображение: URL-адреса изображений-наполнителей разных видов
- Uuid: уникальные идентификаторы
- Штрих-код: различные типы штрих-кодов, например, ISBN13
- Разное: коды шифрования, коды стран и т. Д.
- Смещение: случайные числа со смещением
Давайте поэкспериментируем с еще несколькими из этих методов.
Платежная информация
Код ниже генерирует десять человек, их данные кредитной карты и коды безопасности:
1
2
3
4
5
6
|
$faker = Faker\Factory::create();
for ($i=0;$i<10;$i++) {
$cc = $faker->creditCardDetails;
$cc[‘security’]=$faker->numberBetween(199,499);
var_dump ($cc);spacer(2);
}
|
Вот некоторые выводы из приведенного выше кода:
Картинки
Вот простой пример генерации изображения:
1
2
3
4
|
$faker = Faker\Factory::create();
$width=320;
$height=240;
echo ‘<img src=»‘.$faker->imageUrl($width, $height).’»/>’;
|
Но вы также можете создавать кошек:
1
|
echo ‘<img src=»‘.$faker->imageUrl($width, $height, ‘cats’, true, ‘Faker’, true) .’»/>’;
|
Это может быть способность поколения кошки, которая покорила меня. Я не могу дождаться, когда трехмерная печать и активация души будут работать с такими вещами.
Интернационализированные данные
С помощью приведенного ниже кода я создал таблицу с четырьмя столбцами имен из Франции, России, Америки и Китая:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
echo ‘<table>
<thead>
<th>French</th>
<th>Russian</th>
<th>English</th>
<th>Chinese</th>
</thead>
<tr><td>’;
$faker = Faker\Factory::create(‘fr_FR’);
for ($i=0; $i < 10; $i++) {
echo $faker->name;
spacer();
}
spacer(2);
echo ‘</td><td>’;
$faker = Faker\Factory::create(‘Ru_RU’);
for ($i=0; $i < 10; $i++) {
echo $faker->name;
spacer();
}
spacer(2);
echo ‘</td><td>’;
$faker = Faker\Factory::create(‘En_US’);
for ($i=0; $i < 10; $i++) {
echo $faker->name;
spacer();
}
spacer(2);
echo ‘</td><td>’;
$faker = Faker\Factory::create(‘zh_CN’);
for ($i=0; $i < 10; $i++) {
echo $faker->name;
spacer();
}
echo ‘</td></tr></table>’;
|
Вот вывод:
Создание поддельных адресов электронной почты
Вот пример кода для создания 25 поддельных адресов электронной почты от бесплатных провайдеров, таких как Gmail и Yahoo:
1
2
3
4
5
6
7
|
$values = array();
for ($i=0; $i < 25; $i++) {
// get a random digit, but also null sometimes
$values []= $faker->freeEmail();
}
print_r($values);
exit;
|
Вот результирующий вывод:
Генерация XML-документов
Faker предлагает полезный пример генерации XML; однако для этого требуется, чтобы вы работали с фреймворком и имели архитектуру представления:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
<?php
require_once ‘/path/to/Faker/src/autoload.php’;
$faker = Faker\Factory::create();
?>
<?xml version=»1.0″ encoding=»UTF-8″?>
<contacts>
<?php for ($i=0; $i < 10; $i++): ?>
<contact firstName=»<?php echo $faker->firstName ?>» lastName=»<?php echo $faker->lastName ?>» email=»<?php echo $faker->email ?>»/>
<phone number=»<?php echo $faker->phoneNumber ?>»/>
<?php if ($faker->boolean(25)): ?>
<birth date=»<?php echo $faker->dateTimeThisCentury->format(‘Ym-d’) ?>» place=»<?php echo $faker->city ?>»/>
<?php endif;
<address>
<street><?php echo $faker->streetAddress ?></street>
<city><?php echo $faker->city ?></city>
<postcode><?php echo $faker->postcode ?></postcode>
<state><?php echo $faker->state ?></state>
</address>
<company name=»<?php echo $faker->company ?>» catchPhrase=»<?php echo $faker->catchPhrase ?>»>
<?php if ($faker->boolean(33)): ?>
<offer><?php echo $faker->bs ?></offer>
<?php endif;
<?php if ($faker->boolean(33)): ?>
<director name=»<?php echo $faker->name ?>» />
<?php endif;
</company>
<?php if ($faker->boolean(15)): ?>
<details>
<![CDATA[
<?php echo $faker->text(400) ?>
]]>
</details>
<?php endif;
</contact>
<?php endfor;
</contacts>
|
В заключение
Я надеюсь, что это послужило для вас базовым введением в Faker, невероятно полезную бесплатную библиотеку PHP с открытым исходным кодом.
Если вы хотите читать дальше, я рекомендую Jim Nielsen’s Filler Content: Tools, Tips и Dynamic Example (Envato Tuts +) , который дает разработчику приложения возможность генерировать данные. Он предполагает, что вы можете быть более эффективными, когда применяете поддельные данные, чтобы создать более реалистичный опыт в процессе проектирования.
Если вы хотите узнать, когда появится мой следующий учебник Envato Tuts +, следуйте за мной @reifman в Twitter или зайдите на страницу моего инструктора . В настоящее время я работаю над двумя сериями, которые вы можете оценить:
- Программирование с помощью серии Yii2
- Создание вашего стартапа с PHP о Meeting Planner ; иди запланируй свою первую встречу там сегодня.