Xebium詳解09-FIT引擎

在前面談到了另一套FIT引擎,接下來大致介紹一下。SLIM採用的直接用關鍵詞調用,關鍵詞固定,所以可以直接調用已經寫好的類,採用行讀取,每一列的的寫法如下:

|script |Classe Name| // 調用類

|keyword |Function in Class | import value | //check,show,reject,check not....關鍵詞調用類方法,傳入值個數和方法的傳入變數個數一致

|$var= |Function in Class; | import value 1 | import value 2 | //類之間用頁面變數傳遞值,以及用方法傳入多個值

而FIT引擎則是通過Fixture(夾具)來調用其它Class,自己實現關鍵詞(相當於方法名),自定義讀取方式(行讀或者列讀),調用後是否銷毀等。從個人經驗來說,比較傾向於SLIM引擎,因為固定,大家遵守規範即可;FIT則需要看Fixture的源代碼,否則都不知道怎麼調用第三方Class,不利於系統的推廣使用和團隊共享。如果只是個人使用,在界面上可能更為簡潔,而且,與第三方系統集成時,可能自定義一些keyword,用這種方法就有優勢了,所以大家有必要了解一下。

1. 要寫fixture,因為需要擴展系統讀取方法等內容,所以必需用到fixturegallery.jar和fitnesse-standalone.jar,代碼內把這2個jar文件放入lib即可。同樣在寫Xebium腳本的時候需要把這2個文件放入Class Path,另外需要告知系統採用FIT引擎:

!define TEST_SYSTEM {fit}

!path .libfitnesse-standalone.jar

!path .libfixturegallery.jar

2. 從gallery中原有的Class繼承,比如:RowFixture,ColumnFixture,我整理了一張表,大家可以看下:

FIxtureGallery可繼承類

3. 類間傳值,代碼中添加如下兩個方法即可:

public Object symbolValue(String s){

return Fixture.getSymbol(s);

}

public void setSymbolValue(String symbol, String value){

Fixture.setSymbol(symbol, value);

}

腳本中如果需要給變數賦值,那麼=function();如果要傳入方法,那麼function=;如果只是要把方法結果輸出顯示,那麼function?

下面我來舉個例子吧,代碼是用Xebium繼承ColumnFixture(類似於SLIM的腳本讀取輸出格式)來實現。

先看代碼,用於生成不重複的文件:

import java.io.File;import fit.ColumnFixture;import fit.Fixture;public class GenerateFolder extends ColumnFixture{ private String parentFolder = ""; private String timestamp = String.valueOf(System.currentTimeMillis()); public void setParentFolder(String parentFolder) { this.parentFolder = parentFolder; } public String generateFolder(){ if(!parentFolder.endsWith(File.separator)){ parentFolder = parentFolder+File.separator; } String dir = parentFolder+"Report_" + timestamp; File folder = new File(dir+File.separator); folder.mkdir(); return dir; } public String name(){ return "Report_"+ timestamp; } public Object symbolValue(String s){ return Fixture.getSymbol(s); } public void setSymbolValue(String symbol, String value){ Fixture.setSymbol(symbol, value); }}

前面的關注點已經說過了,我不重複了,來看腳本如何寫:

!define TEST_SYSTEM {fit}

!path .libfitnesse-standalone.jar

!path .libfixturegallery.jar

!path .libUtil.jar

!define TestResultDir {!-C:/Xebium/FitNesseRoot/files/jmeterResult-!}

# Util.jar ColumnFixture繼承的類,自己Coding,打包成jar

!| com.tools.GenerateFolder |

| parentFolder | =generateFolder() | =name() |

| ${TestResultDir} | ResultRecord | Name |

Xebium的腳本顯示如下:

Fit引擎的腳本

顯示為:

大家可以自己運行查看結果。


Class中,方法的尋找的方法為:先找同名的方法(如:setParentFolder),一旦找不到,那麼會去找parentFolder或者parent folder。所以,腳本里方法名同源碼中對應不上。同樣的,如果有返回的方法,那麼可以用get前綴,腳本中寫不寫都無所謂。

變數ResultRecord和Name因為column中定義了是從方法返回賦值,所以之後可以調用。如:

!| com.tools.GenerateJMeterCommand |

| testPlanFile | logFile= | resultFolder= | generateBATFile? |

| !-C:/Xebium/lib/JMeterTestPlan-! | Name | ResultRecord | |

最後,Fitxture的調用方法,不是用|script|開始了,而是!|ClassName|來表示了。


推薦閱讀:

漫談自動化測試
同學,你為什麼定位不到元素?
面試官:你是怎麼測試介面測試的?
Xebium詳解07-操作DB
性能測試解惑之並發壓力

TAG:自動化測試 | 軟體測試 | 軟體測試和開發 |