啄木鳥之家大呂java
敏捷測試已成爲如今式,儘早和持續的反饋成爲各研發團隊的必選項。測試同窗也須要跟上這個趨勢。除了「找bug」、「分析需求」、「功能測試」,還需考慮「交付質量、一次作對、在沒有用戶界面狀況下儘早接口測試」。web
測試要擁抱變化,改變過去到最後才安排測試活動以及只能作黑盒測試的被動局面,從項目一開始就開始測試活動。數組
今天給你們介紹的FitNesse,就是一個徹底集成單獨可運行wiki的驗收測試框架。它是開源的wiki web服務,容許建立本身的web頁用於包含測試表格,這些測試表格實際就是測試數據。FitNesse主要用於支持敏捷方式的黑盒驗收和迴歸測試,它也是一個協做工具,可支撐開發和測試、研發和業務同窗一塊兒準備測試用例集(test suite)。瀏覽器
從自動化測試金字塔結構來講,FitNesse定位業務接口測試層面,介於UI和單元測試之間。該定位確保咱們的測試可在UI沒出來前就能夠開展測試,並且基於wiki頁面的方式,也確保業務、開發和測試之間良好的溝通,由於業務方也能很容易讀懂測試內容。框架
爲何要用Fitnesseeclipse
敏捷測試團隊能夠用FitNesse來準備業務驗收測試用例集,用它們來測試系統對外的方法,有點相似Junit和TestNG等,它們之間主要區別是 FitNesse用wiki頁面上表格形式來表示測試用例,項目上各角色均可以很方便共享這些用例。ide
好處:函數
一、經過執行自動化的驗收測試用例實現儘早反饋工具
二、經過相似Junit的紅色(測試失敗)和綠色(測試經過)顯示,能很清晰展示測試執行結果單元測試
三、能根據質量要求設計不一樣覆蓋程度的測試數據
四、測試用例經過wiki語言編寫並經過表格形式展現,各方都能理解
五、經過測試表格定義測試用例的輸入和預期結果,很直觀
備註:關於FitNesse特性介紹可直接參考官網
用FitNesse能作什麼
經過FitNesse,咱們能建立測試用例和測試用例集(簡稱測試集),這跟平時咱們作測試要作的測試活動相似。測試用例是單個測試腳本,測試集是一組測試用例集合。當咱們執行測試集時,測試集中全部測試用例都會被執行,所以咱們須要合理安排每一個測試集中應該包括的測試用例。
FitNesse框架原理簡介
FitNesse框架包含Wiki、Test system、Fixtures,其中
一、Wiki:展示具體的Test Case、Test suite、甚至是Test Requirement;
二、Test system:Fitnesse的執行引擎,包括兩個部分:Slim、Fit
三、Fixtures:真正的測試代碼
具體如圖所示。
SUT:System Under Test,也就是被測試的系統。
Custom Fixture:也就是針對具體被測試系統設計的測試代碼。
SLIM:Simple List Invocation Method的縮寫,它包括SLIM Runner和SLIM Executor兩部分。
以SLIM執行引擎爲例來講,當咱們點擊Test按鈕開始測試執行時,Fitnesse讀取頁面表格數據,而後調用SLIM Runner將該表格解釋爲SLIM指令發送給SLIM Executer,以後Executer調用Fixture測試代碼,最後Fixture測試代碼執行具體的測試函數。通常咱們就是經過該測試代碼中測試函數跟被測系統交互完成測試驗證的。
Fit相似原理,Fit執行引擎對測試代碼要求更嚴格,建議採用SLIM,下文將以它爲例展開,若要進一步瞭解FIT測試框架,請自行百度或閱讀官網說明。
下載和配置FitNesse
一、進入FitNesse官網下載頁面:http://www.fitnesse.org/FitNesseDownload,下載最新的fitnesse-standalone.jar。
二、打開command命令行窗口,到fitnesse jar包所在目錄,而後執行該文件。(注:爲方便,你們爲下面命令行建立批處理文件。下面端口號可本身隨意設置)
java -jar fitnesse-standalone.jar -p 2222
文件成功執行成功後,FitNesse啓動狀況以下。
三、打開FitNesse,只須要在瀏覽器輸入http://localhost:<portnumber>,本例子是http://localhost:2222
在該頁面,你們可看到Edit和Add菜單,點擊Add,可看到Suite page(測試集頁)和Test page(測試用例頁)。當咱們建立某個測試集頁,全部在該頁面上的測試腳本在執行時都會被執行。爲講解方便,下面以建立某個測試用例頁爲例。
FitNesse例子
咱們將以一個簡單的計算器程序爲例,代碼包括4個方法:
一、addition() 加
二、minus() 減
三、multiply() 乘
四、divide() 除
(注意:FitNesse能支持大部分開發語言,用Java爲例而已)
FitNesse中代碼被稱做Fixture(你們可稱爲夾具,本文直接以英文稱呼),它是測試代碼,也是FitNesse和待測系統之間鏈接點。所以,當你要測試某個方法,就須要編寫一個fixture,測試執行時該fixture被觸發,而後測試該方法。
計算器例子對應的Fixture代碼以下:
public class Calculator {
private int first, second;
public void setFirst(int first) {
this.first = first;
}
public void setSecond(int second) {
this.second = second;
}
public int addition() {
return (first + second);
}
public int minus() {
return (first - second);
}
public int multiply() {
return (first * second);
}
public float divide() {
return (first / second);
}
}
eclipse中的代碼以下:
後面須要該計算器代碼的class文件,請確保編譯成功。
開始FitNesse編寫測試
STEP #1,讓咱們進入fitnesse frontpage頁面。在該頁面Add菜單,選擇Test page,而後輸入測試的名字,而後點擊save按鈕。根據這個case,咱們輸入Calculator
STEP #2,在瀏覽器中使用.操做符。相似:
STEP #3,點擊edit按鈕,而後輸入下面的代碼行
讓咱們一行一行看一下這些內容的含義:
a)第一行表示FitNesse使用SLIM測試系統 (關於SLIM調用關係還不清楚,參考上面框架原理介紹章節)
b)第二行定義了測試代碼Class文件所在路徑,本例Java class文件保存在「C:AndrewalipayautomationbirdieAutobin」
c)第三行引入class文件所在包
d)第四行說明了具體的class文件,本例爲「Calculator」
e)第五行開始具體測試內容部分:
前面2列 |first|second| 表示測試方法的輸入參數,以後每一個帶「?」列都是要測試的函數預期的返回值|addition?|minus?|multiply?|divide?|,測試執行時會將
前面測試參數傳入,而後調用函數計算結果,並跟相應列中測試數據,也就是預期值進行比較,若符合就經過,若不符合則算失敗。
f)接下來就幾行都是測試數據。每一行就是表明一個測試點。咱們以第一個測試點爲例說明一下:
|first|second|addition?|minus?|multiply?|divide?|
|4 |2 |6 |2 |8 |2.0 |
這表示將4做爲第一個參數,2做爲第二個參數輸入傳給addition函數,而後將返回值跟該列對應預期值6進行比較。其它列minus、multiply和divide相似處理。
備註:若測試代碼行之間有空行,可能會報以下錯誤:
STEP #4,編輯完成後,點擊保存按鈕,你的頁面以下
STEP #5,點擊頁面上test按鈕,將獲得下圖所示結果
執行結果第一行很清楚告訴有幾個測試(1個)、幾個斷言(12個),以及相應執行結果,還給出測試執行時間。
在表格上會標準執行了那個包、那個測試代碼類,每一個預期結果比對狀況。
若經過則顯示綠色,若失敗則顯示紅色。相似Junit展示方式。
STEP #6:爲了演示須要,讓咱們修改幾個錯誤預期值,好比:第一行測試數據加法預期從6改到7,第二行減法預期從5改到4,第三行除法從1.0改到2.0。
STEP #7:再次點擊Test按鈕,你們可看到它們變成紅色了,表示不符合預期測試失敗了。
Fixture/Table類型:
在FitNesse中,Fixture的表格類型支持多種類型,主要有:
一、列(Column)格式的Fixture,也就是上面例子樣子,使用最普遍。列直接對應待測函數的輸入參數和返回預期值,適合各種組合的輸入參數,而後跟預期結果比對。
二、行(Row)格式的Fixture,返回結果是列表的測試驗證,好比可用於根據某個條件查詢獲得不少行返回結果的測試狀況。
三、Action Fixture,支持工做流方式的一系列測試函數組合,可用於多個測試函數組合的業務測試類型。
!|ActionFixture||start|ActionFixtureTest||enter|firstPart|Hello||enter|secondPart|World||press|join||check|together|Hello, World|
建議:
本文介紹FitNesse框架原理、安裝以及經過簡單case一步步說明如何入門。該工具自己帶有user guide和不少用例演示,你們可進一步深刻了解。
從上文演示例子,你們可看到,該工具須要測試同窗掌握一些編碼技能,一旦咱們具有基本的編碼技能,那麼FitNesse就很是適合基於API或對外暴露接口的業務驗收測試,畢竟基於Wiki的頁面讓項目各方都很容易理解測試點和測試數據。
你還在等什麼,趕快試用起來吧!
結論:
敏捷測試中通常採用4個層次的測試:
一、自動化單元測試,通常基於Junit等Xunit系列
二、自動化驗收測試,可基於FitNesse
三、自動化UI迴歸測試,可基於Selenium或QTP等
四、手工測試
基於測試分層的金字塔原理,咱們應儘可能多采用自動化單元和驗收測試,而等底層足夠穩定,再開展UI自動化測試,這樣不只實現測試提早和儘早反饋的目的,並且讓UI自動化迴歸測試效率更高。
若是Junit通常由開發負責,那麼測試同窗就儘快把FitNesse用起來吧,提高一下測試工做的技術含量吧~