自動化是提升開發(fā)效率的一個有效途徑。PhalApi致力于簡單的接口服務開發(fā),同時也致力于通過自動化提升項目的開發(fā)速度。為此,生成單元測試骨架代碼、生成數據庫建表SQL這些腳本命令。應用這些腳本命令,能快速完成重復但消耗時間的工作。下面將分別進行說明。
當需要對某個類進行單元測試時,可使用phalapi-buildtest命令生成對應的單元測試骨架代碼,其使用說明如下:
其中,
第四個參數author 你的名字,默認是dogstar。
通常,可以先寫好類名以及相應的接口,然后再使用此腳本生成單元測試骨架代碼。以默認接口服務Site.Index
接口服務為例,當需要為其生成單元測試骨架代碼時,可以執(zhí)行以下命令。
$ ./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
//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();
}
... ...
簡單修改后,便可運行。
當需要創(chuàng)建數據庫表時,可以使用phalapi-buildsqls腳本命令,再結合數據庫配置文件./config/dbs.php即可生成建表SQL語句。此命令在創(chuàng)建分表時尤其有用,其使用如下:
其中,
第四個參數sqls_folder 可選參數,SQL文件的目錄路徑。
在執(zhí)行此命令先,需要提前先將建表的SQL語句,排除除主鍵id和ext_data字段,放置到./data目錄下,文件名為:{表名}.sql。
例如,我們需要生成10張user_session用戶會話分表的建表語句,那么需要先添加數據文件./data/user_session.sql,并將除主鍵id和ext_data字段外的其他建表語句保存到該文件。
`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 '過期時間',
然后,進入到項目根目錄,執(zhí)行命令:
$ php ./bin/phalapi-buildsqls ./config/dbs.php user_session
正常情況下,會看到生成好的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',
在使用這些腳本命令前,需要注意以下幾點。
第一點是執(zhí)行權限,當未設置執(zhí)行權限時,腳本命令會提示無執(zhí)行權限,類似這樣。
$ ./phalapi/bin/phalapi-buildtest
-bash: ./phalapi/bin/phalapi-buildtest: Permission denied
那么需要這樣設置腳本命令的執(zhí)行權限。
$ chmod +x ./phalapi/bin/phalapi-build*
其次,對于Linux平臺,可能會存在編碼問題,例如提示:
$ ./phalapi/bin/phalapi-buildtest
bash: ./phalapi/bin/phalapi-buildtest: /bin/bash^M: bad interpreter: No such file or directory
這時,可使用dos2unix命令轉換一下編碼。
$ 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 ...
最后一點是,在任意目錄位置都是可以使用這些命令的,但會與所在的項目目錄綁定。通常,為了更方便使用這些命令,可以將這些命令軟鏈到系統(tǒng)命令下。例如:
$ 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
更多建議: