使用 PHPUnit 和 Selenium 進行測試

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

NetBeans IDE 還支持將 Selenium 可移植測試框架與 PHPUnit 結合使用。Selenium 插件能夠從更新中心獲取。安裝此插件會將 Selenium 服務器添加到 IDE 的已註冊服務器中,並將 Selenium 測試選項添加到 PHP 菜單。html

目錄編程

此頁上的內容適用於 NetBeans IDE 7.二、7.三、7.4 和 8.0

要學習本教程,您須要具有如下軟件和資源。windows

軟件或資源 要求的版本
NetBeans IDE PHP 下載包
PHP 引擎,包括 PEAR 版本 5。
Web 服務器 推薦使用 Apache HTTP Server 2.2。
PHPUnit 版本 3.4.0 或更高版本。
PHPUnit 的框架生成器 做爲 PHPUnit 的版本。

安裝 PHPUnit

使用 PEAR 安裝 PHPUnit(如 PHPUnit 文檔中所述)和 PHPUnit 的框架生成器(如框架生成器文檔中所述)。應安裝 PHPUnit 版本 3.4.0 或更高版本。無需任何特殊設置。安裝 PHPUnit 以後,NetBeans 即可識別它。請注意,您須要將 PEAR 隨 PHP 引擎一塊兒安裝。另請注意,PHPUnit 文檔中指出 PHPUnit 一般會安裝到本地 PEAR 目錄。該文檔還給出了具體的路徑:/usr/lib/php/PHPUnit;但在適用於 Windows 的 XAMPP 上,此路徑爲 XAMPP_HOME\php\PEAR\PHPUnit瀏覽器

要檢查 NetBeans IDE 是否能夠識別您的 PHPUnit 安裝,請打開 "Tools"(工具)> "Options"(選項)(在 Mac 上,請打開 "NetBeans Preferences"(NetBeans 首選項))並查看 "PHP" 窗口。打開 "Unit Testing"(單元測試)標籤。此時應顯示您的 PHPUnit 和框架生成器腳本的路徑。若是沒有顯示腳本,請單擊空字段旁邊的 "Search"(搜索)。IDE 將在您的本地系統中搜索該腳本。或者,單擊 "Browse"(瀏覽)瀏覽查找腳本。服務器

顯示 PHPUnit 腳本的路徑的 "Options"(選項)頁

建立並運行 PHPUnit 測試

NetBeans IDE 能夠對某個文件中的全部 PHP 類建立並運行 PHPUnit 測試。爲確保測試生成器能夠正常運行,請爲 PHP 文件指定與該文件中的第一類相同的名稱。oracle

爲某個類建立並運行 PHPUnit 測試:app

  1. 建立一個名爲 Calculator 的 PHP 項目。在此項目中,建立一個名爲 Calculator.php 的文件。在此文件中,鍵入或粘貼 PHPUnit 文檔的 "Skeleton Generator"(框架生成器)一章中所提供的 Calculator 類。
    <?php
    class Calculator
    {
        public function add($a, $b)
        {
            return $a + $b;
        }
    }
    ?>
  2. 添加一個包含 @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;
        }
    }
    ?>

    注:您可使用標註代碼完成來添加 @assert 標註。使用 Tab 鍵在參數之間導航,或者在填寫參數值後單擊 Enter。框架

    帶 @assert 標註的標註代碼完成使用代碼完成填寫 @assert 標註的參數
  3. 在 "Projects"(項目)窗口中,右鍵單擊 "Calculator.php" 節點,而後選擇 "Tools"(工具)> "Create PHPUnit Tests"(建立 PHPUnit 測試)。請注意,您能夠在 "Source Files"(源文件)節點的上下文菜單中爲項目中的全部文件建立測試。
    PHP 項目的 "Source Files"(源文件)節點的上下文菜單,顯示 "Create PHPUnit Tests"(建立 PHPUnit 測試)選項
  4. 第一次建立測試時,將會打開一個對話框,詢問您要存儲測試文件的目錄。在本示例中,使用「瀏覽」功能建立了 tests 目錄。 
    "Test file directory"(測試文件目錄)對話框

    注:您能夠手動爲一個項目編寫多個測試。若是編寫多個測試,能夠將它們分類到測試文件目錄的子文件夾中,例如 "important" 或 "quick"。而後,能夠經過右鍵單擊某個子文件夾並選擇 "Run Tests"(運行測試),來運行該文件夾中的測試。編程語言

    "Run Test"(運行測試)文件夾上下文操做
  5. IDE 在一個名爲 CalculatorTest.php 的文件中生成框架測試類,在 "Projects"(項目)窗口中會顯示該文件,並在編輯器中將其打開。 
    顯示新測試類的 "Projects"(項目)窗口

    請注意,將爲每一個 @assert 標註建立一個測試。

        /**
         * Generated from @assert (1, 1) == 2.
         */
        public function testAdd4()
        {
            $this->assertEquals(
              2,
              $this->object->add(1, 1)
            );
        }
  6. 您既能夠測試單個文件,也能夠測試整個項目。要測試項目,請右鍵單擊項目的父節點,而後選擇 "Test"(測試)或按 Alt-F6 組合鍵。要測試 Calculator.php 文件,請右鍵單擊該文件的節點,而後選擇 "Test"(測試),或者按 Ctrl-F6/⌘-F6 組合鍵。本示例只有一個文件,且該文件中只有一個類,所以兩種測試結果相同。IDE 會運行測試並在 "Test Results"(測試結果)窗口中顯示結果。 
    "Test Results"(測試結果)窗口

    測試結果的更詳細文本版本會顯示在 "Output"(輸出)窗口中。

    顯示測試結果的 "Output"(輸出)窗口

使用測試組

您能夠選擇要在測試套件運行期間執行的測試組。例如,可能有一些測試您但願只在生產環境中運行,而另外一些測試在生產和開發環境中同時運行。您能夠將前一種測試放在production 組中,而將後一種測試同時放在 production 和 development 組中。在開發環境中運行測試套件時,能夠選擇只執行 development 測試組。

必須首先對 PHP 項目啓用測試組,而後才能對該項目中的全部文件使用測試組。

要將測試標記爲測試組的一部分,請使用 @group [group name] 來標註測試方法。

建立和運行測試組:

  1. 在 "Projects"(項目)窗口中,右鍵單擊 "Calculator" 節點,而後選擇 "Properties"(屬性)。"Project Properties"(項目屬性)打開。
  2. 在 "Project Properties"(項目屬性)中,選擇 "PhpUnit" 類別。選擇 "Ask for Test Groups Before Running Tests"(在運行測試以前詢問測試組)。單擊 "OK"(肯定)。
    "Project properties"(項目屬性)的 "PhpUnit" 類別,顯示啓用的測試組
  3. 在編輯器中打開 CalculatorTest.php
  4. 爲 testAddtestAdd3 和 testAdd5 方法添加標註 @group production
    顯示測試組標註的代碼
  5. 對於方法 testAdd2 和 testAdd4,添加標註 @group production 和 @group development顯示測試組標註的代碼
  6. 右鍵單擊 Calculator.php 節點,而後選擇 "Test"(測試)。此時將會打開一個對話框,詢問您要運行哪些測試組。選擇 "development",而後單擊 "OK"(肯定)。IDE 只運行使用 @group development 標註的測試。
    "Select test group"(選擇測試組)對話框

有關 NetBeans IDE 中 PhpUnit 測試組的詳細信息,請參見 "NetBeans IDE for PHP" 博客帖子:Using PHP Unit Test Groups(使用 PHP 單元測試組)。

測試結果和 IDE 輸出

PHPUnit 測試的結果會顯示在 IDE 的 "Test Results"(測試結果)和 "Output"(輸出)兩個窗口中。"Test Results"(測試結果)窗口包含一個圖形窗格和一個簡短文本窗格。「"Output"(輸出)窗口提供了輸出的更詳細文本版本。在此部分,您將詳細瞭解 "Test Results"(測試結果)窗口和 "Output"(輸出)窗口。

在 "Test Results"(測試結果)窗口中,您能夠從下列位置獲取有關失敗的測試的信息:

  • UI 窗格中失敗測試的樹條目所附帶的消息
  • 右側窗格中的文本,其中包括指向失敗的測試代碼行的連接
  • 將光標懸停在 UI 窗格中失敗的測試上時顯示的工具提示文本

顯示工具提示的 "Test results"(測試結果)窗口

"Test Results"(測試結果)窗口在左側包括如下按鈕:

  • 從新運行測試按鈕 "rerun"(從新運行)按鈕
  • 顯示失敗的測試 "Show failed tests"(顯示失敗的測試)按鈕
  • 顯示經過的測試 "Show passed tests"(顯示經過的測試)按鈕
  • 顯示經過但出錯的測試 "Show tests with errors"(顯示出錯的測試)按鈕
  • 導航至下一個測試結果的按鈕 "next test"(下一個測試)按鈕,以及導航至上一個測試結果的按鈕 "previous test"(上一個測試)按鈕

"Output"(輸出)窗口顯示 PHPUnit 腳本的完整輸出。當您沒法經過 "Test Results"(測試結果)窗口中的信息找出錯誤緣由時,該窗口會很是有用。與 "Test Results"(測試結果)窗口相似,"Output"(輸出)窗口包括指向失敗的測試類行的連接。它還在左側包括用於從新運行測試和用於打開 "PHP Options"(PHP 選項)窗口的按鈕。"Output"(輸出)窗口中連接到 "Options"(選項)的按鈕

顯示完整 PHPUnit 測試結果的 "Output"(輸出)窗口

代碼覆蓋率

適用於 PHP 的 NetBeans IDE 提供了代碼覆蓋率以及 PHPUnit 支持。(IDE 也爲 Python 提供了代碼覆蓋率)。代碼覆蓋率檢查 PHPUnit 測試是否覆蓋了全部方法。在此部分,您將瞭解如何經過現有 Calculator 類來使用代碼覆蓋率。

使用代碼覆蓋率:

  1. 打開 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;
        }
    
    }    
    ?>
    
  2. 右鍵單擊項目節點。從上下文菜單中,選擇 "Code Coverage"(代碼覆蓋率)> "Collect and Display Code Coverage"(收集並顯示代碼覆蓋率)。默認狀況下,"Show Editor Bar"(顯示編輯器欄)也會處於選定狀態。 
    從項目節點上下文菜單中啓用代碼覆蓋率
  3. 如今,編輯器會在底部顯示代碼覆蓋率編輯器欄。因爲還沒有測試代碼覆蓋率,所以編輯器欄報告覆蓋率爲 0%。(在單擊 "Clear"(清除)以清除測試結果後,編輯器欄也會顯示覆蓋率爲 0%。) 
    運行測試前代碼覆蓋率的編輯器欄
  4. 單擊 "Test"(測試)以測試打開的文件,或單擊 "All Tests"(全部測試)以運行項目的全部測試。此時顯示 "Test Results"(測試結果)。此外,"Code Coverage"(代碼覆蓋率)欄會告知您測試所覆蓋的可執行代碼語句百分比。在編輯器窗口中,覆蓋的代碼將以綠色突出顯示,未覆蓋的代碼將以紅色突出顯示。

    警告:若是在添加 add2 函數以後從新生成測試文件,則不會運行 PHPUnit 測試。這是由於 PHPUnit 建立了兩個衝突的 testAdd2 函數。若是您計劃對多個此類函數使用 PHPUnit,則不要經過在末尾附加數字的方式來區分函數。請參見 PHPUnit 文檔

    運行測試後代碼覆蓋率的編輯器欄
  5. 在編輯器欄中,單擊 "Report..."(報告...)。代碼覆蓋率報告打開,其中顯示了對項目運行的全部測試的結果。使用報告中的按鈕,您能夠清除結果,再次運行全部測試或取消激活代碼覆蓋率(單擊 "Done"(完成))。 
    代碼覆蓋率報告
  6. 您能夠在項目中添加其餘類;刪除測試文件,而後從新建立測試文件;接下來,再次查看代碼覆蓋率報告。此時將會列出新類。在下面的報告中,Calculator 類又有一個函數未包括在測試中。 
    顯示第二個類的代碼覆蓋率報告

使用項目特定的配置

在 IDE 中,能夠爲項目選擇如下定製配置:

  • 引導文件
  • XML 配置文件
  • 測試套件
  • 定製 PHPUnit 腳本

要設置項目特定的配置,請執行如下操做:

  1. 右鍵單擊項目節點或項目的 "Test Files"(測試文件)節點,而後選擇 "Properties"(屬性)。這會打開 "Properties"(屬性)對話框。
    選中了 "Properties"(屬性)的項目上下文菜單
  2. 選擇 PHPUnit 類別。此時將打開一個對話框,能夠在其中選擇定製引導、XML 配置、PHPUnit 腳本或測試套件文件。
    "Project properties"(項目屬性)對話框的 "PHPUnit" 類別
  3. 若是您不熟悉引導或 XML 配置文件的結構,可使用 NetBeans IDE 生成框架。您還能夠經過單擊 "Help"(幫助)查找有關使用該對話框的說明。
    "Project properties"(項目屬性)的 "PHPUnit" 類別的詳細信息

使用定製類加載器的項目須要引導選項,例如,經過實現 Magic 函數 __autoload()。若是須要預先包含一個文件(如定義項目中的多個類所使用的全局常量的文件),則也須要使用引導選項。

可經過 XML 配置文件定義命令行調用中使用的選項。PHPUnit 手冊中進行了完整介紹。還可使用 XML 配置文件爲測試用例定義 php.ini 設置和全局變量。也能夠在 XML 配置文件中設置引導選項。

若是設置定製測試套件,每次選擇 "Run"(運行)> "Test Project"(測試項目)時,都會運行該套件。若是要僅運行一部分測試,或者要使用最近添加(必須手動添加)的 PHPUnit 功能(如數據提供器),該功能特別有用。請注意,您能夠根據須要定義多個測試套件,並經過在項目資源管理器中右鍵單擊文件並選擇 "run"(運行)來分別運行這些套件。爲防止形成混亂,NetBeans 會通知您是否使用定製測試套件。能夠在 "Test Results"(測試結果)和 "Output"(輸出)窗口中找到通知。

能夠將定製 PHPUnit 腳本(而非 "Tools"(工具)> "Options"(選項)中所選的默認腳本)用於項目。定製 PHPUnit 腳本能夠包含 PHPUnit 手冊中描述的任何命令行開關。

 

在 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 測試:

  1. 打開命令提示符,而後運行 pear install Testing_Selenium-beta 命令。您須要在 Path 變量中包含 PHP_HOME/php/PEAR。若是成功運行該命令,則將顯示如下提示:install ok: channel://pear.php.net/Testing_Selenium-0.4.3
  2. 在 IDE 中,打開 "Tools"(工具)> "Plugins"(插件),而後安裝 "Selenium Module for PHP"。
  3. 在 "Projects"(項目)窗口中,右鍵單擊 Calculator 項目的節點。選擇 "New"(新建)> "Other"(其餘)。此時將打開新建文件嚮導。選擇 "Selenium",而後單擊 "Next"(下一步)。 
    選定了 Selenium 文件的新建文件嚮導
  4. 第一次建立 Selenium 測試時,將會打開一個對話框,要求您設置 Selenium 測試文件的目錄。此目錄應不一樣於 PHPUnit 測試文件的目錄。不然,每次運行單元測試時,Selenium 測試都會運行。運行 Selenium 之類的功能測試一般比運行單元測試所花費的時間長,所以在每次運行單元測試時,您可能不會但願運行這些測試。
  5. 接受 "Name and Location"(名稱和位置)頁中的默認設置,而後單擊 "Finish"(完成)。新 Selenium 測試文件在編輯器中打開,並在 "Projects"(項目)窗口中顯示。 
    顯示新 Selenium 測試的 "Projects"(項目)窗口
  6. 如今,"Run Selenium Tests"(運行 Selenium 測試)項已添加到項目的上下文菜單中。單擊此項,Selenium 測試結果隨即顯示在與 PHPUnit 測試相同的 "Test Results"(測試結果)窗口中。

更多練習

下面是供您探討的更多思路:

  • 向 Calculator.php 中添加第二個類,例如將 $a 和 $b 相乘的 Calculator2 類。刪除並從新生成測試。
  • 若是嘗試學習包含多個部分的建立 CRUD 應用程序教程,請爲最終項目建立 Selenium 測試。

 

要發送意見和建議、得到支持以及隨時瞭解 NetBeans IDE PHP 開發功能的最新開發狀況,請加入 users@php.netbeans.org 郵件列表NetBeans IDE 論壇上提供了此列表的鏡像。

相關文章
相關標籤/搜索