Статьи

Использование Faker для генерации данных заполнителя для автоматического тестирования

Конечный продукт
Что вы будете создавать

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 по умолчанию — это сделано для вас:

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);
}

Вот некоторые выводы из приведенного выше кода:

Использование Faker Generation Payment или данных кредитной карты
Использование Faker изображений

Вот простой пример генерации изображения:

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>’;

Вот вывод:

Использование возможностей Faker International - Таблицы имен из четырех стран

Вот пример кода для создания 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;

Вот результирующий вывод:

Используя Faker - 25 бесплатных адресов электронной почты

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 или зайдите на страницу моего инструктора . В настоящее время я работаю над двумя сериями, которые вы можете оценить:

  1. Программирование с помощью серии Yii2
  2. Создание вашего стартапа с PHP о Meeting Planner ; иди запланируй свою первую встречу там сегодня.