其中需要部署的模塊名為BankAccount,動作為test,使用測試工具
為phpunit,所有的測試用例文件為*Test.php。
如果一切正常,使用Phing部署后可以得到類似下面的結果:
phing
Buildfile: /home/sb/build.xml
BankAccount > test:
[phpunit] Tests run: 4, Failures: 0, Errors: 0, Time elapsed: 0.00067 sec
BUILD FINISHED
Total time: 0.0960 seconds
當然,如果
build失敗則你應該根據測試失敗的提示來debug你的程序。
結合Selenium做大型自動化集成測試
前述的測試都是單元測試,測試的輸入都是基於變數和類,而非基於用
戶行為,例如瀏覽器的點擊。在軟體工程定義中,
集成測試是在單元測試之
后的更高級別的測試,用PHPUnit作基於瀏覽器的自動化集成測試需要
Selenium的支持。Selenium是一
個完整基於瀏覽器做集成測試的框架。它通過在頁面中嵌入
js來模擬用戶
行為。Selenium的經典架構如圖:
可以看出,我們需要一個額外的Selenium Server來負責轉發HTTP請求和執行用戶動作。除此之外,剩下的就是在利用Selenium RC For PHP編寫測試用例。PHPUnit集成了Selenium的API介面,通過直接調用Selenium的API即可完成測試動作和結果驗證,一個典型的測試如下:
可以看出,測試用例書寫方法並沒有很大的,然後在
表單q中提交查詢
hello world並點擊,最後等待頁面load完畢后校驗新的url中是否包含/Google Search/。
當然,Selenium還提供了更為豐富的API,例如驗證某個表單的值等等。
PHPUnit已經受到了
Zend官方和社區的大力支持。最新版本3.1.8已於9月初發布,不僅修正bug,還對mock object,日誌和測試用例框架生成做了更進一步的支持。同時,它也將更容易和PHP的其他優秀工具進行整合來完成更為複雜的任務,詳見:
PHPUnit能給我們帶來什麼?
單元測試在現代軟體開發過程中佔據著愈發重要的地位,尤其是敏捷開發。所以,高質量的單元測試是保證項目質量的基礎。
單元測試也為以後的開發提供支緩。就算是開發後期,我們也可以輕鬆的增加功能或更改程序結構,而不用擔心這個過程中會破壞重要的東西。而且它為代碼的重構提供了保障。這樣,我們就可以更自由的對程序進行改進。
同時,編寫單元測試將使我們從調用者觀察、思考。特別是先寫測試(test-first),迫使我們把程序設計成易於調用和可測試的,即迫使我們解除軟體中的
耦合。
然後,單元測試是一種無價的文檔,它是展示函數或類如何使用的最佳文檔。這份文檔是可編譯、可運行的,並且它保持最新,永遠與代碼同步。
最後,自動化的單元測試避免了代碼出現回歸,編寫完成之後,可以隨時隨地的快速運行測試。
在用PHPUnit做單元測試時,我們可以借鑒先寫測試和測試驅動編碼的思想,將代碼編寫的更加模塊化,減少耦合,並且以完成實際功能為目標。這樣的代碼將會有更高的可測性,會大大提高我們的測試效率。
1. 利用PHPUnit進行Debug,完成單元自測;
3. 獲得測試用例的代碼覆蓋率並規定一個
閾值(75%?),低於閾值的測試用例不能通過單元測試;
4. 通過QA的反饋改進RD的測試用例;
5. 結合Phing在部署新環境時利用PHPUnit驗證代碼在新環境下的正確性;
6. 結合Selenium做大規模的自動化集成測試,提高提測代碼質量;
另外,按照軟體工程定義的測試用例設計經驗,測試代碼應該是程序代碼量的1.2-1.5倍。雖然初期編寫有一定的代價,但和帶來的效用還是沒有可比性的。
1. 通過閱讀RD的測試用例設計來更進一步了解項目設計和功能;
2. 通過QA的角度向RD反饋測試用例設計中的缺陷;
3. 自行編寫測試用例進行測試;
運行 pear channel-discover pear;
pear install phpunit/PHPUnit
方法二 手動安裝
2. 把解壓后的目錄加入php.ini中的include_path;
3. 將腳本pear-phpunit改名為phpunit;
4. 將phpunit腳本中的@php_bin@替換成php可執行腳本的路徑;
5. 為phpunit腳本增加可執行許可權並加入$PATH;
6. 將PHPUnit/Runner/Version.php中的@package_version@替換成3位PHPUnit版本號。