概述:前面已經提到,基礎框架trade-federation預設就支援很多命令。在控制台輸入一組命令,肯定要經過解析,然後去執行的過程。基礎框架中對於命令有乙個單獨的資料結構去組織,並不是通過if-else
這樣去比較string的。比如:前面提到的命令:run cts --plan cts
,這個命令中,run才是命令,而剩下的都屬於引數;再比如:list configs
,還有命令的簡寫,list
可以簡寫為l
等等。
trie樹又稱為字典樹,又叫做單詞查詢樹。主要用於文字檢索以及詞頻統計等。有乙個很大的優點就是能夠減少無效匹配的次數。
實現方式:從root節點開始,每個節點儲存乙個字元。每次在向樹中儲存字串的時候,根據單詞中字元的順序,逐個向樹的每層去存放,如果該層已經有該字元,就去取下乙個字元。
例:現在有一些單詞:t,tx,txt,to,txa,too,a,b
構建成為字典樹如圖所示
看這個圖就能一目了然,因為共字首,能夠加快查詢效率,且查詢以及構建的過程可以同時進行。
regextrie是在這個基礎框架中的乙個工具類,實現跟上面的trie很像,但是還是有區別的:區別就在於regextrie的節點上存放的是正規表示式,也就是支援的命令的正規表示式。
基礎框架中支援兩種命令:定長命令以及變長命令。
定長命令:list configs
– 固定的字串(包括簡寫)
變長命令:run cts --plan cts
– 後帶變長引數
樹的結構:
接下來看下實現:
首先是這個類中的變數:
private v mvalue = null;
private map> mchildren = new linkedhashmap>();
2.1 putpublic v put(v value, string... regexen)
pattern pat = pattern.compile(regex);
// 把所有的正規表示式裝進list,準備往樹中存放
plist.add(new comppattern(pat));
}return validateandput(value, plist);
}private v validateandput(v value, listplist)
return recursiveput(value, plist);
}v recursiveput(v value, listpatterns) else
return nextchild.recursiveput(value, nextkeys);}}
這個就是樹的構建,使用就在console
類中:
首先是定長命令:
trie.put(new runnable()
}, list_pattern, "d(?:evices)?");
可見在存放的時候就把是以正規表示式做為引數。
然後是變長命令:
argrunnablerunruncommand = new argrunnable()
string flatargs = new string[args.size() - startidx];
for (int i = startidx; i < args.size(); i++)
try catch (configurationexception e)
}};// 可以看到對於run這個正規表示式,因為這個命令就是為了執行的,肯定是要帶引數的
// 因此,往樹中存放的時候最後一引數為null
// 上面put時對於null的判斷也就是為了處理這種情況
// 這個地方存放的時候存入的v直接就是乙個runnable物件了
trie.put(runruncommand, run_pattern, null);
protected
static
final string run_pattern = "r(?:un)?";
2.2retrievepublic v retrieve(list> captures, string... strings)
// 在取的時候就是根據控制台的輸入了,同樣是變長引數
listslist = arrays.aslist(strings);
if (captures != null)
return recursiveretrieve(captures, slist);
}// 遞迴匹配
v recursiveretrieve(list> captures, liststrings) else
matcher matcher = pattern.matcher(curkey);
// 正規表示式match
if (matcher.matches())
captures.add(curcaptures);
}// 遞迴
return child.getvalue().recursiveretrieve(captures, nextkeys);}}
// 如果是通配模式,則返回所有的剩餘引數
if (wildcardmatch)
}return wildcardvalue;
}return
null;}}
可以看到在取的時候正式根據引數的list逐個去和樹中每個節點上的正規表示式進行match,如果可以匹配則進入子樹繼續,直到引數取完,此時拿出對應的v。
基礎框架中通過這樣乙個正規表示式字典樹的結構,在初始化的時候就把自己支援的命令以及這個命令要執行的action – runnable物件存進了樹,在使用者輸入引數之後直接去樹中取,可以說是取值以及匹配同時進行,直道拿到對應的runnable物件,取出執行。
雖然這樣對於命令的支援很到位,但是這樣的資料結構也優缺點,就是對於資料量小的話支援比較到位,但是當資料量很大,那這個樹就會很大,效率也就沒有那麼高了。
CTS測試框架 總結
針對v1版本的框架,因為框架做的事情比較多,而且需要plan的組織,新增case除了需要把case寫好之外,還需要配置case的xml檔案,寫好每條case,放到制定目錄,另外如果想要根據plan來執行的話還需要在plan中進行配置。針對v2版本的框架,配置起來要簡單的多,只需要在case寫好之後配...
CTS測試方法
1.準備一台測試機器a,一張可以打 發簡訊的sim卡,一張16g的高速tf卡 推薦閃迪class10等級,讀寫速度95m s 還需要能夠連線youtube 的網路 推薦使用2m的香港專線 2.首先把a恢復出廠設定,然後連線電腦在terminal下進入到media資料夾輸入一下命令拷貝檔案到a的記憶體...
CTS測試介紹
cts測試基本介紹 cts測試全稱為系列相容測試 compatibility test suite cts是為了測試手機是否符合google定義的相容性規範 compatibility definition 從而基於android的應用程式能在基於同乙個api版本的裝置上面執行。通過cts測試的裝置...