说到“Faker”,是不是会联想到那个LOL界的大魔王?但是这里的此“Faker”非上面说的“Faker”。这个“Faker”也可以号称一个大魔王,测试数据生成的大魔王!Faker 是一个 PHP 库,可用来生成虚假数据。它已在 GitHub 上获得 26.5k Star。
Github:https://github.com/fzaninotto/Faker
Faker 灵感来自 Perl 语言的 Data::Faker 和 Ruby 的 Faker 两个项目的混合。现在受欢迎度已经超过了另外两个。
Faker 要求 PHP 版本 >= 5.3.3.
使用Faker\Factory::create()来创建和初始化一个faker生成器。这个生成器可以生成数据。生成数据的方式是通过访问你想要的数据类型的属性名。
<?php
require '../vendor/autoload.php';
$faker = Faker\Factory::create('zh_CN'); //选择中文
//可用循环输出多个
echo $faker->name(),'<br>'; //武振国
echo $faker->address(),'<br>'; //昆明滨城区
echo $faker->phonenumber(),'<br>'; //17770379727
echo $faker->email(),'<br>'; //molestias_eveniet@foxmail.com
echo $faker->bank(); //中国农业银行
有了这个类库,测试起来就舒服很多了。
觉得生成的数据不够随机的可以去改源码,例如这里就是address方法生成的城市名数组,可以把你的家乡也加进去!
<?php
namespace Faker\Provider\zh_CN;
class Address extends \Faker\Provider\Address
{
protected static $cites = array(
'北京','上海','天津','重庆',
'哈尔滨','长春','沈阳','呼和浩特',
'石家庄','乌鲁木齐','兰州','西宁',
'西安','银川','郑州','济南',
'太原','合肥','武汉', '长沙',
'南京','成都','贵阳','昆明',
'南宁','拉萨','杭州','南昌',
'广州','福州','海口',
'香港','澳门'
);
protected static $states = array(
'北京市','天津市','河北省','山西省',
'内蒙古自治区','辽宁省','吉林省',
'黑龙江省','上海市','江苏省',
'浙江省','安徽省','福建省','江西省',
'山东省','河南省','湖北省','湖南省',
'广东省','广西壮族自治区','海南省',
'重庆市','四川省','贵州省','云南省',
'西藏自治区','陕西省','甘肃省','青海省',
'宁夏回族自治区','新疆维吾尔自治区',
'香港特别行政区','澳门特别行政区','台湾省'
);
protected static $stateAbbr = array(
'京','皖','渝','闽',
'甘','粤','桂','黔',
'琼','冀','豫','黑',
'鄂','湘','吉','苏',
'赣','辽','蒙','宁',
'青','鲁','晋','陕',
'沪','川','津','藏',
'新','滇','浙','港',
'澳','台'
);
}
即使这个例子展示了一个属性读取,每个对$faker->name的声明都会产生一个随机结果。这是因为 Faker 使用__get()魔法,将Faker\Generator->$property的声明转发到了Faker\Generator->format($property)。
<?php
for ($i = 0; $i < 10; $i++) {
echo $faker->name, "\n";
}
// Adaline Reichel
// Dr. Santa Prosacco DVM
// Noemy Vandervort V
// Lexi O'Conner
// Gracie Weber
// Roscoe Johns
// Emmett Lebsack
// Keegan Thiel
// Wellington Koelpin II
// Ms. Karley Kiehn V
<?php
require_once __DIR__.'/vendor/autoload.php';
set_time_limit(0);
$faker = Faker\Factory::create();
$host = "127.0.0.1";
$user = 'root';
$passwrod = 'root';
$dbName = 'demo';
$link = new mysqli($host,$user,$passwrod,$dbName);//连接数据库
if($link->connect_error){
die('连接失败:'.$link->connect_error);
}
$num = 100;//添加数据条数
$table = 'text';//需要操作表名称
for($i = 0;$i < $num;$i++)
{
//设置对应表字段信息
$data[$i]['name'] = $faker->userName;
$data[$i]['password'] = '123456';
$data[$i]['email'] = $faker->email;
$data[$i]['truename'] = $faker->name();
}
//逐步添加数据
for($i = 0;$i < $num;$i++)
{
//获取字段信息
$key = array_keys($data[$i]);
$key_str = implode(',',$key);
//获取字段对应数据
$val = array_values($data[$i]);
$var_str = implode("','",$val);
$var_str = "'".$var_str."'";
//拼接sql语句
$sql = "insert into $table ($key_str) values($var_str)";
//执行sql语句
mysqli_query($link,$sql);
}
每个生成器属性(例如名字,地址,乱数假文)都被叫做“格式器”。一个Faker生成器有很多的格式器,被打包在“providers”中。这里是一些默认的格式器。
Faker\Provider\Base
randomDigit // 7
randomDigitNot(5) // 0, 1, 2, 3, 4, 6, 7, 8, or 9
randomDigitNotNull // 5
randomNumber($nbDigits = NULL, $strict = false) // 79907610
randomFloat($nbMaxDecimals = NULL, $min = 0, $max = NULL) // 48.8932
numberBetween($min = 1000, $max = 9000) // 8567
randomLetter // 'b'
// returns randomly ordered subsequence of a provided array
randomElements($array = array ('a','b','c'), $count = 1) // array('c')
randomElement($array = array ('a','b','c')) // 'b'
shuffle('hello, world') // 'rlo,h eoldlw'
shuffle(array(1, 2, 3)) // array(2, 1, 3)
numerify('Hello ###') // 'Hello 609'
lexify('Hello ???') // 'Hello wgt'
bothify('Hello ##??') // 'Hello 42jz'
asciify('Hello ***') // 'Hello R6+'
regexify('[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}'); // sm0@y8k96a.ej
Faker\Provider\en_US\Person
title($gender = null|'male'|'female') // 'Ms.'
titleMale // 'Mr.'
titleFemale // 'Ms.'
suffix // 'Jr.'
name($gender = null|'male'|'female') // 'Dr. Zane Stroman'
firstName($gender = null|'male'|'female') // 'Maynard'
firstNameMale // 'Maynard'
firstNameFemale // 'Rachel'
lastName
这些方法都接受了$timezone参数默认传递到date_default_timezone_get()。你可以对每个方法传递一个timezone字符串参数,或者是在使用$faker::setDefaultTimezone($timezone)时,为所有的time方法自定义一个timezone。
Faker\Provider\Internet
email // 'tkshlerin@collins.com'
safeEmail // 'king.alford@example.org'
freeEmail // 'bradley72@gmail.com'
companyEmail // 'russel.durward@mcdermott.org'
freeEmailDomain // 'yahoo.com'
safeEmailDomain // 'example.org'
userName // 'wade55'
password // 'k&|X+a45*2['
domainName // 'wolffdeckow.net'
domainWord // 'feeney'
tld // 'biz'
url // 'http://www.skilesdonnelly.biz/aut-accusantium-ut-architecto-sit-et.html'
slug // 'aut-repellat-commodi-vel-itaque-nihil-id-saepe-nostrum'
ipv4 // '109.133.32.252'
localIpv4 // '10.242.58.8'
ipv6 // '8e65:933d:22ee:a232:f1c1:2741:1f10:117c'
macAddress // '43:85:B7:08:10:CA'
Faker\Provider\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)'
如果你有如下的需求:引导数据库,创建好看的XML文档,充实你的压力测试,或者从生产服务中匿名化数据,Faker 可以满足你的要求
关于本项目的更多详细信息,可去查看这里https://github.com/fzaninotto/Faker
文/小丁&互联网
图/互联网