使用 PHPUnit 和 Selenium 進行測試
適用于 PHP 的 NetBeans IDE 支持 PHPUnit 自動測試。通過 PHPUnit,NetBeans IDE 可為 PHP 提供代碼覆蓋率,這與 IDE 為 Python 和 Ruby 提供的代碼覆蓋率類似。測試輸出將顯示在功能豐富的輸出窗口中,該窗口與 IDE 的 JUnit、Ruby 和 Python 測試運行器所使用的輸出窗口相同。

NetBeans IDE 還支持將 Selenium 可移植測試框架與 PHPUnit 結合使用。Selenium 插件可以從更新中心獲取。安裝此插件會將 Selenium 服務器添加到 IDE 的已注冊服務器中,并將 Selenium 測試選項添加到 PHP 菜單。
目錄
要學習本教程,您需要具備以下軟件和資源。
軟件或資源 | 要求的版本 |
---|---|
NetBeans IDE | PHP 下載包 |
PHP 引擎,包括 PEAR | 版本 5。 |
Web 服務器 | 推薦使用 Apache HTTP Server 2.2。 |
PHP 調試器 | XDebug 2.0 或更高版本 |
PHPUnit | 版本 3.3.0 或更高版本。 |
安裝 PHPUnit
請按照 PHPUnit 文檔中 所述,使用 PEAR 安裝 PHPUnit。應安裝 PHPUnit 版本 3.3.0 或更高版本。無需任何特殊設置。安裝 PHPUnit 之后,NetBeans 便可識別它。請注意,您需要將 PEAR 隨 PHP 引擎一起安裝。另請注意,PHPUnit 文檔中指出 PHPUnit 通常會安裝到本地 PEAR 目錄。該文檔還給出了具體的路徑:/usr/lib/php/PHPUnit;但在適用于 Windows 的 XAMPP 上,此路徑為 XAMPP_HOME\php\PEAR\PHPUnit。
要檢查 NetBeans IDE 是否可識別您的 PHPUnit 安裝,請打開“工具”>“選項”(在 Mac 上,請打開“NetBeans 首選項”)并查看 "PHP" 窗口。PHPUnit 腳本的路徑應顯示在“PHPUnit 腳本”字段中。如果此處未顯示腳本路徑,請進行瀏覽以找到該路徑。

創建并運行 PHPUnit 測試
NetBeans IDE 可以對某個文件中的所有 PHP 類創建并運行 PHPUnit 測試。為確保測試生成器可以正常運行,請為 PHP 文件指定與該文件中的第一類相同的名稱。
為某個類創建并運行 PHPUnit 測試:
- 創建一個名為 Calculator 的 PHP 項目。在此項目中,創建一個名為 Calculator.php 的文件。在此文件中,鍵入或粘貼 PHPUnit 文檔的 "Skeleton Generator"(框架生成器)一章中所提供的 Calculator 類。
<?php class Calculator { public function add($a, $b) { return $a + $b; } } ?>
- 添加一個包含 @assert 標注以及一些樣例輸入和輸出的注釋塊。請注意,本示例中包括一個錯誤的斷言。
<?php class Calculator { /**
* @assert (0, 0) == 0 * @assert (0, 1) == 1 * @assert (1, 0) == 1 * @assert (1, 1) == 2 * @assert (1, 2) == 4 */ public function add($a, $b) { return $a + $b; }
} ?></pre></li>
- 在“項目”窗口中,右鍵單擊 "Calculator.php" 節點,然后選擇“工具”>“創建 PHPUnit 測試”。請注意,您可以在“源文件”節點的上下文菜單中為項目中的所有文件創建測試。
- 第一次創建測試時,將會打開一個對話框,詢問您要存儲測試文件的目錄。在本示例中,使用“瀏覽”功能創建了 tests 目錄。
- IDE 在一個名為 CalculatorTest.php 的文件中生成框架測試類,在“項目”窗口中會顯示該文件,并在編輯器中將其打開。
請注意,將為每個 @assert 標注創建一個測試。
/**
* Generated from @assert (1, 1) == 2. */ public function testAdd4() { $this->assertEquals( 2, $this->object->add(1, 1) ); }</pre></li>
- 您既可以測試單個文件,也可以測試整個項目。要測試項目,請右鍵單擊項目的父節點,然后選擇“測試”或按 Alt-F6 組合鍵。要測試 Calculator.php 文件,請右鍵單擊該文件的節點,然后選擇“測試”或按 Ctrl-F6 組合鍵。本示例只有一個文件,且該文件中只有一個類,因此兩種測試結果相同。IDE 會運行測試并在“測試結果”窗口中顯示結果。
測試結果的更詳細文本版本會顯示在“輸出”窗口中。
</ol>
- UI 窗格中失敗測試的樹條目所附帶的消息
- 右側窗格中的文本,其中包括指向失敗的測試代碼行的鏈接
- 將光標懸停在 UI 窗格中失敗的測試上時顯示的工具提示文本
- 重新運行測試按鈕
- 在顯示所有測試的結果和僅顯示失敗測試的結果之間進行切換的按鈕
- 導航至下一個測試結果的按鈕
,以及導航至上一個測試結果的按鈕
- 打開 Calculator.php,然后添加內容與 add 函數相同的 add2 函數。現在,Calculator 類將如下所示:
<?php class Calculator { /**
* @assert (0, 0) == 0 * @assert (0, 1) == 1 * @assert (1, 0) == 1 * @assert (1, 1) == 2 * @assert (1, 2) == 4 */ public function add($a, $b) { return $a + $b; } public function add2($a, $b) { return $a + $b; }
}
?></pre></li> </a> - 右鍵單擊項目節點。從上下文菜單中,選擇“代碼覆蓋率”>“收集并顯示代碼覆蓋率”。缺省情況下,“顯示編輯器欄”也會處于選定狀態。
- 現在,編輯器會在底部顯示代碼覆蓋率編輯器欄。由于尚未測試代碼覆蓋率,因此編輯器欄報告覆蓋率為 0%。(在單擊“清除”以清除測試結果后,編輯器欄也會顯示覆蓋率為 0%。)
- 單擊“測試”以測試打開的文件,或單擊“所有測試”以運行項目的所有測試。此時將顯示“測試結果”。此外,“代碼覆蓋率”欄會告知您測試所覆蓋的可執行代碼語句百分比。在編輯器窗口中,覆蓋的代碼將以綠色突出顯示,未覆蓋的代碼將以紅色突出顯示。
- 在編輯器欄中,單擊“報告...”。代碼覆蓋率報告打開,其中顯示了對項目運行的所有測試的結果。使用報告中的按鈕,您可以清除結果,再次運行所有測試或取消激活代碼覆蓋率(單擊“完成”)。
- 您可以在項目中添加其他類;刪除測試文件,然后重新創建測試文件;接下來,再次查看代碼覆蓋率報告。此時將會列出新類。在下面的報告中,Calculator 類又有一個函數未包括在測試中。
</ol>
- 引導文件
- XML 配置文件
- 測試套件
- 打開命令提示符,然后運行 pear install Testing_Selenium-beta 命令。您需要在 Path 變量中包含 PHP_HOME/php/PEAR。如果成功運行該命令,則將顯示以下提示:install ok: channel://pear.php.net/Testing_Selenium-0.4.3。
- 在 IDE 中,打開“工具”>“插件”,然后安裝 "Selenium Module for PHP"。
- 在“項目”窗口中,右鍵單擊 Calculator 項目的節點。選擇“新建”>“其他”。打開“新建文件”向導。選擇 "Selenium",然后單擊“下一步”。
- 第一次創建 Selenium 測試時,將會打開一個對話框,要求您設置 Selenium 測試文件的目錄。此目錄應不同于 PHPUnit 測試文件的目錄。否則,每次運行單元測試時,Selenium 測試都會運行。運行 Selenium 之類的功能測試通常比運行單元測試所花費的時間長,因此在每次運行單元測試時,您可能不會希望運行這些測試。
- 接受“名稱和位置”頁中的缺省設置,然后單擊“完成”。新 Selenium 測試文件在編輯器中打開,并在“項目”窗口中顯示。
- 現在,“運行 Selenium 測試”項已添加到項目的上下文菜單中。單擊此項,Selenium 測試結果隨即顯示在與 PHPUnit 測試相同的“測試結果”窗口中。
- 在 Calculator.php 中添加第二個類,如將 $a 與 $b 相乘的 Calculator2 類。刪除測試,然后重新生成測試。 如果嘗試學習包含多個部分的 創建 CRUD 應用程序教程,請為最終項目創建 Selenium 測試
測試結果和 IDE 輸出
PHPUnit 測試的結果會顯示在 IDE 的“測試結果”和“輸出”兩個窗口中。“測試結果”窗口包含一個圖形窗格和一個簡短文本窗格。“輸出”窗口提供了輸出的更詳細文本版本。在此部分,您將詳細了解“測試結果”窗口和“輸出”窗口。
在“測試結果”窗口中,您可以從下列位置獲取有關失敗的測試的信息:

“測試結果”窗口在左側包括以下按鈕:
“輸出”窗口顯示 PHPUnit 腳本的完整輸出。當您無法通過“測試結果”窗口中的信息找出錯誤原因時,該窗口會非常有用。與“測試結果”窗口類似,“輸出”窗口包括指向失敗的測試類行 的鏈接。此外,該窗口還在左側包括用于重新運行測試的按鈕以及用于打開 PHP 選項窗口的按鈕。

代碼覆蓋率
適用于 PHP 的 NetBeans IDE 提供了代碼覆蓋率以及 PHPUnit 支持。(IDE 也為 Ruby 和 Python 提供了代碼覆蓋率)。代碼覆蓋率檢查 PHPUnit 測試是否覆蓋了所有方法。在此部分,您將了解如何通過現有 Calculator 類來使用代碼覆蓋率。
使用代碼覆蓋率:
使用項目特定的配置
在 IDE 中,可以為項目選擇以下定制配置:
要設置項目特定的配置,請右鍵單擊項目節點或項目的“測試文件”節點,然后選擇“屬性”。這會打開“屬性”對話框。然后選擇 PHPUnit 類別。打開一個對話框,可以在其中選擇定制引導、XML 配置或測試套件文件。如果您不熟悉這些文件的結構,可以使用 NetBeans IDE 生成框架。

使用定制類加載器的項目需要引導選項,例如,通過實現 Magic 函數 __autoload()。如果需要預先包含一個文件(如定義項目中的多個類所使用的全局常量的文件),則也需要使用引導選項。
可通過 XML 配置文件定義命令行調用中使用的選項。PHPUnit 手冊中提供了完整的介紹。還可以使用 XML 配置文件為測試用例定義 php.ini 設置和全局變量。也可以在 XML 配置文件中設置引導選項。
如果設置定制測試套件,每次選擇“運行”>“測試項目”時,都會運行該套件。如果要僅運行一部分測試,或者要使用最近添加(必須手動添加)的 PHPUnit 功能(如數據提供器),該功能特別有用。
請注意,您可以根據需要定義多個測試套件,并通過在項目資源管理器中右鍵單擊文件并選擇“運行”來分別運行這些套件。
為防止造成混亂,NetBeans 會通知您是否使用定制測試套件。可以在“測試結果”和“輸出”窗口中找到通知。
在 Selenium 框架上運行測試
Selenium 是一種測試 Web 應用程序框架的可移植軟件。這些測試可以編寫為 HTML 表,或以各種常用的編程語言進行編碼,并且可以直接在目前的多數 Web 瀏覽器中運行。Selenium 可以部署在 Windows、Linux 和 Macintosh 上。有關更多詳細信息,請參見 Selenium Web 站點。
NetBeans IDE 具有包含 Selenium 服務器的插件。通過此插件,您可以對 PHP、Web 應用程序或 Maven 項目運行 Selenium 測試。要對 PHP 運行 Selenium 測試,需要將 Testing Selenium 軟件包安裝到 PHP 引擎。
對 PHP 運行 Selenium 測試:
更多練習
下面是供您探討的更多思路:
文章出處: http://netbeans.org/kb/docs/php/phpunit_zh_CN.html