Fake fixture 数据生成器
fzaninotto/faker是一个PHP扩展,它可以生成需要种类的假数据:名称、电话、地址,以及随机字符串和数字等等。它可以帮助你生成需要随机记录,用于性能和逻辑测试。你可以通过写自己的formatters和generators来扩展你支持的类型集合。
在Yii2应用骨架中,yiisoft/yii2-faker wrapper被包含在composer.json文件的require-dev部分中,这部分用于测试代码(第十一章,测试)。这个wrapper为控制台应用和测试环境提供FixtureController控制台。
准备
按照官方指南http://www.yiiframework.com/doc-2.0/guide-start-installation.html的描述,使用Composer包管理器创建一个新的应用。
如何做…
- 打开目录
tests/codeception/templates并添加fixture模板文件users.txt:
<?php/*** @var $faker \Faker\Generator* @var $index integer*/return ['name' => $faker->firstName,'phone' => $faker->phoneNumber,'city' => $faker->city,'about' => $faker->sentence(7, true),'password' => Yii::$app->getSecurity()->generatePasswordHash('password_' . $index),'auth_key' => Yii::$app->getSecurity()->generateRandomString(),];
- 运行测试控制台
yii命令:
php tests/codeception/bin/yii fixture/generate users --count=2
确认migration生成。
检查
tests/codeception/fixtures是否包含新的users.php文件,以及自动生成的数据:
return [['name' => 'Isadore','phone' => '952.877.8545x190','city' => 'New Marvinburgh','about' => 'Ut quidem voluptatem itaque veniam voluptas dolores.','password' => '$2y$13$Fi3LOl/sKlomUH.DLgqBkOB/uCLmgCoPPL1KXiW0hffnkrdkjCzAC','auth_key' => '1m05hlgaAG8zfm0cyDyoRGMkbQ9W6hj1',],['name' => 'Raleigh','phone' => '1-655-488-3585x699','city' => 'Reedstad','about' => 'Dolorem quae impedit tempore libero doloribus nobis dicta tempora facere.','password' => '$2y$13$U7Qte5Y1jVLrx/pnhwdwt.1uXDegGXuNVzEQyUsb65WkBtjyjUuYm','auth_key' => 'uWWJDgy5jNRk6KjqpxS5JuPv0OHearqE',],],
使用你自己的数据类型
- 使用你自定义生成逻辑创建你自己的provider:
<?phpnamespace tests\codeception\faker\providers;use Faker\Provider\Base;class UserStatus extends Base{public function userStatus(){return $this->randomElement([0, 10, 20, 30]);}}
- 在
/tests/codeception/config/config.php文件中添加provider到provider列表中:
return ['controllerMap' => ['fixture' => ['class' => 'yii\faker\FixtureController','fixtureDataPath' => '@tests/codeception/fixtures','templatePath' => '@tests/codeception/templates','namespace' => 'tests\codeception\fixtures','providers' => ['tests\codeception\faker\providers\UserStatus',],],],// ...];
- 添加
status字段到你的fixture模板文件中:
<?php/*** @var $faker \Faker\Generator* @var $index integer*/return ['name' => $faker->firstName,'status' => $faker->userStatus,];
- 使用控制台命令生成fixture:
php tests/codeception/bin/yii fixture/generate users --count=2
- 检查
fixtures/users.php生成的代码是否包含你的自定义值:
return [['name' => 'Christelle','status' => 30,],['name' => 'Theo','status' => 10,],];
工作原理…
yii2-faker扩展包含一个控制台生成器(它使用你的模板来生成fixture数据文件),并给了你一个准备好的原始Faker对象实例。你可以生成所有或者指定的fixtures,并且你可以在控制台参数中传递自定义数值或者语言。
注意
如果你的测试使用这些fixtures的话,小心已存在的测试文件,因为自动生成会完全覆盖旧数据。
参考
- 源代码以及关于扩展的更多信息,参考:
- https://github.com/yiisoft/yii2-faker/tree/master/docs/guide
- http://www.yiiframework.com/doc-2.0/ext-faker-index.html
- 欲了解更多关于原始库的信息,参考:
- https://github.com/fzaninotto/Faker
- 第十一章,测试
