Faker是由Francois Zaninotto创建的开源库,可为您的应用程序及其测试需求生成人工填充数据。
Faker可以在普通的PHP应用程序,Yii或Laravel等框架中使用,也可以在测试库中使用,例如我们在此早期的Envato Tuts +教程中与Codeception一起提到的库中。
在今天的教程中,我将回顾Faker的基本安装和使用及其功能。 正如Zaninotto所说:
“无论您是需要引导数据库,创建美观的XML文档,填充持久性以进行压力测试还是匿名化从生产服务中获取的数据,Faker都是您的理想选择。”
总体而言,它提供了适用于任何测试方案的各种简单功能。
提醒我们开始之前,我确实参加了下面的评论主题。 如果您有其他想法或想为以后的教程提出建议,我特别感兴趣。 如果您有任何问题或建议,请在下面发布。 您也可以直接通过Twitter @reifman与我联系 。
入门
安装Faker
我首先创建一个新的代码树,然后将fzaninotto/faker
添加到下面的composer.json中:
{
"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" : "*"
}
}
然后,我更新了作曲家:
$ 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
Faker已安装到供应商目录中。 因此,然后我将其加载到index.php文件的顶部:
<?php
// require the Faker autoloader
require __DIR__ . '/vendor/autoload.php';
接下来,我想尝试一些简单的生成数据的示例场景。
简单的例子
我将Faker示例扩展如下,并从http:// localhost:8888 / faker运行它们:
<?php
// require the Faker autoloader
require __DIR__ . '/vendor/autoload.php';
// 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. Beatae nam sunt fugit
// et sit et mollitia sed.
// Fuga deserunt tempora facere magni omnis. Omnis quia temporibus laudantium
// sit minima sint.
spacer();
function spacer() {
echo '<br />';
}
?>
快速刷新后,我看到了各种各样的结果,例如:
Ruthie Beier
37851 Gusikowski Flat Suite 594 Port Keithmouth, NM 06110
Reprehenderit eos suscipit sit modi architecto necessitatibus. Error maiores qui vero non omnis. Quaerat mollitia dolore deserunt quia quidem beatae.
和:
Darron Hessel
657 Elijah Lock Suite 202 Nitzschemouth, AZ 11166
Culpa dolorum quidem distinctio eius necessitatibus. Mollitia ut nostrum et ut quas veniam et. Unde iure molestiae aperiam fuga voluptatibus quo.
和:
Fredy Fadel MD
53328 Eldora Isle Apt. 634 West Eleanore, CA 95798-3025
Eligendi eos laudantium eveniet ad. Qui a voluptatibus est quia voluptatem. Dolorum pariatur quaerat nulla.
Faker兑现了诺言。
Faker的默认提供程序
Faker中的所有数据生成方法都是从提供程序的实现中创建的。 这是注册Faker的默认提供程序的代码-已为您完成:
<?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));
所以上面,当我向Faker请求一个address
时,它在所有提供程序中搜索了匹配的方法,最终使用了Address()
提供程序。
您还可以编写自己的提供程序或浏览Web上可用的Faker扩展 。
修饰符
Faker还提供了特殊的修饰符来帮助您进行测试,例如unique(),optional()或valid() 。 例如,您可以生成唯一的数字:
// 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);
这是唯一值的输出:
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提供了广泛的方法来为您的应用程序生成随机数据:
- 基础:用于随机字母,数字,已处理字符串和正则表达式的简单方法
- Lorem Ipsum Text:随机的拉丁文字
- 人员:人员名称
- 地址:邮寄地址
- 电话号码:电话号码
- 公司:公司名称
- 真实文本:人类写的实际文本与无意义的拉丁字符串
- 日期和时间:随机日期和时间
- 互联网:电子邮件,域名等。
- 用户代理:浏览器字符串
- 付款:信用卡和SWIFT字符串和数字
- 颜色:颜色随机
- 文件:文件扩展名,文件类型和文件名
- 图片:各种填充图片的网址
- Uuid:唯一ID
- 条形码:各种条形码类型,例如ISBN13
- 杂项:加密代码,国家/地区代码等。
- 偏差:带有偏差的随机数
让我们尝试更多这些方法。
支付信息
以下代码可生成十个人,其信用卡信息和安全代码:
$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 = Faker\Factory::create();
$width=320;
$height=240;
echo '<img src="'.$faker->imageUrl($width, $height).'"/>';
但是您也可以生成猫:
echo '<img src="'.$faker->imageUrl($width, $height, 'cats', true, 'Faker', true) .'"/>';
猫的发电能力可能使我胜过。 我迫不及待地要进行三维打印和激活灵魂来处理类似这样的事情。
国际化数据
使用下面的代码,我创建了一个表,其中包含四列来自法国,俄罗斯,美国和中国的名称:
echo '<table>
<thead>
<th>French</th>
<th>Russian</th>
<th>English</th>
<th>Chinese</th>
</thead>
<tr><td>';
$faker = Faker\Factory::create('fr_FR'); // create a French faker
for ($i=0; $i < 10; $i++) {
echo $faker->name;
spacer();
}
spacer(2);
echo '</td><td>';
$faker = Faker\Factory::create('Ru_RU'); // create Russian
for ($i=0; $i < 10; $i++) {
echo $faker->name;
spacer();
}
spacer(2);
echo '</td><td>';
$faker = Faker\Factory::create('En_US'); // create English
for ($i=0; $i < 10; $i++) {
echo $faker->name;
spacer();
}
spacer(2);
echo '</td><td>';
$faker = Faker\Factory::create('zh_CN'); // create Chinese
for ($i=0; $i < 10; $i++) {
echo $faker->name;
spacer();
}
echo '</td></tr></table>';
这是输出:
创建伪造的电子邮件地址
以下示例代码可从免费提供商(例如Gmail和Yahoo)生成25个伪造的电子邮件地址:
$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生成示例。 但是,它要求您使用的是框架并拥有视图架构:
<?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('Y-m-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的基本介绍,Faker是一个非常有用的免费开放源代码PHP库。
如果您想进一步阅读,我建议您使用Jim Nielsen的Filler Content:工具,技巧和动态示例(Envato Tuts +) ,它为应用程序设计师提供了生成数据的方法。 他建议您在设计过程中应用虚假数据来创建更真实的体验时,您可以提高效率。
如果您想知道我的下一个Envato Tuts +教程何时到达, 请在Twitter上关注我@reifman或检查我的讲师页面 。 目前,我正在研究两个系列,您可能会喜欢: