Использование Faker для генерации данных для автоматического тестирования
Russian (Pусский) translation by Sergey Zhuk (you can also view the original English article)



Faker - это библиотека с открытым исходным кодом, созданная Франсуа Занинотто, которая генерирует данные искусственного наполнителя для вашего приложения и его потребностей в тестировании.
Faker можно использовать как в простом PHP-приложении, так и в фреймворке, таком как Yii или Laravel, или в тестовом фреймворке, как например Codeception, который мы ранее уже расстраивали в уроке Envato Tuts +
В сегодняшнем уроке я рассмотрю базовую установку и использование Faker и его возможностей. Как говорит Занинотто:
«Нужно ли вам загружать вашу базу данных, создавать красивые XML-документы, заполнять ваши персистентные данные для стресс-теста или анонимизировать данные, взятые из производственной службы, Faker для вас».
И, в целом, он предоставляет широкий спектр простых возможностей, полезных для любого режима тестирования.
Немного напоминаем, прежде чем мы приступим к работе, я участвую в обсуждениях, приведенных ниже. Мне особенно интересно, если у вас есть дополнительные мысли или вы хотите предложить темы для будущих уроков. Если у вас есть вопрос или предложение, отправьте сообщение ниже. Вы также можете связаться со мной прямо на Twitter @reifman.
Приступая к работе
Установка Faker
Я начал с создания нового дерева кода и добавил fzaninotto/faker к composer.json:
1 |
{
|
2 |
"name": "Faker Demonstration", |
3 |
"description": "for Envato Tuts+", |
4 |
"keywords": ["faker","php","jeff reifman"], |
5 |
"homepage": "https://www.lookahead.io/", |
6 |
"type": "project", |
7 |
"license": "BSD-3-Clause", |
8 |
"minimum-stability": "stable", |
9 |
"require": { |
10 |
"php": ">=5.6.0", |
11 |
"fzaninotto/faker" : "*" |
12 |
}
|
13 |
}
|
Затем я обновил composer:
1 |
$ composer update
|
2 |
Loading composer repositories with package information |
3 |
Updating dependencies (including require-dev) |
4 |
- Installing fzaninotto/faker (v1.6.0) |
5 |
Loading from cache |
6 |
|
7 |
Writing lock file |
8 |
Generating autoload files |
Faker устанавливается в каталог vendor. Итак, я загрузил в начало файла index.php:
1 |
<?php
|
2 |
// require the Faker autoloader
|
3 |
require __DIR__ . '/vendor/autoload.php'; |
Далее я хотел бы попробовать несколько простых примеров сценариев генерации данных.
Простые примеры
Я привел примеры Faker и выполнил их из http://localhost:8888/faker:
1 |
<?php
|
2 |
// require the Faker autoloader
|
3 |
require __DIR__ . '/vendor/autoload.php'; |
4 |
|
5 |
// use the factory to create a Faker\Generator instance
|
6 |
$faker = Faker\Factory::create(); |
7 |
|
8 |
// generate data by accessing properties
|
9 |
echo $faker->name; |
10 |
// 'Lucy Cechtelar';
|
11 |
spacer(); |
12 |
echo $faker->address; |
13 |
// "426 Jordy Lodge
|
14 |
// Cartwrightshire, SC 88120-6700"
|
15 |
spacer(); |
16 |
echo $faker->text; |
17 |
// Dolores sit sint laboriosam dolorem culpa et autem. Beatae nam sunt fugit
|
18 |
// et sit et mollitia sed.
|
19 |
// Fuga deserunt tempora facere magni omnis. Omnis quia temporibus laudantium
|
20 |
// sit minima sint.
|
21 |
spacer(); |
22 |
|
23 |
function spacer() { |
24 |
echo '<br />'; |
25 |
}
|
26 |
?>
|
С быстрыми обновлениями мне были представлены различные результаты, такие как:
1 |
Ruthie Beier |
2 |
37851 Gusikowski Flat Suite 594 Port Keithmouth, NM 06110 |
3 |
Reprehenderit eos suscipit sit modi architecto necessitatibus. Error maiores qui vero non omnis. Quaerat mollitia dolore deserunt quia quidem beatae. |
И:
1 |
Darron Hessel |
2 |
657 Elijah Lock Suite 202 Nitzschemouth, AZ 11166 |
3 |
Culpa dolorum quidem distinctio eius necessitatibus. Mollitia ut nostrum et ut quas veniam et. Unde iure molestiae aperiam fuga voluptatibus quo. |
И:
1 |
Fredy Fadel MD |
2 |
53328 Eldora Isle Apt. 634 West Eleanore, CA 95798-3025 |
3 |
Eligendi eos laudantium eveniet ad. Qui a voluptatibus est quia voluptatem. Dolorum pariatur quaerat nulla. |
Faker выполняет свои обещания.
Поставщики Faker по умолчанию
Все методы генерации данных в Faker созданы на основе реализации провайдеров. Вот код, который регистрирует поставщиков Faker по умолчанию - это делается для вас:
1 |
<?php
|
2 |
$faker = new Faker\Generator(); |
3 |
$faker->addProvider(new Faker\Provider\en_US\Person($faker)); |
4 |
$faker->addProvider(new Faker\Provider\en_US\Address($faker)); |
5 |
$faker->addProvider(new Faker\Provider\en_US\PhoneNumber($faker)); |
6 |
$faker->addProvider(new Faker\Provider\en_US\Company($faker)); |
7 |
$faker->addProvider(new Faker\Provider\Lorem($faker)); |
8 |
$faker->addProvider(new Faker\Provider\Internet($faker)); |
Итак, выше, когда я запросил address у Faker, он искал все провайдеры для методов, которые соответствовали, в конечном счете, используя провайдер Address().
Вы также можете написать собственных поставщиков или просмотреть ряд расширений для Faker, доступных в Интернете.
Модификаторы
Faker также предлагает специальные модификаторы для помощи в тестировании, такие как unique(), optional() или valid(). Например, вы можете генерировать уникальные номера:
1 |
// unique() forces providers to return unique values
|
2 |
$values = array(); |
3 |
for ($i=0; $i < 10; $i++) { |
4 |
// get a random digit, but always a new one, to avoid duplicates
|
5 |
$values []= $faker->unique()->randomDigit; |
6 |
}
|
7 |
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(), некоторые числа будут возвращаться как NULL, как если бы пользователь не ввел поле в вашу форму. Примечание. Я не смог заставить этот метод работать правильно.
С valid() вы можете зарегистрировать функции, которые определяют, соответствуют ли данные наполнителя конкретным требованиям или возвращают ошибку или генерируют сообщение об ошибке в форме пользователя.
Изучение поставщиков
Faker предлагает широкий набор методов для генерации случайных данных для вашего приложения:
- Base: простые методы для случайных букв, чисел, обработанных строк и регулярных выражений
- Lorem Ipsum Text: случайный текст на латыни
- Person: имена людей
- Address: почтовые адреса
- Phone Number: номера телефонов
- Company: имена компаний
- Real Text: фактический текст, написанный людьми вместо бессмысленных латинских строк
- Date and Time: случайные даты и время
- Internet: электронная почта, домены и т.д.
- User Agent: строки браузера
- Payment: строки и номера кредитных карт и SWIFT
- Color: случайные цвета
- File: расширения файлов, типы файлов и имена файлов
- Image: URL-адреса изображений-заполнителей разных видов
- Uuid: уникальные IDs
- Barcode: различные типы штрих-кодов, например. ISBN13
- Miscellaneous: коды шифрования, коды стран и т.д.
- Biased: случайные числа с уклоном
Давайте поэкспериментируем с несколькими из этих методов.
Платежная информация
В приведенном ниже коде генерируются десять человек, информация о кредитных картах и коды безопасности:
1 |
$faker = Faker\Factory::create(); |
2 |
for ($i=0;$i<10;$i++) { |
3 |
$cc = $faker->creditCardDetails; |
4 |
$cc['security']=$faker->numberBetween(199,499); |
5 |
var_dump ($cc);spacer(2); |
6 |
}
|
Вот несколько выводов из приведенного выше кода:



Картинки



Вот простой пример создания изображения:
1 |
$faker = Faker\Factory::create(); |
2 |
$width=320; |
3 |
$height=240; |
4 |
echo '<img src="'.$faker->imageUrl($width, $height).'"/>'; |
вы также можете создавать кошек:
1 |
echo '<img src="'.$faker->imageUrl($width, $height, 'cats', true, 'Faker', true) .'"/>'; |



Эта генерация кошек меня просто покорила. Я не могу дождаться трехмерной печати и активации души, чтобы работать с такими вещами.
Интернационализированные данные
С помощью приведенного ниже кода я создал таблицу с четырьмя столбцами имен из Франции, России, Америки и Китая:
1 |
echo '<table> |
2 |
<thead>
|
3 |
<th>French</th>
|
4 |
<th>Russian</th>
|
5 |
<th>English</th>
|
6 |
<th>Chinese</th>
|
7 |
</thead>
|
8 |
<tr><td>'; |
9 |
$faker = Faker\Factory::create('fr_FR'); // create a French faker |
10 |
for ($i=0; $i < 10; $i++) { |
11 |
echo $faker->name; |
12 |
spacer(); |
13 |
}
|
14 |
spacer(2); |
15 |
echo '</td><td>'; |
16 |
$faker = Faker\Factory::create('Ru_RU'); // create Russian |
17 |
for ($i=0; $i < 10; $i++) { |
18 |
echo $faker->name; |
19 |
spacer(); |
20 |
}
|
21 |
spacer(2); |
22 |
echo '</td><td>'; |
23 |
$faker = Faker\Factory::create('En_US'); // create English |
24 |
for ($i=0; $i < 10; $i++) { |
25 |
echo $faker->name; |
26 |
spacer(); |
27 |
}
|
28 |
spacer(2); |
29 |
echo '</td><td>'; |
30 |
$faker = Faker\Factory::create('zh_CN'); // create Chinese |
31 |
for ($i=0; $i < 10; $i++) { |
32 |
echo $faker->name; |
33 |
spacer(); |
34 |
}
|
35 |
echo '</td></tr></table>'; |
Вот результат:



Создание поддельных адресов электронной почты
Вот пример кода для генерации 25 поддельных адресов электронной почты от бесплатных провайдеров, таких как Gmail и Yahoo:
1 |
$values = array(); |
2 |
for ($i=0; $i < 25; $i++) { |
3 |
// get a random digit, but also null sometimes
|
4 |
$values []= $faker->freeEmail(); |
5 |
}
|
6 |
print_r($values); |
7 |
exit; |
Вот результат:



Создание XML-документов
Faker предлагает полезный пример генерации XML; Однако для этого требуется, чтобы вы работали с инфраструктурой и имели архитектуру представления:
1 |
<?php
|
2 |
require_once '/path/to/Faker/src/autoload.php'; |
3 |
$faker = Faker\Factory::create(); |
4 |
?>
|
5 |
<?xml version="1.0" encoding="UTF-8"?> |
6 |
<contacts>
|
7 |
<?php for ($i=0; $i < 10; $i++): ?> |
8 |
<contact firstName="<?php echo $faker->firstName ?>" lastName="<?php echo $faker->lastName ?>" email="<?php echo $faker->email ?>"/> |
9 |
<phone number="<?php echo $faker->phoneNumber ?>"/> |
10 |
<?php if ($faker->boolean(25)): ?> |
11 |
<birth date="<?php echo $faker->dateTimeThisCentury->format('Y-m-d') ?>" place="<?php echo $faker->city ?>"/> |
12 |
<?php endif; ?> |
13 |
<address>
|
14 |
<street><?php echo $faker->streetAddress ?></street> |
15 |
<city><?php echo $faker->city ?></city> |
16 |
<postcode><?php echo $faker->postcode ?></postcode> |
17 |
<state><?php echo $faker->state ?></state> |
18 |
</address>
|
19 |
<company name="<?php echo $faker->company ?>" catchPhrase="<?php echo $faker->catchPhrase ?>"> |
20 |
<?php if ($faker->boolean(33)): ?> |
21 |
<offer><?php echo $faker->bs ?></offer> |
22 |
<?php endif; ?> |
23 |
<?php if ($faker->boolean(33)): ?> |
24 |
<director name="<?php echo $faker->name ?>" /> |
25 |
<?php endif; ?> |
26 |
</company>
|
27 |
<?php if ($faker->boolean(15)): ?> |
28 |
<details>
|
29 |
<![CDATA[ |
30 |
<?php echo $faker->text(400) ?> |
31 |
]]> |
32 |
</details>
|
33 |
<?php endif; ?> |
34 |
</contact>
|
35 |
<?php endfor; ?> |
36 |
</contacts>
|
В заключение
Надеюсь, что это послужило хорошим введением для вас в библиотеку Faker - невероятно полезную бесплатную PHP-библиотеку с открытым исходным кодом.
Если вы хотите еще что-нибудь почитать, то я рекомендую Jim Nielsen's Filler Content: Tools, Tips и Dynamic Example (Envato Tuts +), который предоставляет разработчику приложения возможность создавать данные. Он предполагает, что вы можете быть более эффективными, когда применяете поддельные данные, чтобы создать более реалистичный опыт в процессе разработки.
Если вы хотите знать, когда выйдет мой следующий учебник Envato Tuts +, следуйте за мной @reifman в Twitter или проверьте мою страницу инструктора. В настоящее время я работаю над двумя сериями, которые вы можете оценить:
- Программирование с помощью Yii2
- Создание своего стартапа на PHP о планировщике встреч; Создай расписание своей первой встречи сегодня.



