在5.測(cè)試前的一些準(zhǔn)備工作中談到了另一套FIT引擎茂契,接下來(lái)大致介紹一下蝶桶。SLIM采用的直接用關(guān)鍵詞調(diào)用,關(guān)鍵詞固定掉冶,所以可以直接調(diào)用已經(jīng)寫好的類真竖,采用行讀取脐雪,每一列的的寫法如下:
|script |Classe Name|? ? ? ? ? // 調(diào)用類
|keyword |Function in Class | import value |? ? ?//check,show恢共,reject战秋,check not....關(guān)鍵詞調(diào)用類方法,傳入值個(gè)數(shù)和方法的傳入變量個(gè)數(shù)一致
|$var= |Function in Class; | import value 1 | import value 2 |? ? ? //類之間用頁(yè)面變量傳遞值讨韭,以及用方法傳入多個(gè)值
而FIT引擎則是通過(guò)Fixture(夾具)來(lái)調(diào)用其它Class脂信,自己實(shí)現(xiàn)關(guān)鍵詞(相當(dāng)于方法名),自定義讀取方式(行讀或者列讀)透硝,調(diào)用后是否銷毀等狰闪。從個(gè)人經(jīng)驗(yàn)來(lái)說(shuō),比較傾向于SLIM引擎濒生,因?yàn)楣潭癖茫蠹易袷匾?guī)范即可;FIT則需要看Fixture的源代碼罪治,否則都不知道怎么調(diào)用第三方Class秋泄,不利于系統(tǒng)的推廣使用和團(tuán)隊(duì)共享。如果只是個(gè)人使用规阀,在界面上可能更為簡(jiǎn)潔恒序,而且,與第三方系統(tǒng)集成時(shí)谁撼,可能自定義一些keyword歧胁,用這種方法就有優(yōu)勢(shì)了,所以大家有必要了解一下厉碟。
1. 要寫fixture喊巍,因?yàn)樾枰獢U(kuò)展系統(tǒng)讀取方法等內(nèi)容,所以必需用到fixturegallery.jar和fitnesse-standalone.jar箍鼓,代碼內(nèi)把這2個(gè)jar文件放入lib即可崭参。同樣在寫Xebium腳本的時(shí)候需要把這2個(gè)文件放入Class Path,另外需要告知系統(tǒng)采用FIT引擎:
!define TEST_SYSTEM {fit}
!path .\lib\fitnesse-standalone.jar
!path .\lib\fixturegallery.jar
2. 從gallery中原有的Class繼承款咖,比如:RowFixture何暮,ColumnFixture,我整理了一張表铐殃,大家可以看下:
3. 類間傳值海洼,代碼中添加如下兩個(gè)方法即可:
public Object symbolValue(String s){
????return Fixture.getSymbol(s);
}
public void setSymbolValue(String symbol, String value){
????Fixture.setSymbol(symbol, value);
}
腳本中如果需要給變量賦值,那么=function()富腊;如果要傳入方法坏逢,那么function=;如果只是要把方法結(jié)果輸出顯示,那么function是整?
下面我來(lái)舉個(gè)例子吧肖揣,代碼是用Xebium繼承ColumnFixture(類似于SLIM的腳本讀取輸出格式)來(lái)實(shí)現(xiàn)。
先看代碼浮入,用于生成不重復(fù)的文件:
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);
????}
}
前面的關(guān)注點(diǎn)已經(jīng)說(shuō)過(guò)了龙优,我不重復(fù)了,來(lái)看腳本如何寫:
!define TEST_SYSTEM {fit}
!path .\lib\fitnesse-standalone.jar
!path .\lib\fixturegallery.jar
!path .\lib\Util.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)秽晚,一旦找不到,那么會(huì)去找parentFolder或者parent folder筒愚。所以赴蝇,腳本里方法名同源碼中對(duì)應(yīng)不上。同樣的巢掺,如果有返回的方法句伶,那么可以用get前綴,腳本中寫不寫都無(wú)所謂陆淀。
變量ResultRecord和Name因?yàn)閏olumn中定義了是從方法返回賦值考余,所以之后可以調(diào)用。如:
!| com.tools.GenerateJMeterCommand |
| testPlanFile | logFile= | resultFolder= | generateBATFile? |
| !-C:/Xebium/lib/JMeterTestPlan-! | Name |? ResultRecord | |
最后轧苫,F(xiàn)itxture的調(diào)用方法楚堤,不是用|script|開始了,而是!|ClassName|來(lái)表示了含懊。