脚本命令的使用

自动化是提升开发效率的一个有效途径。PhalApi致力于简单的接口服务开发,同时也致力于通过自动化提升项目的开发速度。为此,生成单元测试骨架代码、生成数据库建表SQL这些脚本命令。应用这些脚本命令,能快速完成重复但消耗时间的工作。下面将分别进行说明。

phalapi-buildtest命令

当需要对某个类进行单元测试时,可使用phalapi-buildtest命令生成对应的单元测试骨架代码,其使用说明如下:

3.3 脚本命令 - 图1

其中,

  • 第一个参数file_path 是待测试的源文件相对/绝对路径 。
  • 第二个参数class_name 是待测试的类名。
  • 第三个参数bootstrap 是测试启动文件,通常是/path/to/phalapi/tests/bootstrap.php文件。
  • 第四个参数author 你的名字,默认是dogstar。
    通常,可以先写好类名以及相应的接口,然后再使用此脚本生成单元测试骨架代码。以默认接口服务Site.Index接口服务为例,当需要为其生成单元测试骨架代码时,可以执行以下命令。
  1. $ ./bin/phalapi-buildtest ./src/app/Api/Site.php App\\Api\\Site > ./tests/app/Api/Site_Test.php

最后,需要将生成好的骨架代码,重定向保存到你要保存的位置。通常与产品代码对齐,并以“{类名} + _Test.php”方式命名,如这里的app/Api/Site_Test.php。

生成的骨架代码类似如下:

  1. <?php
  2. //require_once dirname(__FILE__) . '/bootstrap.php';
  3. if (!class_exists('App\\Api\\Site')) {
  4. require dirname(__FILE__) . '/./src/app/Api/Site.php';
  5. }
  6. /**
  7. * PhpUnderControl_App\Api\Site_Test
  8. *
  9. * 针对 ./src/app/Api/Site.php App\Api\Site 类的PHPUnit单元测试
  10. *
  11. * @author: dogstar 20170725
  12. */
  13. class PhpUnderControl_AppApiSite_Test extends \PHPUnit_Framework_TestCase
  14. {
  15. public $appApiSite;
  16. protected function setUp()
  17. {
  18. parent::setUp();
  19. $this->appApiSite = new App\Api\Site();
  20. }
  21. ... ...

简单修改后,便可运行。

phalapi-buildsqls命令

当需要创建数据库表时,可以使用phalapi-buildsqls脚本命令,再结合数据库配置文件./config/dbs.php即可生成建表SQL语句。此命令在创建分表时尤其有用,其使用如下:

3.3 脚本命令 - 图2

其中,

  • 第一个参数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字段外的其他建表语句保存到该文件。

  1. `user_id` bigint(20) DEFAULT '0' COMMENT '用户id',
  2. `token` varchar(64) DEFAULT '' COMMENT '登录token',
  3. `client` varchar(32) DEFAULT '' COMMENT '客户端来源',
  4. `times` int(6) DEFAULT '0' COMMENT '登录次数',
  5. `login_time` int(11) DEFAULT '0' COMMENT '登录时间',
  6. `expires_time` int(11) DEFAULT '0' COMMENT '过期时间',

然后,进入到项目根目录,执行命令:

  1. $ php ./bin/phalapi-buildsqls ./config/dbs.php user_session

正常情况下,会看到生成好的SQL语句,类似下面这样的输出。

  1. CREATE TABLE `phalapi_user_session_0` (
  2. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  3. `user_id` bigint(20) DEFAULT '0' COMMENT '用户id',
  4. `token` varchar(64) DEFAULT '' COMMENT '登录token',
  5. `client` varchar(32) DEFAULT '' COMMENT '客户端来源',
  6. `times` int(6) DEFAULT '0' COMMENT '登录次数',
  7. `login_time` int(11) DEFAULT '0' COMMENT '登录时间',
  8. `expires_time` int(11) DEFAULT '0' COMMENT '过期时间',
  9. `ext_data` text COMMENT 'json data here',
  10. PRIMARY KEY (`id`)
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  12. CREATE TABLE `phalapi_user_session_1` (
  13. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  14. ... ...
  15. `ext_data` text COMMENT 'json data here',
  16. PRIMARY KEY (`id`)
  17. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  18. CREATE TABLE `phalapi_user_session_2` ... ...
  19. CREATE TABLE `phalapi_user_session_3` ... ...
  20. CREATE TABLE `phalapi_user_session_4` ... ...
  21. CREATE TABLE `phalapi_user_session_5` ... ...
  22. CREATE TABLE `phalapi_user_session_6` ... ...
  23. CREATE TABLE `phalapi_user_session_7` ... ...
  24. CREATE TABLE `phalapi_user_session_8` ... ...
  25. CREATE TABLE `phalapi_user_session_9` ... ...

最后,便可把生成好的SQL语句,导入到数据库,完成建表的操作。

值得注意的是,生成的SQL建表语句默认会带有自增ID主键id和扩展字段ext_data这两个字段。所以保存在./data目录下的建表语句可省略主键字段,以免重复。

  1. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  2. ... ...
  3. `ext_data` text COMMENT 'json data here',

注意事项

在使用这些脚本命令前,需要注意以下几点。

执行权限

第一点是执行权限,当未设置执行权限时,脚本命令会提示无执行权限,类似这样。

  1. $ ./phalapi/bin/phalapi-buildtest
  2. -bash: ./phalapi/bin/phalapi-buildtest: Permission denied

那么需要这样设置脚本命令的执行权限。

  1. $ chmod +x ./phalapi/bin/phalapi-build*

编码问题

其次,对于Linux平台,可能会存在编码问题,例如提示:

  1. $ ./phalapi/bin/phalapi-buildtest
  2. bash: ./phalapi/bin/phalapi-buildtest: /bin/bash^M: bad interpreter: No such file or directory

这时,可使用dos2unix命令转换一下编码。

  1. $ dos2unix ./phalapi/bin/phalapi-buildtest*
  2. dos2unix: converting file ./phalapi/bin/phalapi-buildsqls to Unix format ...
  3. dos2unix: converting file ./phalapi/bin/phalapi-buildtest to Unix format ...

软链

最后一点是,在任意目录位置都是可以使用这些命令的,但会与所在的项目目录绑定。通常,为了更方便使用这些命令,可以将这些命令软链到系统命令下。例如:

  1. $ sudo ln -s /path/to/phalapi/bin/phalapi-buildsqls /usr/bin/phalapi-buildsqls
  2. $ sudo ln -s /path/to/phalapi/bin/phalapi-buildtest /usr/bin/phalapi-buildtest

原文: http://docs.phalapi.net/#/v2.0/shell