網頁

2014年1月22日 星期三

WordPress開發筆記-使用Selenium測試的第一步

WordPress開發筆記-一個簡單的WordPress Plugin Unit Test這篇寫的是TDD(Test Deriven Develpment),另有一種是BDD(Behavior Deriven Develpment),這次來寫寫BDD的測試。

查了不少資料,看起來都是指向Selenium,另外有Behavior,但看來是給Python用,不知道還有沒有其他的,不過也不想再花時間找了,這邊一樣以WordPress當例子,但只會介紹到環境建好,剩下的就像是在開發WordPress的流程,就由看倌再自己找囉~

開始之前可以先看看這影片How to Use Selenium 2 With PHPUnit

Step1 安裝Selenium2 Server及phpunit/PHPUnit_Selenium套件

http://phpunit.de/manual/3.7/en/selenium.html可以找到下載點,如下:

點選"Selenium Server"後,再點選紅框部分,就可以取得jar檔。

執行底下指令將jar檔移到/usr/local及啟動(PS. 在影片中是移到/usr/local/bin,但在mac中,那邊是只有root可以執行的,有點麻煩)
$ sudo mv selenium-server-standalone-2.39.0.jar /usr/local
$ java -jar /usr/local/selenium-server-standalone-2.39.0.jar

接下安裝phpunit/PHPUnit_Selenium,若沒有裝過PHPUnit可以參考PHPUnit學習筆記-PHPUnit安裝(使用PEAR),另外文中提及安裝PHPUnit_Selenium,指令如下
$sudo pear install phpunit/PHPUnit_Selenium

若沒有成功,可能是沒有找到,可以先下底下指令,再執行剛才的指令
$sudo pear channel-discover pear.symfony-project.com 
$sudo pear channel-discover pear.symfony.com

Step2. 安裝好一個WordPress
安裝WordPress的方式,這邊就不多說了,大概流程如下:
下載WordPress繁中版(這裡
-> 解開後直接放在自己目錄下的Sites,命名為wordpress
-> 建立Database
-> 設定wp-config.php
-> 開啟http://localhost/~alvin/wordpress,做初始設定,按下一步即可。
我這邊網誌是命為Hello WordPress,使用者admin,密碼1234。

Step3. 寫第一個測試
cd ~/Sites/
vim WpSeleniumTest.php
加入底下的程式
<?php
class WpSeleniumTest extends PHPUnit_Extensions_Selenium2TestCase
{
    protected function setUp()
    {
        $this->setHost('localhost');
        $this->setPort(4444);
        $this->setBrowser('firefox');
        $this->setBrowserUrl('http://localhost/wordpress/');
    }

    public function testTitle()
    {
        $this->url('http://localhost/~alvin/longda/');
        $this->assertRegExp('/Hello WordPress/i', $this->title());
    }
}
?>

執行
phpunit WpSeleniumTest.php

得到這結果

這邊就可以看到ok了,另外再測測登入的功能加入底下的程式
public function testLogin()
{
    $this->url('http://localhost/~alvin/wordpress/wp-login.php');
    $form = $this->byCssSelector('form');

    $action_page = $form->attribute('action');
    $this->assertStringEndsWith('wp-login.php',$action_page);
    $this->byId('user_login')->value('admin');
    $this->byId('user_pass')->value('1234');
    $form->submit();

    $this->url('http://localhost/~alvin/wordpress/wp-admin');
    $this->assertRegExp('/Hello WordPress/i',$this->title());
}

再度ok


當然也可以用別的帳密測測,會得到Fail,因為沒登入成功,我這邊是硬要它轉用wp-admin,因為title不是期望的,所以Fail。

PS. 命名php檔要注意,不能用"_"分隔,否則會被取代成"/",而造成找不到檔案。

Selenium預設是只支援FireFox,所以要支援其他browser要另外再安裝其他的WebDriver,可以仔細看看http://docs.seleniumhq.org/download/

感覺起來,用先用BDD建起一個期望的行為,再建立WordPress的function時,再用TDD的概念將每個function建起它的unit test,就可以建構完整的測試,之後修改就不怕會有side effect,當然超出預期的動作或結果也是會有的,但也可以藉此一個個補強囉

PS. 看到一篇文章不要盲目的 BDD / TDD,我對寫測試的看法,嗯~就看看囉!

參考網址:
Chapter 17. PHPUnit and Selenium
Selenium Downloads
https://github.com/stuartherbert/sublime-phpunit


沒有留言:

張貼留言