使用 Doctrine DBAL 和 Symfony2 组件的测试数据生成器

v1.1 2018-08-15 07:42 UTC

README

#Faker - 数据库测试工具。

有几个对原始 Perl Faker 的移植,还有一些移植到 PHP。最初作为一个简单的项目,现在已经发展成为一个综合的数据生成工具,由 Doctrine DBAL 和 Symfony2 组件提供支持。

我认为 Faker 将如何帮助您

  1. 编写 PHPUnit DBUnit 固定数据,这将为您节省时间(尤其是涉及多个平台时)。
  2. 您需要为各种加载测试填充数据库中的测试数据。

如果您是数据库测试人员或独立开发者,Faker 将帮助您更快地测试数据库。

##功能

  1. 支持多个平台,使用 Doctrine DBAL。(MySql|PGSQL|Oracle|Sqlite|MSSql)。
  2. 支持 PHPUnit Dataset XML 用于 DBUnit 固定数据。
  3. 支持上述平台的标准 Sql DDL(插入语句)。
  4. 输出格式有自己的模板,可以根据项目进行自定义。(添加自己的品牌)。
  5. 通过 XML 文件配置,感觉更接近数据库。
  6. 许多内置数据类型,包括文本、数字、自增、电子邮件、城市名称等。
  7. 支持扩展,编写自己的类型、编写者和地区。
  8. 通过 composer 安装。
  9. 分析和构建现有数据库的结构。
  10. 为随机数生成器配置种子以获得可重复的结果(种子全局|表|列|类型)。
  11. 支持自定义地区,生成 Unicode 测试数据。(不仅仅是英文)
  12. 项目文件夹可以与您的项目一起进行版本控制。

##要求。

SQLite3、PHP5.3.3、MBString、Pear 和 Linux / Mac(Windows 支持处于测试阶段)。

所有组件默认包含在 PHP 的包安装中。

如何安装

最简单的方法是使用 composer 安装

{
  "require-dev" : {
    "icomefromthenet/faker": "dev-master"
  }
}

更多信息请参阅 入门指南

快速示例 - 仍然在疑惑

转换您的 SCHEMA

<?xml version="1.0"?>
<schema name="sakila" randomGenerator="simple" generatorSeed="1000">
 <writer platform="mysql" format="sql" singleFileMode="true" />
 
 <table name="actor" generate="100" randomGenerator="simple" generatorSeed="1000">
  <column name="actor_id" type="integer" randomGenerator="simple" generatorSeed="1000">
   <datatype name="autoincrement">
     <option name="start" value="1" />
     <option name="randomGenerator" value="simple" />
     <option name="generatorSeed"   value="100" />
   </datatype>
  </column>
  <column name="first_name" type="string">
   <datatype name="people">
    <option name="format" value="{fname}" />
   </datatype>
  </column>
  <column name="last_name" type="string">
   <datatype name="people">
    <option name="format" value="{lname}" />
   </datatype>
  </column>
  <column name="last_update" type="datetime">
   <datatype name="date">
     <option name="start" value="today" />
     <option name="modify" value="+1 week" />
     <option name="max" value="today +10 weeks" />
   </datatype>
  </column>
 </table>
 
 <table name="actor_homes" generate="10000">
  <column name="actor_id" type="integer">
   <foreign-key name="actor_homes.actor_id" foreignTable="actor" foreignColumn="actor_id" />
  </column>
 </table>
 
</schema>

调用命令

 ../vendor/bin/faker.php faker:generate schema.xml

转换成 DATA

-- Migrations Faker Dump
-- version 1.0.2
-- https://github.com/icomefromthenet/Faker
--
-- Host: localhost
-- Generation Time: 2012-07-03T06:08:02+00:00
-- PHP Version: 5.3.10-1ubuntu3.2
-- Platform: mysql

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

--
-- Database: sakila
--

-- --------------------------------------------------------



--
-- Table: actor
--


USE sakila;

INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (1,'Jordan','Proctor','2012-07-03 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (2,'Michele','Welsh','2012-07-10 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (3,'Paul','Lam','2012-07-17 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (4,'Sheila','Best','2012-07-24 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (5,'Karl','Moser','2012-07-31 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (6,'Victoria','Todd','2012-08-07 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (7,'Julia','Sun','2012-08-14 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (8,'Jimmy','Rankin','2012-08-21 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (9,'George','Brantley','2012-08-28 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (10,'Wendy','Walton','2012-09-04 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (11,'Lester','Osborne','2012-09-11 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (12,'Edwin','Upchurch','2012-07-03 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (13,'Courtney','Ennis','2012-07-10 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (14,'Nina','Fischer','2012-07-17 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (15,'Brooke','Benson','2012-07-24 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (16,'Angela','Rodriguez','2012-07-31 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (17,'Todd','Wiggins','2012-08-07 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (18,'Ron','Smith','2012-08-14 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (19,'Andrew','Coates','2012-08-21 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (20,'Kerry','Harrison','2012-08-28 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (21,'Harvey','Mercer','2012-09-04 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (22,'Herbert','Gould','2012-09-11 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (23,'Donna','Forrest','2012-07-03 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (24,'Vivian','Sumner','2012-07-10 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (25,'Carol','Oliver','2012-07-17 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (26,'Patricia','Tate','2012-07-24 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (27,'Dolores','Bowers','2012-07-31 00:00:00');
INSERT INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`) VALUES (28,'Gerald','Pearson','2012-08-07 00:00:00');