понедельник, 11 марта 2013 г.

Fzaninotto Faker. Тестовые данные на любой вкус.

Сегодня будем подробнее говорить о фейкере от фзанинотто. Библиотека попалась, когда возникла задача формирования разнообразных тестовых данных - от фейковых пользователей до заполнения ИБ каталога. Фактически, это будет некий художественный перевод документации, ориентированный на русскоязычного пользователя.
Либа требует минимум PHP 5.3.3.



Стартуем

Скачиваем библиотеку. Собственно говоря, нам понадобится только папка src, можно в неё даже не заглядывать, для использования документации вполне хватит.
//инклюдим библиотеку
require_once 'src/autoload.php';

//создаём экземпляр класса
$faker = Faker\Factory::create();
Данные фейкер генерит по вызову определённых свойств с вполне говорящими именами. Каждый вызов одного и того же свойства даёт разные результаты. Хотя возможность выдачи одинаковых результатов имеется, об этом поговорим позже.
Каждое из свойств объекта является некоторым "форматтером". Для каждой локали есть некоторые различия в количестве и выводе форматтеров. Основываясь на здравом смысле, уделим наибольшее внимание функциям, нужным для русскоязычного использования, и русской локали.

Person

форматтерописаниепример вывода
nameполное имя, рандомный формат (из списка в классе). для английской локали возможно добавление префикса и суффикса. для русской локали есть вероятность вывода фамилии вместо отчества из-за ошибки в одном из встроенных форматов.'Алексей Евгеньевич Константинов', 'Mrs. Alysson Feil PhD', 'Ларионов Артём Симонов', 'Miss Justyn Nienow'
firstNameпросто имя в зависимости от локали'Витольд', 'Cathrine', 'Добрыня'
middleNameотчество. только для русской локали. 'Александрович', 'Алексеевич', 'Андреевич', 'Дмитриевич'
lastNameфамилия'Егоров', 'Матвеев', 'Бобров', 'Maynard', 'Weber'

Address

форматтерописаниепример вывода
cityPrefixтип поселения'Ville', 'город'
streetPrefixтип улицы'пер.', 'ул.', 'пр.', 'шоссе', 'пл.', 'бульвар', 'въезд', 'спуск', 'проезд', 'наб.'
regionобластьМосковская
regionPrefixтип региона. отсутствует в английской версииобласть
buildingNumberномер дома, две цифры26
cityназвание поселения'Балашиха', 'Видное', 'Волоколамск','Щёлково', 'East Pearlinehaven', 'Port Danyka', 'Turcotteland'
streetназвание улицы, только в русской локали'Ладыгина', 'Ленина', 'Ломоносова',
postcode5 цифр (вообще-то в России 6 цифр =))23545
addressполный адрес.форматы в локалях различаютсяRU: postcode, region regionSuffix, cityPrefix city, streetPrefix street, buildingNumber
EN: streetAddress postcode city
countryстрана'Австралия', 'Австрия', 'Азербайджан','Afghanistan', 'Albania', 'Algeria', 'American Samoa', 'Andorra'
latitudeширота77.147489
longitudeдолгота86.211205

PhoneNumber

форматтерописаниепример вывода
номер телефонав локалях различаются только форматы'(812) ###-##-##', '(495) ###-####', '+7 (922) ###-####', '8-800-###-####'

Company

на русском языке отсутствует, есть только англоязычный вывод
форматтерописаниепример вывода
catchPhraseслоган компанииMonitored regional contingency
bsкраткое описание компанииe-enable robust architectures
companyназваниеBogan-Treutel
companySuffixпостфиксand Sons

Lorem

на русском языке отсутствует, есть только англоязычный вывод
форматтерописаниепример вывода
wordслово
words($nb=3)массив слов (количество передаётся в аргумент)
sentence($nbWords = 6)предложение (количество слов передаётся в аргумент)
sentences($nb=3)
paragraph($nbSentences = 3)текст (количество предложений передаётся в аргумент)
paragraphs ($nb=3)массив параграфов (количество параграфов передаётся в аргумент)
text($maxNbChars = 200)текст (в аргумент передаётся максимальное число символов)

Internet

на русском языке иногда бывают странные результаты. если хочется предсказуемых английских емейлов, то лучше пользоваться английской локалью. например, фейкер использует русскоязычные имена для генерации имени до знака @. короче, для этой части лучше использовать локаль по умолчанию, то есть английскую. в столбике примеров приведены результаты вывода русской локали.
форматтерописаниепример вывода
emailемейлАндрей35@hotmail.com
safeEmailемейл с несуществующего доменаАртемий63@example.org
freeEmailемейл с бесплатного сервисаmМорозов@gmail.com
companyEmailемейл компанииkВоронцов@Мамонтов-Петухов.org
freeEmailDomainдомен бесплатного почтовикаgmail.com
safeEmailDomain домен несуществующего почтовикаexample.net
userNameимя юзверя до знака @Алексей.Гущин
domainNameпросто рандомный домен второго уровняКомиссаров.com
domainWordтипа тайтл доменаКоновалов-Колобов
tldдомен первого уровня соответствующей локалиru
urlрандомный урлhttp://Михайлов.com/
ipv4айпишник версии 4241.81.91.197
ipv6айпишник версии 6ccb:365:621:9c7f:8cca:680d:1475:127d

DateTime

этот раздел не имеет русскоязычной локали. возвращает англоязычные варианты.
форматтерописаниепример вывода
unixTimeвремя в юникс-формате(секунды)58781813
dateTimeдата современности. возвращает объектсвойства: date=>"1976-12-26 05:04:00"
timezone=>"+00:00"
dateTimeADдаты прошлых веков =) возвращает объектсвойства: date=>"1445-05-16 16:43:33"
timezone=>"+00:00"
iso8601дата в формате исо86011979-02-01T06:29:19+0000
date($format = 'Y-m-d')почти аналог пхп-шной функции, формат берём из пхп-шных доков1987-02-20
time($format = 'H:i:s')почти аналог пхп-шной функции, формат берём из пхп-шных доков05:47:51
dateTimeBetween($startDate = '-30 years', $endDate = 'now')для описания возможных значений аргументов смотрим например в strtotime. возвращает объект - время в указанном интервале.свойства: date=>"2002-11-20 22:13:20"
timezone=>"+00:00"
dateTimeThisCenturyчастный случай dateTimeBetween. возвращает дату за последние сто лет.
dateTimeThisDecadeчастный случай dateTimeBetween. возвращает дату за последние десять лет.
dateTimeThisYearчастный случай dateTimeBetween. возвращает дату за год.
dateTimeThisMonthчастный случай dateTimeBetween. возвращает дату за месяц.
amPmдо обеда или послеam
dayOfMonthдень месяца. число.05
dayOfWeekдень недели.Wednesday
monthномер месяца07
monthNameимя месяцаOctober
yearгод2009
centuryвекXIV
timezoneвременная зонаPacific/Palau

Miscellaneous

boolean($chanceOfGettingTrue = 50)получает в качестве аргумента процент вероятности получения true, возвращает соответственное true или falsefalse
md5хеш md5de99a620c50f2990e87144735cd357e7
sha1хеш sha1f08e7f04ca1a413807ebc47551a40a20a0b4de5c
sha256хеш sha2560061e4c60dac5c1d82db0135a42e00c89ae3a333e7c26485321f24348c7e98a5
localeкод локалиen_UK
countryCodeкод страныRU
languageCodeкод языкаfr

DateTime

этот раздел не имеет русскоязычной локали. возвращает англоязычные варианты.
форматтерописаниепример вывода
randomDigitцифра между 0 и 91
randomDigitNotNullцифра между 1 и 99
randomNumber($nbDigits = NULL)от нуля до числа разрядностью nbDigits. аналог mt_rand(0, pow(10,$nbDigits)-1)
randomNumber($from, $to)число от from до to
randomFloat($nbMaxDecimals = NULL, $min = 0, $max = NULL)число с плавающей точкой от min до max c nbMaxDecimals цифрами после запятой.
randomLetterрандомная буква латинского алфавитаd
randomElement($array = array ('a','b','c'))рандомный выбор из массиваb
numerify($string = '###')заменяет вхождение # на рандомную цифру
lexify($string = '????')заменяет вхождение ? на рандомную букву
bothify($string = '## ??')заменяется вхождение # на рандомную цифру, а вхождение ? на рандомную букву

UserAgent

форматтерописаниепример вывода
userAgentюзер агент рандомного браузераMozilla/5.0 (Windows CE) AppleWebKit/5350 (KHTML, like Gecko) Chrome/13.0.888.0 Safari/5350
chromeюзер агент хромаMozilla/5.0 (Macintosh; PPC Mac OS X 10_6_5) AppleWebKit/5312 (KHTML, like Gecko) Chrome/14.0.894.0 Safari/5312
firefoxюзер агент файрфоксаMozilla/5.0 (X11; Linuxi686; rv:7.0) Gecko/20101231 Firefox/3.6
safariюзер агент сафариMozilla/5.0 (Macintosh; U; PPC Mac OS X 10_7_1 rv:3.0; en-US) AppleWebKit/534.11.3 (KHTML, like Gecko) Version/4.0 Safari/534.11.3
operaюзер агент оперыOpera/8.25 (Windows NT 5.1; en-US) Presto/2.9.188 Version/10.00
internetExplorerюзер агент осликаMozilla/5.0 (compatible; MSIE 7.0; Windows 98; Win 9x 4.90; Trident/3.0)

UUID

форматтерописаниепример вывода
uuidуниверсальный уникальный идентификатор7e57d004-2b97-0e7a-b45f-5387367791cd

Получение одинаковых значений

Иногда может понадобиться получение одинаковых значений от скрипта при каждом запуске. Фейкер предлагает метод seed(), принимающий число.
$faker = Faker\Factory::create();
$faker->seed(1234);
echo $faker->name;
Сколько бы раз вы не вызывали этот скрипт он всегда будет возвращать одно и то же. Напоследок добавлю, что Фзанинотто выпускает свой фейкер под лицензией MIT.

Комментариев нет:

Отправить комментарий