在閱讀本章節之前, 強烈推薦你先閱讀Selenium文檔和 PHPUnit文檔. 下面我們簡要概述在Yii框架中編寫功能測試的基本原則:
和單元測試以繼承子自CWebTestCase的XyzTest類別的形式編寫, 其中 Xyz
代表被測試的類別. 由於 PHPUnit_Extensions_SeleniumTestCase
是CWebTestCase的祖先類別, 我們可以從這個類別中繼承.以XyzTest.php的形式保存在PHP檔案中.方便起見, 功能測試檔案通常保存在
測試類別主要包含一系列命名為testAbc 其中的測試方法,
.測試方法包含一系列的測試方法中包含一系列的用於測試RC Selenium RC 和web應用程式之間進行互動的命令語句. 它還包含用於確認我們所期望的web應用回复的斷言語句.
在描述如何寫一個功能測試之前, 我們先看看通過yiic webapp命令自動產生的
WebTestCase.php<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">define('TEST_BASE_URL','http://localhost/yii/demos/blog/index-test.php/');
class WebTestCase extends CWebTestCase
{
/**
* Sets up before each test method runs.
* This mainly sets the base URL for the test application.
*/
protected function setUp()
{
parent::setUp();
$this->setBrowserUrl(TEST_BASE_URL);
}
......
}</pre><div class="contentsignin">登入後複製</div></div>
主要設定了測試頁面的根URL,後面在測試方法中我們可以使用相對要測試方法頁面。
我們還要注意,在測試根URL中, 使用了 index-test.php
作為入口腳本而不是
. 兩者之間的唯一不同就是前者使用test.php作為應用配置文件,而後者使用的是 main.php
.現在我們開始講述測試在blog演示中如何測試顯示一篇文章這一功能特性. 首先編寫如寫的測試類, 注意測試類繼承自我們上面所述的基類WebTestCase:
class PostTest extends WebTestCase { public $fixtures=array( 'posts'=>'Post', ); public function testShow() { $this->open('post/1'); // verify the sample post title exists $this->assertTextPresent($this->posts['sample1']['title']); // verify comment form exists $this->assertTextPresent('Leave a Comment'); } ...... }
和寫單元測試一樣,我們首先聲明了本測試所用到的特定狀態( fixtures).這裡我們指定使用
Post在 fixture.howS. , 我們先使用Selenium RC 打開URL
post/1.注意這是一個相對URL, 完整的URL 是拼接了基類中的根URL (i.e. http://www.php.cn/
). 然後我們驗證是否可以在目前頁面中找到sample1
post 的title. 我們也可以驗證這個頁面是否包含文字 Leave a Comment
.Tip:
在執行功能測試之前啟動. 這可以透過在你的Selenium server安裝目錄下執行指令
來實現。 以上就是Yii框架官方指南系列增補版40——測試:功能測試(Functional Testing )的內容,更多相關內容請關注PHPcn網(www.php.cn)!