程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Eclipse Test and Performance Tools Platform,第3部分: 測試應用程序

Eclipse Test and Performance Tools Platform,第3部分: 測試應用程序

編輯:關於JAVA

開始之前

關於本系列

在交付健壯的產品質量的程序所需的漫長過程中,為應用程序編寫代碼只是第一個階段。必須對代碼進行測試,以檢驗它的操作和准確性。往往還必須對代碼進行分析,以便消除性能瓶頸和資源浪費(尤其是內存)。還必須對代碼進行監視,以便對故障進行定位、識別使用模式、尋找進一步增強和優化的機會以及探測入侵嘗試和實際的入侵。

Eclipse Test and Performance Tools Platform(TPTP)是一種軟件體系結構以及幾個擴展了 Eclipse 平台的組件(到目前為止),包括測試、性能和監視工具。這個 “Eclipse Test and Performance Tools Platform” 教程系列講解 TPTP 的功能。第 1 部分 演示了如何分析 Java™ 應用程序。第 2 部分 講解如何捕獲任意的日志文件,並將它們轉換為得到廣泛支持的 Common Base Events(CBE)格式。第 3 部分解釋如何管理應用程序測試。

關於本教程

本教程是 “Eclipse Test and Performance Tools Platform” 教程系列的第三期。本教程演示如何使用 TPTP 的測試特性來度量 Web 應用程序的響應時間,講解如何創建和管理改進的 JUnit 測試,並描述如何創建計算機引導的手工測試。

目標

在本教程中,學習如何使用 Eclipse TPTP 的測試特性度量 Web 應用程序的響應時間。然後學習如何創建和管理改進的 JUnit 測試,並學習如何創建計算機引導的手工測試。’

前提條件

您應該具備軟件開發經驗並了解整個軟件開發生命周期。還應該熟悉從命令行安裝軟件,以及設置和管理 shell 和系統環境變量,比如 shell 的 PATH 和 LD_LIBRARY_PATH 變量以及 Java 的 CLASSPATH 變量。了解 Java 編程語言、Eclipse 集成開發環境(IDE)和 Eclipse 用戶界面(UI)也是有幫助的,但並不是必需的。

系統需求

可以在具有或支持 Java 虛擬機(Java Virtual Machine,JVM)的任何系統上運行 Eclipse,包括 Solaris、Linux®、Mac OS X 或 Microsoft® Windows®。如果系統上沒有安裝 JVM,那麼一定要為 Java 軟件保留至少 250 MB 的空閒磁盤空間(在某些情況下需要的空間會少得多)。核心 Eclipse 軟件和這裡使用的所有插件需要 50 MB 空間。

除了磁盤空間之外,還需要有足夠的空閒物理內存來運行 JVM。一般來說,為了獲得令人滿意的性能,建議使用 64 MB 或更多的空閒物理內存。

下面是所需的所有軟件:

Java 技術,可以從 Sun Microsystems 或 IBM 獲得。下載 Java Runtime Environment (JRE) V1.5 的最新更新。

Eclipse V3.2 IDE

Eclipse TPTP Runtime V4.2.0

Eclipse TPTP Testing Tools Runtime V4.2.0

Eclipse TPTP Agent Controller

Eclipse Modeling Framework (EMF) SDK V2.2

Eclipse XML Schema Infoset Model (XSD) SDK V2.2

Mozilla V1.7.8 或更高版本的 Web 浏覽器

注意:即使您已經安裝了別的 Web 浏覽器,如果希望使用計算機引導的手工測試,那麼必須安裝 Mozilla V1.7.8 或更高版本,這是因為它包含 Eclipse TPTP 手工測試工具使用的 UI 組件。

開始

安裝 Eclipse 和 Eclipse TPTP

在安裝 Mozilla(Mozilla Web 站點上有安裝說明,這裡就不重復了)並下載所需的組件之後,就可以安裝 Eclipse 和 Eclipse TPTP。以下安裝說明適用於 Linux 和 UNIX® 系統;對於 Windows 和其他平台的安裝說明請參閱 Eclipse.org。

假設已經下載了以下文件:

jre-1_5_0_07-linux-i586.bin

eclipse-SDK-3.2-linux-gtk.tar.gz

xsd-runtime-2.2.0.zip

tptp.platform.runtime-TPTP-4.2.0.zip

tptp.test.runtime-TPTP-4.2.0.zip

emf-sdo-runtime-2.2.0.zip

tptpdc.linux_ia32-TPTP-4.2.0.zip

並假設這些文件放在您的 /tmp 目錄中。安裝 Eclipse 並為運行 Eclipse TPTP 設置環境的步驟如下:

清單 1. 安裝 Eclipse 和 Eclipse TPTP

#
#
# Unpack the JRE in a new directory, ~/java-tptp
#
$ mkdir ~/java-tptp
$ cd ~/java-tptp
$ sh /tmp/jre-1_5_0_07-linux-i586.bin

#
#
# Unpack Eclipse, Eclipse TPTP, and all the prerequisites
#
$ tar xzvf /tmp/eclipse-SDK-3.2-linux-gtk.tar.gz
$ unzip /tmp/xsd-runtime-2.2.0.zip
$ unzip /tmp/tptp.platform.runtime-TPTP-4.2.0.zip
$ unzip /tmp/tptp.test.runtime-TPTP-4.2.0.zip
$ unzip /tmp/emf-sdo-runtime-2.2.0.zip

#
#
# Unpack, configure, and launch the Eclipse TPTP Agent Controller
#
$ mkdir tptpd
$ cd tptpd
$ unzip /tmp/tptpdc.linux_ia32-TPTP-4.2.0.zip
$ chmod +x ./{bin,lib}/*

#
#
# Set essential environment variables
#
$ export JAVA_HOME=~/java-tptp/jre1.5.0_07
$ export CLASSPATH=$JAVA_HOME
$ export PATH=$JAVA_HOME/bin:$JAVA_HOME/tptpd/bin:$PATH
$ export MOZILLA_FIVE_HOME=/usr/lib/mozilla
$ export LD_LIBRARY_PATH=$MOZILLA_FIVE_HOME:\
$JAVA_HOME/tptpd/lib:$LD_LIBRARY_PATH

#
#
# Start the Eclipse TPTP Agent Controller
#
$ cd ./bin
$ ./SetConfig.sh 
$ ./RAStart.sh 

#
#
# Finally, launch Eclipse
#
$ ~/java-tptp/eclipse/eclipse

注意:不要輸入清單 1 中的注釋行。它們只用來進行說明。

對於 Java 許可條款,回答 “Yes”,然後每當提示覆蓋 Eclipse 清單文件時單擊 All。

啟動 Eclipse

啟動 Eclipse,在 Eclipse Workspace 窗口出現時,將工作空間命名為 testing。(不必為這個名稱操心;在 Eclipse 中可以維護多個工作空間[比如每個項目一個工作空間],而且在 Eclipse 中可以在工作空間之間切換。)幾秒之後,應該會看到 Eclipse 主窗口,見下圖。單擊箭頭圖標進入 Eclipse Workbench。

圖 1. Eclipse 主窗口

當然,如果已經安裝了 Eclipse,就可以使用內置的 Eclipse Update Manager 安裝 Eclipse TPTP。為此,在 Eclipse 中完成以下步驟:

單擊 Software Updates > Find and Install。

選擇 Search for new features to install 選項,然後單擊 Next。

單擊 New Remote Site,然後為名稱和 URL 字段分別輸入 TPTP Update Site 和 http://eclipse.org/tptp/updates/site.xml。

單擊 Finish,選擇要安裝的特性,然後單擊 Next。

接受許可協議,單擊 Next,然後單擊 Finish。

在提示確認時,單擊 Install All。

在安裝完成時,重新啟動 Eclipse。

現在應該可以使用 Eclipse TPTP 了。

Eclipse TPTP 測試工具

對於使用 Java 技術開發的各種應用程序和庫,Eclipse TPTP 測試工具提供了以下四種測試軟件:

URL 性能工具 Hypertext Transfer Protocol(HTTP)或 URL 工具自動地對 Web 應用程序進行性能測試。可以使用 URL 工具捕捉浏覽器會話,建立可重復的 JUnit 測試。URL 工具自動地在每個測試中添加度量措施,從而度量 Web 軟件的響應時間。測試結果被捕捉到圖表中,項目團隊可以研究這些圖表。JUnit 工具 可以使用 Eclipse TPTP JUnit 工具在 Eclipse 中創建和管理 JUnit 測試。而且,JUnit 測試提供了深入的交互式報告,可以幫助您快速直接地研究失敗的測試。手工測試工具 手工測試工具可以記錄必須手工執行的測試。可以捕捉指令、預期的結果和檢查表,從而使手工測試更有規律、更可靠。Automated GUI Recorder Eclipse TPTP Automated Graphical User Interface(GUI)Recorder(AGR)可以捕捉和回放用戶與應用程序 GUI 的交互。可以使用原始屏幕坐標捕捉交互(但是不建議這麼做,因為這種記錄與屏幕分辨率相關聯);如果應用程序是用 Standard Widget Toolkit(SWT)編寫的,那麼也可以使用各個界面部件的獨特屬性來記錄交互。稱為確認鉤子(verification hook) 的定制子例程在測試回放期間對應用程序的正確性進行判斷。還可以建立稱為數據池(datapool) 的數據集合,從而調整在記錄的測試中使用的輸入。

注意:AGR 的功能非常豐富,值得用單獨的教程進行講解。

本教程將演示 URL 工具、JUnit 工具和手工測試工具的使用。

度量 Web 應用程序的性能

在出現 World Wide Web 之前,大多數應用程序在某一計算機上 “本地” 運行。這種應用程序的基准測試 (即性能度量)非常簡單。如果保持處理器速度和內存量不變,那麼可以很容易地量化代碼修改和各種編譯器對性能的影響。更方便的是,對於基於 UNIX 的系統,命令行、shell 腳本和其他實用程序為重復運行測試和記錄結果提供了一個足夠的框架。

Web 應用程序的情況就大不相同了,這主要是因為許多組件都會影響 Web 操作(更具體地說,是 HTTP 操作)的效能。這些組件包括本地 Web 浏覽器、網絡、Web 服務器、遠程主機、Web 應用程序和 “運動部件”(比如數據庫)等等。對 Web 應用程序進行性能測試時要求將許多因素的影響最小化 —— 如果測試在局域網上運行,這可能比較容易實現。但是,在重復運行測試方面仍然有問題。

設計 Eclipse TPTP URL 工具的目的是對用戶與 Web 應用程序的交互進行記錄和自動回放並進行基准測試。URL 工具能夠記錄(通過代理)每次 “單擊” 並度量請求和響應之間的延遲。

使用 URL 工具

清單 2 給出一個簡單的 PHP 應用程序,它消耗處理器周期並連接 Web 服務器。可以選擇休眠四分之一秒、半秒或一秒。將這個代碼放在文檔根中。

清單 2. 一個簡單的 PHP 應用程序

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
    <title>Consume Cycles Example</title>
   </head>

   <body>
<?php
    $time = 0;

    switch($_GET['mode'])
    {
     case 'short':
      $time=250;
      break;

     case 'medium':
      $time=500;
      break;

     case 'long':
      $time = 1000;
      break;
    }

    $time *= 1000;

    if ($time > 0) {
     usleep($time);
     print "<p>I snoozed for $time microseconds</p>";
    }
?>

   <h3>Choose how long you want the application to sleep:</h3>
   <ul>
    <li><a href="index.php?mode=short">A short time</a></li>
    <li><a href="index.php?mode=medium">A little while</a></li>
    <li><a href="index.php?mode=long">A long time</a></li>
   </ul>
   </body>
</html>

把這些 PHP 代碼作為 $DOCROOT/burn/index.php 部署在自己的本地機器上,並在浏覽器的地址欄中輸入 http://localhost/burn/index.php(見圖 2)。單擊一個鏈接,然後單擊 Back 返回索引頁。

圖 2. 要進行基准測試的 PHP 應用程序

構建 URL 測試

首先創建一個測試來度量清單 2 中的 PHP 應用程序。啟動 Eclipse 並創建一個新的稱為 PHP 的一般項目。

記錄浏覽器會話

首先,在 Eclipse 中設置浏覽器和代理端口首選項。Eclipse 使用這些設置啟動一個代理,並自動地配置和啟動浏覽器,從而對經過代理的所有通信流進行路由。可以看到,代理為進行 HTTP 記錄提供了方便。設置首選項的步驟如下:

單擊 Window > Preferences,展開 Test 的箭頭,然後單擊 HTTP Recording。

將右邊面板中的設置修改為圖 3 這樣。

圖 3. 配置浏覽器和代理

HTTP Recorder 使用圖 3 中的設置啟動 Mozilla 並對通信流進行轉發,從而使用端口 1080 連接 (SOCKS 4) 代理。

單擊 OK。

單擊 New > Other,展開 Test 的箭頭,然後展開 Recording 的箭頭並選擇 HTTP Recording。窗口應該與圖 4 相似。

圖 4. 創建新的 HTTP 記錄

單擊 Next。

將記錄文件命名為 Simple,然後單擊 Finish。

過一會兒,Recorder Control 面板會出現在 Eclipse 中(見圖 5)。還會出現一個空的 Mozilla 窗口。(如果打開 Mozilla 的首選項,就可以看到使用的代理設置。)

圖 5. Recorder Control 面板控制 HTTP 記錄

將焦點轉到 Mozilla 窗口上,然後輸入示例 PHP 應用程序的 URL(例如,http://localhost/burn/index.php)。應用程序應該會立即出現在浏覽器中。

單擊 A short time 鏈接,然後單擊 Back。

單擊 A little while,然後單擊 Back。

單擊 A long time。

切換回 Eclipse,單擊 Stop recording(圖 5 右邊的紅色方塊)。

Eclipse 停止記錄並生成一個稱為 Simple.testsuite 的新測試案例。Eclipse 還會保存記錄。Eclipse 窗口現在應該像圖 6 這樣。

圖 6. HTTP 性能測試套件

查看捕捉到的 HTTP 測試

單擊 HTTP Requests 選項卡(在頂部面板的底部),然後選擇捕捉到的四個 HTTP 請求之一。如果展開 Eclipse 窗口,就會看到這個請求內部的細節,見圖 7。可以使用 HTTP Requests 視圖修改請求 —— 比如,添加額外的消息頭或修改 GET 參數。在下一步(定義測試套件的行為)中將使用這個頁面上的請求。(將 HTTP 請求看作最初捕捉到的操作,然後根據需要進行定制。測試套件使用這些操作驅動 Web 應用程序。)

圖 7. 編輯 HTTP 請求序列

現在,單擊 Behavior 選項卡並展開所有箭頭。循環控件標有 recycle 圖標;剛才編輯過的那些 HTTP 請求是操作。可以添加、刪除和插入額外的步驟(Add 是創建新的子步驟,Insert 是創建新的同級步驟),還可以重新排列步驟的次序。單擊一個循環,然後單擊一個請求。對應的屬性面板見圖 8。

圖 8. 編輯循環和請求

這兩個面板中的設置的意義很明確。可以控制循環的迭代次數和修改請求的細節。還可以包含其他套件中的其他測試。為了進行試驗,單擊左邊面板頂部的 Loop 1,並將 Number of iterations 改為 10。按 Ctrl+S 保存工作。

編譯測試套件

為了運行測試套件,必須對它進行編譯,也就是將測試案例轉換為 Java 代碼(實際上,是 JUnit 測試)。為了運行套件,在當前的工作空間中創建一個 Java 項目並將它命名為 Testing。從測試套件生成 Java 代碼的步驟如下:

單擊 Windows > Open perspective 並在菜單中選擇 Test,從而切換到 Test 透視圖。Eclipse 窗口應該會顯示 Test Navigator,見圖 9。

圖 9. Test Navigator

右擊 Simple,然後單擊 Generate。出現一個與圖 10 相似的窗口。

圖 10. 從 HTTP 生成 JUnit 測試

單擊頂部的 Browse 按鈕,然後選擇 Java 項目 Testing。

單擊 Finish。在 Testing 項目中應該會出現兩個文件夾。

切換回 Java 透視圖。

運行 URL 測試

現在可以對 Web 應用程序進行性能測試了。Eclipse TPTP 工具已經將 URL 測試轉換為 Java 代碼。現在必須執行此代碼:

展開 Testing 項目旁邊的箭頭,然後展開文件夾 test 旁邊的箭頭,這個文件夾中包含一個 Java 類 Simple.java。如果展開 Simple.java,就會看到它與傳統的 JUnit 測試非常相似。下面就來運行它。

右擊 Simple.java,然後單擊 Run As > JUnit test。結果與圖 11 相似。狀態條是綠色的,所以測試(一共 40 個)都成功了。

圖 11. 運行 HTTP 性能測試套件的結果

讓測試作為 JUnit 測試運行證實了測試是可以工作的,但是要獲得有價值的測量結果,就必須讓測試作為 Eclipse TPTP 測試運行。為此,切換回 Test 透視圖,右擊 test 文件夾,然後單擊 Run As > Run。在下一個窗口中,展開 Test,然後選擇 Simple。此時,右邊的面板應該與圖 12 相似。單擊 Run。屏幕上會出現圖 13 所示的進度條,直到測試完成時為止。

圖 12. 啟動 HTTP 性能測試套件

圖 13. 進度條

分析結果

到目前為止,已經捕捉到了一個 Web 會話並創建了測試腳本,而且生成並執行了測試案例。下一個步驟是分析結果。

Test 透視圖現在應該顯示一個新資源:一個稱為 Simple 的測試日志。雙擊這個日志打開它。Eclipse 工作台應該像圖 14 這樣。

圖 14. 運行測試套件的日志

單擊 Events 選項卡,展開循環和頁面,直到視圖看起來像圖 15 這樣。

圖 15. 運行測試套件的事件

每個條目都包含大量信息,但是最令人感興趣的可能是消息元素,因為它們報告了響應時間(以毫秒為單位)。打開幾個調用元素,看看每個請求花費了多長時間。在這個人為設置的示例中,可能會看到很快的響應(比如,在打開索引頁時),在測試選擇長時間休眠時會看到比較長的響應時間。

生成報告

Eclipse TPTP HTTP 性能工具還有生成報告的功能。運行測試套件三到五次。每次運行都會產生自己的日志。查看總結報告的步驟如下:

在 Test Navigator 中右擊 Simple,然後單擊 Options。

選擇 Report。

在下一個窗口中(見下圖),單擊 HTTP Page Response Time。

圖 16. 供選擇的報告列表

如果打算對 Web 應用程序的響應能力進行基准測試,那麼 HTTP Recorder 是很方便的。還可以找到它的其他用途,比如用作鏈接檢驗器(即檢查鏈接是否是有效的)、站點 “心跳”(即監視器)等等。

創建和管理 JUnit 測試

前一節演示了在部署 Web 應用程序之後對它進行測試的工具。如果發現了性能問題,就可以使用其他 Eclipse TPTP 工具分析代碼並查明瓶頸。如果希望監視應用程序正在進行的操作,Eclipse TPTP 也提供了日志分析工具。

但是,大多數開發人員(尤其是 Java 開發人員)通常希望在把代碼部署到生產服務器上之前就解決掉 bug。因此,有許多 Java 開發項目致力於開發防錯的基礎設施,從而在代碼的整個生命周期中防止 bug。源代碼控制系統會跟蹤軟件的改變。每晚構建會盡早揭示出問題(包括性能問題和不准確)。另外,單元測試會確保每個 “單元”(精細到單獨的類)正確地運行。“先寫測試,後寫代碼” 策略可以在編寫代碼之前捕捉到預期的代碼行為。這樣的話,如果代碼通過了測試,單元就完成了。

Eclipse 核心(沒有安裝 Eclipse TPTP)提供了從單獨的類生成 JUnit 測試骨架的工具。Eclipse TPTP 更進了一步,它提供了詳細的日志和一個特殊的日志查看器,可以使用日志查看器過濾掉某些不感興趣的結果(比如,忽略已經通過的所有測試)。還可以使用 Eclipse TPTP 工具輕松地跳到特定的事件。甚至可以立刻轉到出問題的代碼。在學習本節時,您肯定會注意到其他特性和好處。

Eclipse TPTP JUnit 工具入門

我們通過示例來了解 Eclipse TPTP JUnit 工具。清單 3 中的代碼是一個簡單的 Java 類 Account,它對銀行帳戶進行建模。它有一個名為 balanced 的獲取器,還有影響帳戶余額的 deposit(amount) 和 withdrawal(amount) 方法。另外,每當調用 compoundAnnually(rate) 方法時,Account 中的本金會增加一年的利息。

清單 3. 表示銀行帳戶的簡單 Java 類

package demo;

import java.lang.Math;

public class Account {

   private double balance = 0;

   public Account() {
     this.balance = 0;
   }

   public Account(double deposit) {
     this.balance = 0;

     if (deposit > 0) {
       this.balance = deposit;
     }
   }

   public double deposit (double deposit) {
     if (deposit < 0) {
       return this.withdrawal(deposit);
     }

     this.balance += deposit;

     return(this.balance);
   }

   public double withdrawal (double withdrawal) {
     if (withdrawal < 0) {
       return(this.deposit(-withdrawal));
     }

     if (this.balance >= withdrawal) {
       this.balance -= withdrawal;
     }

     return(this.balance);
   }

   public double balance() {
     return this.balance;
   }

   public double compoundAnnually(double rate) {
     int n = 356 * 24;

     if (rate > 0) {
       this.balance *= Math.pow((1 + (rate/n)), n);
     }

     return(this.balance);
   }
}

在 Eclipse 中,單擊 File > New > Other,然後選擇 Java project 創建一個名為 Demo 的 Java 項目。

在這個 Java 項目文件夾中,創建一個新類 Account 並把它放在包 demo 中。

根據需要復制並粘貼清單 3 中的源代碼,替換 Account 類的成員和方法。

為 Account 類創建一個 Eclipse TPTP JUnit 測試。Eclipse TPTP JUnit 測試是一種特殊的 JUnit 測試,在選擇 File > New > Other 時可以在 Test 文件夾下找到它(見圖 17)。

圖 17. Eclipse TPTP JUnit 測試

在 Java 透視圖中右擊 Account.java,然後單擊 New > Other。

在產生的窗口中,選擇 TPTP JUnit Test。如果出現與圖 18 相同的窗口,那麼單擊 Yes,從而將三個重要的 JAR 文件添加到當前的 Java CLASSPATH 變量中。

圖 18. 在配置中添加必要的類

將新的測試命名為 AccountTest 並在測試編輯器中編輯這個測試(見圖 19)。編輯完之後,單擊 Finish。

圖 19. 命名 Eclipse TPTP JUnit 測試案例

在創建了新的 Eclipse TPTP JUnit 測試案例之後,Java 透視圖應該與圖 20 相似。

圖 20. 新的 JUnit 測試套件的框架

單擊 Test Methods 選項卡。在這個選項卡上,添加各個測試。單擊 Add 三次創建三個測試:test 1、test 2 和 test 3。將 test 1 重命名為 testCreateEmpty,將 test 2 重命名為 createBalance,將 test 3 重命名為 testVerifyDeposit。

按 Ctrl+S 保存工作。如果單擊 Eclipse TPTP JUnit 測試案例 AccountTest.java 並展開它的箭頭,會在這個類中看到在創建測試之後命名的三個新方法。Eclipse TPTP JUnit 測試工具會盡可能保持 Java 類與測試編輯器中的測試方法同步。例如,如果在測試編輯器中對測試方法進行重命名,那麼 Java 類中的名稱就會自動地改變。(但是要小心:許多操作可能會導致兩者不同步。)

打開 AccountTest.java 類並編輯新方法,建立清單 4 中的代碼。完成編輯之後,按 Ctrl+S 保存工作。

清單 4. Account 類的三個測試案例

public void testCreateEmpty()
throws Exception
{
  Account zeroAccount= new Account();
  assertEquals("balance not zero", zeroAccount.balance(), (double) 0, 0.01);
}

public void testCreateBalance()
throws Exception
{
  double startingBalance = 510.96;
  Account newAccount= new Account(startingBalance);

  assertEquals("starting balance incorrect", \
  newAccount.balance(), startingBalance, 0.01);
}

public void testVerifyDeposit()
throws Exception
{
  double startingBalance = 987.91;
  double deposit = 1560.98;

  Account newAccount = new Account(startingBalance);

  assertEquals("deposit not credited",
    newAccount.deposit(deposit), deposit+startingBalance, .01);
}

既然已經有了 Java 類和包含幾個案例的 JUnit 測試,就可以詳細指定測試應該如何運行了。單擊 AccountTest.testsuite,然後單擊 Behavior 選項卡;在這裡詳細設置如何執行測試套件。與使用 URL 工具時一樣,下面幾步是創建運行各個測試案例的循環和方法調用。

對執行循環和方法調用的方式進行配置的步驟如下:

在 Behavior 選項卡上,單擊 Add。

在下一個窗口中(見圖 21),在頂部的面板中選擇三個 Java 方法,然後單擊 OK。應該會看到三個測試方法出現在左邊的面板中。

圖 21. 選擇要在當前 JUnit 測試中運行的案例

右擊 AccountTest.testsuite,然後單擊 Run As > Test。與 URL 工具一樣,出現表示測試運行進度的進度條。測試完成時,它將結果的日志放在一個新的 Eclipse 資源中,這個資源稱為 AccountTest_#.execution,其中的 # 是一個惟一的標識符。

雙擊 AccountTest_#.execution,然後單擊 Events 選項卡。應該會看到與圖 22 相似的窗口。

圖 22. Account 測試類的結果

在各處單擊,看看各個事件。可以單擊 Overview 查看總結:結論、持續時間等等。

那麼,當測試案例失敗時會發生什麼?在 testVerifyDeposit() 中引入一個錯誤,讓 assertEquals() 方法在這個方法上失敗。然後保存編輯結果並重新運行 AccountTest.testsuite。再次運行套件會生成新的 AccountTest_#.execution 文件。雙擊這個文件。

進入 Events 選項卡並展開箭頭,直到找到失敗。如果單擊這個失敗,就會看到錯誤的詳細情況,包括堆棧跟蹤,見下圖。

圖 23. 當測試套件失敗時會發生什麼?

可以看到,Eclipse TPTP JUnit 工具為創建、運行和分析 JUnit 測試提供了一個支持環境。另外,如果已經有了 JUnit 測試,那麼可以將它們導入 Eclipse TPTP 並使用經過改進的工具。只需單擊 File > Import,並在 Import 窗口中單擊 JUnit tests to TPTP,見下圖。

圖 24. 將現有的 JUnit 測試導入 Eclipse TPTP

有了 Eclipse TPTP 的幫助,就沒有理由不采用測試優先的編碼策略了。

創建手工測試

Eclipse TPTP HTTP 性能工具和集成的 JUnit 工具分別幫助對基准測試和回歸測試進行自動化。但是,並非所有測試都可以自動化。一些測試需要人為干預,其他一些測試可能太復雜,無法簡單地捕捉和回放。對於這些並非罕見的情況,Eclipse TPTP 提供了工具來幫助創建計算機引導的手工測試和測試套件。

與 HTTP 性能工具一樣,可以創建一個測試案例並在多個測試套件中重用它。可以調整步驟的次序,並指定在循環中什麼時候應該重復某些步驟。更方便的是,可以 “運行” 手工測試套件,Eclipse TPTP 會引導您通過每個步驟,同時監視並記錄結果。

構建手工測試套件

我們先創建一個簡單的手工測試套件,它可以引導團隊中的另一個成員對前面的 PHP 應用程序進行檢驗。步驟如下:

單擊 PHP 文件夾,然後單擊 File > New > Other。

單擊 Manual TPTP Test。

給手工測試起一個描述性的名稱並單擊 Finish。應該會看到下面這樣的面板。還可以在 Description 字段中輸入描述。

圖 25. 構建手工測試套件

單擊 Add,然後按照圖 26 這樣填寫面板的字段。Description 字段是富文本字段,可以使用 HTML 使描述更具可讀性。

圖 26. 創建手工操作的測試案例

再單擊 Add 三次,形成與圖 27 相似的結果。

圖 27. 編輯手工測試案例的行為

單擊第一個測試案例 Home Page responds,然後單擊 Behavior 選項卡,在這裡創建測試套件。

單擊 Add > Loop 在套件中創建一個新步驟,如下所示。

圖 28. 測試步驟的菜單

單擊 Add > Invocation 添加另一個步驟。

在出現的窗口中,單擊 Home Page responds(如下所示),然後單擊 OK。

圖 29. 調用測試

為了讓 Home Page responds 成為循環的一部分,將它拖到循環中。

單擊 Insert 三次,將三個 “Click” 測試案例追加到循環的末尾。

完成所有步驟之後,Behavior 面板應該與圖 30 相似。

圖 30. 手工測試套件的概況

如果希望讓測試套件循環多次,那麼單擊 Loop 1(也可以修改它的名稱),然後在 Number of iterations 字段中輸入新的數值。為了保險起見,按 Ctrl+S 保存工作。

運行手工測試套件

現在可以運行測試了。

切換到 Test 透視圖。在 PHP 文件夾中右擊 Manual Web test,然後單擊 Run As > Run,見圖 31。

圖 31. 選擇手工測試套件

在出現的窗口中(見圖 32),選擇 TPTP Manual Test 文件夾中的 Manual Web test,單擊 local_deployment,然後單擊 Run。

圖 32. 啟動手工測試套件

顯示測試套件進度條。不要擔心!在幕後,Eclipse Agent Controller 啟動一個單獨的應用程序(基於 Mozilla 的 SWT UI 工具箱),引導您通過手工測試。這個新的應用程序應該在進度條接近 50% 時出現。Manual Test View 應用程序如圖 33 所示。不要單擊進度條下面的 Cancel,除非要退出手工測試視圖。

圖 33. Manual Test View 應用程序引導您通過每個測試

左邊的面板顯示 “得分” 和套件中的各個測試案例。右上方的面板描述要做什麼。下面的兩個面板(Verdict 和 Reason)允許記錄測試案例是否順利通過及其原因。

要想對結果進行評注,應該在 Text 字段中輸入信息。要想附加文件來記錄成功或幫助重現失敗,應該使用 Attachments 特性。

完成一個測試案例之後,單擊 Next 轉到下一個測試案例。如果通過了所有測試案例,最後的窗口應該與圖 34 相似。

圖 34. 通過了所有手工測試

單擊 Stop(紅色方塊)返回 Eclipse。Test Navigator 應該會在每個通過的測試案例旁邊顯示一個對鉤。單擊 Stop 之後,可以在 Eclipse 主窗口中看到對結果的總結,見圖 35。

圖 35. 對成功測試的總結

下一次需要創建檢查表時,請試試 Eclipse TPTP 手工測試工具。當然,它適用於軟件測試,但是可以在這個工具中捕捉任何復雜的任務。

結束語

軟件的構建既是藝術,也是科學。如果開發人員不發揮創造力,代碼就無法以最快的速度運行,各種問題會糾纏在一起,那麼計算機可能比打字機強不了多少。

盡管軟件不是由齒輪、發動機、彈簧和滑輪組成的物理機器,但是它也有許多必須緊密嚙合的 “運動部件”。您可能想用錘子把差勁兒的代碼打得粉碎,但是做不到。應該利用 Eclipse TPTP 編輯和構建代碼,測試它,調整它,並仔細觀察它的性能和穩定性。精明的代碼開發人員應該好好利用 Eclipse。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved