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:
<?php
namespace 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
- 第十一章,测试