joshmoody / mock-data
生成逼真的测试数据。
1.0.0
2021-12-23 04:08 UTC
Requires
- php: >=7.2
- ext-pdo: *
- simpl/sql: ^1.3
Requires (Dev)
- ext-zip: *
- phpunit/phpunit: ^8.5
- squizlabs/php_codesniffer: ^3.6
- symfony/var-dumper: ^4.4
This package is auto-updated.
Last update: 2024-09-23 09:52:53 UTC
README
生成逼真的测试数据。
为什么?
我工作于高度数据密集型的应用程序。有时我需要大量的测试数据来构建测试用例和初始化网络服务、数据库、在线表单等。我编写这个库就是为了这个目的。
通过简单的循环,我可以生成一个代表10万人的数据库,用于我的开发和测试。
本库包含的基础数据源
- 美国城市/县/州/邮编数据库
- 来自美国人口普查的第一/姓氏
- 常见的美国街道名称
模拟数据生成
使用这个库可以生成许多不同类型的模拟数据。从基本的构建块,如数字和日期,到具有从出生日期到驾照和信用卡几乎所有属性的Person。
数据真实感
这个库被设计用来创建看起来非常逼真的数据。
- 如果生成一个人
- 如果指定了州
- 城市将是该州的有效城市
- 区号、邮编和县将适用于该城市
- SSN将在该州的合法范围内
- 电子邮件地址将包含其姓名的一部分
- 首/中文名将与选定的性别相匹配
- 对于信用卡号码
- 前缀和长度将与生成的卡片类型(万事达卡、维萨卡等)相匹配
- 如果指定了州
用法
$generator = new joshmoody\Mock\Generator(); $person = $generator->getPerson('AR'); print_r($person);
示例输出
joshmoody\Mock\Entities\Person Object
(
[guid] => d36fb161-39a8-ca74-9564-e5f903b6bad1
[unique_hash] => f7382ef385fccc215ac1f4cd3f975ad63898556f
[name] => joshmoody\Mock\Entities\FullName Object
(
[first] => Leonard
[middle] => Gordon
[last] => Roberts
[gender] => M
)
[company] => Martin Auto
[address] => joshmoody\Mock\Entities\Address Object
(
[line_1] => 6496 6th Street
[line_2] =>
[city] => Fort Smith
[zip] => 72903
[county] => Sebastian
[state] => joshmoody\Mock\Entities\State Object
(
[code] => AR
[name] => Arkansas
)
)
[address2] => joshmoody\Mock\Entities\Address Object
(
[line_1] => 4126 Berkshire Drive
[line_2] => Suite 3352
[city] => Fort Smith
[zip] => 72903
[county] => Sebastian
[state] => joshmoody\Mock\Entities\State Object
(
[code] => AR
[name] => Arkansas
)
)
[internet] => joshmoody\Mock\Entities\Internet Object
(
[domain] => martinauto.com
[username] => lroberts
[email] => leonard@yahoo.com
[url] => http://www.martinauto.com
[ip] => 201.254.71.153
)
[phone] => stdClass Object
(
[home] => 479-123-0338
[mobile] => 479-761-9748
[work] => 479-551-3998
)
[ssn] => 429836996
[dln] => joshmoody\Mock\Entities\DriverLicense Object
(
[number] => 927684836
[state] => AR
[expiration] => 06/2017
)
[credit_card] => joshmoody\Mock\Entities\CreditCard Object
(
[type] => American Express
[number] => 347716769562193
[expiration] => 03/2015
)
[bank_account] => joshmoody\Mock\Entities\BankAccount Object
(
[type] => Checking
[name] => First National
[account] => 935060029
[routing] => 075938878
)
[dob] => DateTime Object
(
[date] => 1994-05-13 03:56:44.000000
[timezone_type] => 3
[timezone] => UTC
)
)
上面每种类型的数据元素都可以独立生成。
姓名
获取全名(名、中名、姓、性别)。
为什么性别作为姓名的属性包括在内?在美国,首名和中名通常与性别紧密相关。
$name = $generator->getFullName(); /* joshmoody\Mock\Entities\FullName Object ( [first] => Laurie [middle] => Joyce [last] => Wilson [gender] => F ) */
或者获取姓名的部分
$first = $generator->getFirstName('M'); // M=Male, F=Female, null = random. /* string(8) "Clarence" */ $middle = $generator->getMiddleName('M'); // M=Male, F=Female, null = random. /* string(4) "Dale" */ $last = $generator->getLastName(); /* string(6) "Rogers" */
地址
获取包含街道、城市、州、邮编的完整地址
$address = $generator->getAddress(); /* joshmoody\Mock\Entities\Address Object ( [line_1] => 2835 Hamilton Street [line_2] => [city] => Hyndman [zip] => 15545 [county] => Bedford [state] => joshmoody\Mock\Entities\State Object ( [code] => PA [name] => Pennsylvania ) ) */
或者获取地址的部分
$street = $generator->getStreet(); /* string(15) "2162 9th Street" */ $apartment = $generator->getApartment(); /* string(9) "Apt. 6677" */ $city = $generator->getCity('AR'); /* string(8) "Little Rock" */ $state = $generator->getState(); /* joshmoody\Mock\Entities\State Object ( [code] => AR [name] => Arkansas ) */ $zip = $generator->getZip('AR'); /* string(5) "72201" */
电话号码
$phone = $generator->getPhone([$state_code = false, $zip = false, $include_toll_free = false]); /* string(12) "908-519-1084" */
互联网
$internet = $generator->getInternet([$person_name = null, $company = null]); /* joshmoody\Mock\Entities\Internet Object ( [domain] => martinez.us [username] => swilliams [email] => stacey.williams@gmail.com [url] => https://martinez.us [ip] => 157.116.10.90 ) */ $domain = $generator->getDomain($domain = null); /* string(8) "dean.com" */ $username = $generator->getUsername([$person_name = null]); /* string(14) "pedro.thompson" */ $email = $generator->getEmail([$person_name = null, $domain = null]); /* string(20) "fred.harrison@me.com" */ $url = $generator->getUrl(); /* string(19) "http://hernandez.us" */ $ip = $generator->getIp(); /* string(13) "101.114.68.26" */
随机数据
除了生成真实数据,您还可以使用这个库轻松地从数组中随机选择一个值。
$color = $generator->fromArray(['Red' , 'White', 'Blue']); /* string(3) "Red" */
或者获取一个布尔值。
$bool = $generator->getBool(); // Returns bool(true) or bool(false); /* bool(false) */
或者获取布尔值的字符串表示。您定义true/false的返回值
$yes_no = $generator->getBool('Yes', 'No'); // Returns string(Yes) or string(No) /* string(3) "Yes" */ $aye_nay = $generator->getBool('Aye', 'Nay'); // returns string(Aye) or string (Nay) /* string(3) "Nay" */
要求
- MySQL或SQLite
- PHP >= 7.2,并带有SQLite PDO扩展。
安装
使用Composer安装此包很容易。如果您不熟悉PHP的Composer依赖管理器,您应该先阅读这篇文章。
composer require joshmoody/mock-data
零配置说明
该包附带的sqlite数据库包含生成随机记录所需的所有数据。
$generator = new joshmoody\Mock\Generator();
重新加载数据
您可以使用加载脚本来随时重新生成sqlite数据库。如果您修改源数据以更好地满足需求,这可能很有用。
$ php bin/load.php
致谢
本库中使用的地理和人口统计数据来源包括
- http://www.unitedstateszipcodes.org/zip-code-database/
- http://www.50states.com/tools/postal.htm
- https://www.census.gov/genealogy/www/data/1990surnames/names_files.html
- http://www.livingplaces.com/streets/most-popular_street_names.html
许可证和版权
许可协议为MIT。版权(c)2013,Josh Moody。保留所有权利。