自動化腳本-TCL語言使用以及個人體會

 

在我還沒正規接觸過自動化相關的測試,一直沒有使用過腳本語言,都是偏CC++較多,當我在第一個項目接觸了TCL之後,發現這個腳本語言雖然不是太多人用,但是非常實用而且很方便.(由於剛開博,所以東西比較少,後續發技術相關的會更細節些)

 

個人總結我工作中實用腳本語言處理的幾個任務:處理文本,I/O輸入輸出,正則表達式,數據匹配,和內嵌html網頁語言.

 

第一個處理文本是tcl的強項,他能夠通過seek關鍵來獲取你的文本光標所在的位置,可以對你想要的部分進行處理.用得最多的地方就是取你想要的日誌.執行動作前獲取光標的位置,執行動作後再一次獲取光標位置,然後就可以把其中這2個位置之間的信息拷貝出來,進行日誌分析.相關指令:

可以使用seek命令來改變文件的訪問點:

seek fileId offset   ?origin?         fileId標識的文件的訪問點設置爲相對於origin偏移量爲offset的位置。origin可以是startcurrentend,默認是start。命令的返回值是一空字符串。

例如:seek fileId  2000   改變fieleId標識的文件訪問點,以便下次讀寫開始於文件的第2000個字節。

seek的第三個參數說明偏移量從哪開始計算。第三個參數必爲start,currentend中的一個。start是默認值:即偏移量是相對文件開始處計算。current是偏移量從當前訪問位置計算。end是偏移量從文件尾開始計算。

 

tell fileId     返回fileId標識的文件的當前訪問位置。

eof fileId    如果到達fileId標識的文件的末尾返回1,否則返回0

 

處理文本中,tcl還有個強大的打開文件功能,這裏我們經常用來記錄日誌是非常不錯的:

下面介紹上述過程中用到的幾個基本的文件輸入輸出命令。

open name?access?     

open命令以access方式打開文件name。返回供其他命令(gets,close)使用的文件標識。如果name的第一個字符是“|”,管道命令被觸發,而不是打開文件。

文件的打開方式和我們熟悉的C語言類似,有以下方式:

r     只讀方式打開。文件必須已經存在。這是默認方式。

r+   讀寫方式打開,文件必須已經存在。  

w   只寫方式打開文件,如果文件存在則清空文件內容,否則創建一新的空文件。

w+ 讀寫方式打開文件,如文件存在則清空文件內容,否則創建新的空文件。

a     只寫方式打開文件,文件必須存在,並把指針指向文件尾。

a+   讀寫方式打開文件,並把指針指向文件尾。如文件不存在,創建新的空文件。

 

 

而下面所說的I/O輸入輸出,大家要弄清楚一個理念,無論是執行進程,執行telnet,執行文本處理,都要有通道的概念,把一切讀寫的東西都歸類爲一種東西,這樣你就更好的處理以下的東西了,所以大家需要掌握的就很簡單了:putreadafter…..然後注意封裝每個不同情況的處理就行了。

 

 

正則表達式和數據匹配大多用來判斷結果和作爲比較語句用比較多,給一個建議,能儘量不用正則表達式就不用,因爲對於測試腳本來說,他的風險相對較大,一般情況下儘量用string

string命令的語法:string   option  arg?arg...?

string命令具有強大的操作字符串的功能,其中的option選項多達20個。下面介紹其中常用的部分。

1.1.1  stringcompare ?-nocase? ?-length int? string1 string2

 把字符串string1string2進行比較,返回值爲-101,分別對應string1小於、等於或大於string2。如果有-length參數,那麼只比較前int個字符,如果int爲負數,那麼這個參數被忽略。如果有-nocase參數,那麼比較時不區分大小寫。

1.1.2  string equal ?-nocase? ?-length  int?string1string2

把字符串string1string2進行比較,如果兩者相同,返回值爲1,否則返回0。其他參數與8.5.1同。

1.1.3  string firststring1string2?startindex?

 string2中從頭查找與string1匹配的字符序列,如果找到,那麼就返回匹配的第一個字母所在的位置(0-based)。如果沒有找到,那麼返回-1。如果給出了startindex變量,那麼將從startindex處開始查找。例如:

% string first ab defabc

3

% string first ab defabc 4

-1

1.1.4  string  indexstringcharIndex

 返回string中第charIndex個字符(0-based)charIndex可以是下面的值:

 整數n:字符串中第n個字符(0-based)

 end :最後一個字符

 end-整數n:倒數第n個字符。string index "abcd" end-1返回字符'c'

 如果charIndex小於0,或者大於字符串string的長度,那麼返回空。

例如:

% string index abcdef 2

c

% string index abcdef end-2

d

1.1.5  string   last  string1 string2  ?startindex?

參照8.5.3.唯一的區別是從後往前查找

1.1.6  string   length    string

返回字符串string的長度.

 

1.1.7  stringmatch ?-nocase?patternstring

 如果pattern匹配string,那麼返回1,否則返回0.如果有-nocase參數,那麼就不區分大小寫.

pattern中可以使用通配符:

*       匹配string中的任意長的任意字符串,包括空字符串.

?       匹配string中任意單個字符

[chars] 匹配字符集合chars中給出的任意字符,其中可以使用A-Z這種形式

\x      匹配單個字符x,使用'\'是爲了讓x可以爲字符*,-,[,].

例子:

% string match * abcdef

1

% string match a* abcdef

1

string match a?cdef abcdef

1

% string match {a[b-f]cdef} abcdef //注意一定藥用'{',否則TCL解釋器會把b-f當作命令名

1                                   //從而導致錯誤

% string match {a[b-f]cdef} accdef

1

1.1.8  string  range   stringfirst  last

 返回字符串string中從第first個到第last個字符的子字符串(0-based)。如果first<0,那麼first被看作0,如果last大於或等於字符串的長度,那麼last被看作end,如果firstlast大,那麼返回空。

1.1.9  string  repeat   string  count

 返回值爲:重複了string字符串count次的字符串。例如:

% string repeat "abc" 2

abcabc

1.1.10string   replace    string  first   last?newstring?

  返回值爲:從字符串string中刪除了第first到第last個字符(0-based)的字符串,如果給出了newstring變量,那麼就用newstring替換從第first到第last個字符。如果first<0,那麼first被看作0,如果last大於或等於字符串的長度,那麼last被看作end,如果firstlast大或者大於字符串string的長度或者last小於0,那麼原封不動的返回string

1.1.11string  tolower  string ?first?  ?last?

  返回值爲:把字符串string轉換成小寫後的字符串,如果給出了firstlast變量,就只轉換firstlast之間的字符。

1.1.12string  toupper string  ?first?   ?last?

  8.5.11。轉換成大寫。

1.1.13string  trim   string  ?chars?

  返回值爲:string字符串的首尾刪除掉了字符集合chars中的字符後的字符串。如果沒有給出chars,那麼將刪除掉spacestabsnewlinescarriage returns這些字符。例如:

% string trim "abcde" {a d e}

bc

% string trim " def

> "

def

1.1.14string trimleft string?chars?

 8.5.13。不過只刪除左邊的字符。

1.1.15string  trimright   string  ?chars?

 8.5.13。不過只刪除右邊的字符。

 

 

 

最後總結:本人第一次能夠完全做測試持續集成的過程包括:自動化檢測安裝包,自動拷貝和卸載安裝,自動執行很多用例,自動出結果,把失敗用例郵件發給各個關注的人都是全自動每日定時跑的,其中90%都是用tcl完成,雖然只是項目的代碼實施者,但是後續有機會把tcl用在新的項目中,試着作爲架構搭建的角色完成一個自動化項目,還是一個不錯的腳本後盾。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章