joshmoody/mock-data

生成逼真的测试数据。

1.0.0 2021-12-23 04:08 UTC

This package is auto-updated.

Last update: 2024-09-23 09:52:53 UTC


README

生成逼真的测试数据。

Source Build Status Total Downloads Latest Stable Version

为什么?

我工作于高度数据密集型的应用程序。有时我需要大量的测试数据来构建测试用例和初始化网络服务、数据库、在线表单等。我编写这个库就是为了这个目的。

通过简单的循环,我可以生成一个代表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

致谢

本库中使用的地理和人口统计数据来源包括

许可证和版权

许可协议为MIT。版权(c)2013,Josh Moody。保留所有权利。