🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 脚本命令的使用 自动化是提升开发效率的一个有效途径。PhalApi致力于简单的接口服务开发,同时也致力于通过自动化提升项目的开发速度。为此,生成单元测试骨架代码、生成数据库建表SQL这些脚本命令。应用这些脚本命令,能快速完成重复但消耗时间的工作。下面将分别进行说明。 ## phalapi-buildtest命令 当需要对某个类进行单元测试时,可使用phalapi-buildtest命令生成对应的单元测试骨架代码,其使用说明如下: ![](http://7xiz2f.com1.z0.glb.clouddn.com/20170725232117_3fb828887ae30e22c8d4f02aa5d9aa26) 其中, + **第一个参数file_path** 是待测试的源文件相对/绝对路径 。 + **第二个参数class_name** 是待测试的类名。 + **第三个参数bootstrap** 是测试启动文件,通常是/path/to/phalapi/tests/bootstrap.php文件。 + **第四个参数author** 你的名字,默认是dogstar。 通常,可以先写好类名以及相应的接口,然后再使用此脚本生成单元测试骨架代码。以默认接口服务```Site.Index```接口服务为例,当需要为其生成单元测试骨架代码时,可以执行以下命令。 ```bash $ ./bin/phalapi-buildtest ./src/app/Api/Site.php App\\Api\\Site > ./tests/app/Api/Site_Test.php ``` 最后,需要将生成好的骨架代码,重定向保存到你要保存的位置。通常与产品代码对齐,并以“{类名} + _Test.php”方式命名,如这里的app/Api/Site_Test.php。 生成的骨架代码类似如下: ```php <?php //require_once dirname(__FILE__) . '/bootstrap.php'; if (!class_exists('App\\Api\\Site')) { require dirname(__FILE__) . '/./src/app/Api/Site.php'; } /** * PhpUnderControl_App\Api\Site_Test * * 针对 ./src/app/Api/Site.php App\Api\Site 类的PHPUnit单元测试 * * @author: dogstar 20170725 */ class PhpUnderControl_AppApiSite_Test extends \PHPUnit_Framework_TestCase { public $appApiSite; protected function setUp() { parent::setUp(); $this->appApiSite = new App\Api\Site(); } ... ... ``` 简单修改后,便可运行。 ## phalapi-buildsqls命令 当需要创建数据库表时,可以使用phalapi-buildsqls脚本命令,再结合数据库配置文件./config/dbs.php即可生成建表SQL语句。此命令在创建分表时尤其有用,其使用如下: ![](http://7xiz2f.com1.z0.glb.clouddn.com/20170725232919_e6d034485ed2c5f208d6e5b6c34ae555) 其中, + **第一个参数dbs_config** 是指向数据库配置文件的路径,如./Config/dbs.php,可以使用相对路径。 + **第二个参数table** 是需要创建sql的表名,每次生成只支持一个。 + **第三个参数engine** 可选参数,是指数据库表的引擎,MySQL可以是:Innodb或者MyISAM。 + **第四个参数sqls_folder** 可选参数,SQL文件的目录路径。 在执行此命令先,需要提前先将建表的SQL语句,排除除主键id和ext_data字段,放置到./data目录下,文件名为:{表名}.sql。 例如,我们需要生成10张user_session用户会话分表的建表语句,那么需要先添加数据文件./data/user_session.sql,并将除主键id和ext_data字段外的其他建表语句保存到该文件。 ```sql `user_id` bigint(20) DEFAULT '0' COMMENT '用户id', `token` varchar(64) DEFAULT '' COMMENT '登录token', `client` varchar(32) DEFAULT '' COMMENT '客户端来源', `times` int(6) DEFAULT '0' COMMENT '登录次数', `login_time` int(11) DEFAULT '0' COMMENT '登录时间', `expires_time` int(11) DEFAULT '0' COMMENT '过期时间', ``` 然后,进入到项目根目录,执行命令: ```bash $ php ./bin/phalapi-buildsqls ./config/dbs.php user_session ``` 正常情况下,会看到生成好的SQL语句,类似下面这样的输出。 ```sql CREATE TABLE `phalapi_user_session_0` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `user_id` bigint(20) DEFAULT '0' COMMENT '用户id', `token` varchar(64) DEFAULT '' COMMENT '登录token', `client` varchar(32) DEFAULT '' COMMENT '客户端来源', `times` int(6) DEFAULT '0' COMMENT '登录次数', `login_time` int(11) DEFAULT '0' COMMENT '登录时间', `expires_time` int(11) DEFAULT '0' COMMENT '过期时间', `ext_data` text COMMENT 'json data here', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `phalapi_user_session_1` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, ... ... `ext_data` text COMMENT 'json data here', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `phalapi_user_session_2` ... ... CREATE TABLE `phalapi_user_session_3` ... ... CREATE TABLE `phalapi_user_session_4` ... ... CREATE TABLE `phalapi_user_session_5` ... ... CREATE TABLE `phalapi_user_session_6` ... ... CREATE TABLE `phalapi_user_session_7` ... ... CREATE TABLE `phalapi_user_session_8` ... ... CREATE TABLE `phalapi_user_session_9` ... ... ``` 最后,便可把生成好的SQL语句,导入到数据库,完成建表的操作。 值得注意的是,生成的SQL建表语句默认会带有自增ID主键id和扩展字段ext_data这两个字段。所以保存在./data目录下的建表语句可省略主键字段,以免重复。 ```sql `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, ... ... `ext_data` text COMMENT 'json data here', ``` ## 注意事项 在使用这些脚本命令前,需要注意以下几点。 ### 执行权限 第一点是执行权限,当未设置执行权限时,脚本命令会提示无执行权限,类似这样。 ```bash $ ./phalapi/bin/phalapi-buildtest -bash: ./phalapi/bin/phalapi-buildtest: Permission denied ``` 那么需要这样设置脚本命令的执行权限。 ```bash $ chmod +x ./phalapi/bin/phalapi-build* ``` ### 编码问题 其次,对于Linux平台,可能会存在编码问题,例如提示: ```bash $ ./phalapi/bin/phalapi-buildtest bash: ./phalapi/bin/phalapi-buildtest: /bin/bash^M: bad interpreter: No such file or directory ``` 这时,可使用dos2unix命令转换一下编码。 ```bash $ dos2unix ./phalapi/bin/phalapi-buildtest* dos2unix: converting file ./phalapi/bin/phalapi-buildsqls to Unix format ... dos2unix: converting file ./phalapi/bin/phalapi-buildtest to Unix format ... ``` ### 软链 最后一点是,在任意目录位置都是可以使用这些命令的,但会与所在的项目目录绑定。通常,为了更方便使用这些命令,可以将这些命令软链到系统命令下。例如: ```bash $ sudo ln -s /path/to/phalapi/bin/phalapi-buildsqls /usr/bin/phalapi-buildsqls $ sudo ln -s /path/to/phalapi/bin/phalapi-buildtest /usr/bin/phalapi-buildtest ```