CodeCeption是一個全棧的PHP測試框架,關於CodeCeption的介紹見:CodeCeption官方文檔。php
Yii2官方增長了對CodeCeption的支持,這裏主要講解Yii2裏如何基於CodeCeption進行單元測試和功能測試。html
執行後面操做的前提是本地已經正確安裝配置composer。git
經過Composer,咱們能夠很簡單的在本地基於腳手架建立一個Yii2項目:github
cd <webroot>
composer global require "fxp/composer-asset-plugin:~1.0.0"
命令驗證必須插件是否全局安裝composer create-project yiisoft/yii2-app-basic basic
命令在當前目錄的basic目錄建立一個」yiisoft/yii2-app/basic」腳手架項目。注意,若是是本地開發環境,你也能夠增長--prefer-dist --stability=dev
選項,參考stability選項,這樣,composer會到github上拉取最新的開發包下來。經過以上操做,你的本地目錄應該大體以下:web
webroot/basic |--- assets/ |--- commands/ |--- config/ |--- controllers/ |--- mail/ |--- models/ |--- runtime/ |--- tests/ |--- vendor/ |--- views/ |--- web/ |--- .gitignore |--- composer.json |--- composer.lock ...
其中,tests就是框架默認建立的測試代碼目錄,裏面有框架提供的一些測試的例子,你能夠按以下步驟測試一下:json
cd basic/tests/
進入CodeCeption測試用例所在目錄codecept build
將構建測試用例(根據cept生成tester)codecept run
運行測試用例若是你終端提示codecept命令未知,請執行如下命令安裝codeception擴展:bootstrap
composer global require "codeception/codeception=2.0.*" composer global require "codeception/specify=*" composer global require "codeception/verify=*" composer require --dev yiisoft/yii2-faker:*
正常安裝後,再執行codecept run
時,若是看到相似以下的報錯:swift
1) Failed to ensure that about works in [1mAboutCept[22m (D:\php\basic\tests\codeception\acceptance\AboutCept.php) Can't be on page "/index-test.php?r=site%2Fabout": GuzzleHttp\Exception\ConnectException: cURL error 7: Failed to connect to localhost port 8080: Connection refused
提示在xx端口鏈接拒絕,這裏,咱們須要修改一下配置文件:服務器
basic/tests/codeception.yml
裏面的config/test_entry_url
配置,爲你實際的項目入口地址basic/tests/codeception/acceptance.suite.yml
裏面的modules/config/PhpBrowser
配置爲你實際的地址完成後,再執行codecept run
,你應該能夠看到終端沒有報錯了。yii2
咱們來看看tests目錄的結構:
webroot/basic/tests |--- codeception/ | |--- _output/ | |--- _pages/ | |--- acceptance/ | |--- bin/ | |--- config/ | |--- fixtures/ | |--- functional/ | |--- templates/ | |--- unit | |--- _bootstrap.php | |--- acceptance.suite.yml | |--- functional.suite.yml | |--- unit.suite.yml |--- codeception.yml
其實,這裏acceptance、functional、unit是Yii2默認爲咱們建立的三個suite,顧名思義,分別用於驗收,功能,單元測試。
而執行codecept run
時,會依次將codeception目錄的全部suite運行,故,你能夠經過codecept run suitename
的方式制定執行某個suite;同理,能夠執行codecept run suitename testname
的方式執行某個test。
你能夠仿照functional,unit,acceptance裏面的例子寫你本身的測試用例。
注:經過腳手架建立的Yii2項目會自動增長gitignore,將vendor中的內容從版本庫中忽略,若是你須要提交,請手動修改gitignore文件。
對於一個已有的Yii2項目,咱們須要遵循以下幾步來配置CodeCeption。
composer init
來初始化composer。composer global require "codeception/codeception=2.0.*"
composer global require "codeception/specify=*"
composer global require "codeception/verify=*"
composer require --dev yiisoft/yii2-faker:*
codecept bootstrap
來初始化生成測試代碼腳手架。具體的配置內容依實際狀況而定,具體能夠參考yii2-app-basic提供的例子。
前面所述,經過腳手架建立yii2-app-basic開發環境後,咱們的代碼目錄結構爲:
webroot/basic |--- assets/ |--- commands/ |--- config/ |--- controllers/ |--- mail/ |--- models/ |--- runtime/ |--- tests/ |--- vendor/ |--- views/ |--- web/ |--- .gitignore |--- composer.json |--- composer.lock ...
這個結構是Yii2默認建立的目錄,咱們能夠看到它並無安裝module進行劃分。咱們能夠對其進行調整:
按照以上步驟調整後的路徑以下:
webroot/basic |--- assets/ |--- commands/ |--- config/ |--- modules/ | |--- demo/ | | |--- controllers/ | | |--- views/ | | |--- models/ | |--- ... |--- mail/ |--- runtime/ |--- tests/ |--- vendor/ |--- web/ |--- .gitignore |--- composer.json |--- composer.lock ...
各文件的內容以下:
<?php /** * Module.php * * @author fangliang * @create_time 2015-06-16 */ namespace modules\demo; class Module extends \yii\base\Module { public $layout = "main"; public $controllerNamespace = 'modules\demo\controllers'; public function init() { parent::init(); //do something init here } }
<?php // comment out the following two lines when deployed to production defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev'); require(__DIR__ . '/../vendor/autoload.php'); require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); $config = require(__DIR__ . '/../config/web.php'); Yii::setAlias("@modules",dirname(__DIR__) .'/modules' ); (new yii\web\Application($config))->run();
<?php $params = require(__DIR__ . '/params.php'); $config = [ 'id' => 'basic', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'], 'components' => [ 'request' => [ // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation 'cookieValidationKey' => '0_wkmOLxql9rlIaqjYNPFL3pYDfLNuLk', ], 'cache' => [ 'class' => 'yii\caching\FileCache', ], 'user' => [ 'identityClass' => 'modules\demo\models\User', 'enableAutoLogin' => true, ], 'errorHandler' => [ 'errorAction' => 'demo/site/error', ], 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', // send all mails to a file by default. You have to set // 'useFileTransport' to false and configure a transport // for the mailer to send real emails. 'useFileTransport' => true, ], 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], ], ], ], 'db' => require(__DIR__ . '/db.php'), ], 'params' => $params, 'modules'=> require(__DIR__.'/modules.php'), ]; if (YII_ENV_DEV) { // configuration adjustments for 'dev' environment $config['bootstrap'][] = 'debug'; $config['modules']['debug'] = 'yii\debug\Module'; $config['bootstrap'][] = 'gii'; $config['modules']['gii'] = 'yii\gii\Module'; } return $config;
<?php return [ 'demo' =>[ 'class'=>'modules\demo\Module', ] ];
在完成以上的配置後,基本的配置就完成了。
若是是一個全新的項目,你能夠直接fork個人這個腳手架:Yii2模塊化Web應用腳手架。