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,我整理了一張表,大家可以看下:
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的腳本顯示如下:
顯示為:
大家可以自己運行查看結果。
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
※性能測試解惑之並發壓力