1、腳本測試特點
腳本語言語法簡單靈活,與效率不是很相關的部分,使用腳本比較方便。對于多個文件的讀寫和控制,有比較成熟的庫,幾行代碼可以解決C、C++需要較多代碼才能實現的功能。特別是對多文件的處理,數據流動和處理比較復雜的情況。
腳本語言的劣勢在于,缺乏嚴格的編譯環節,變量定義,函數定義等問題發生概率比較大,會多制造一些障礙給測試人員。上帝關上一扇門,同時也開啟了另一扇 門,解釋性的運行方式,使我們很容易在程序中插入測試代碼,從而靈活的進行測試,對程序代碼行、函數、代碼段、腳本,都能在不同的粒度上進行控制,測試更 加徹底,不易出現漏測問題。
2、打好語言基礎
對腳本的快速測試,需要基于一定的語言基礎,增強對腳本執行的調試能力:
1)sh –vx 執行看變量,sh –n 基本語法檢查
2)快速多行注釋,%s,快速注釋多行方法“<<標記 標記”
3)熟悉awk,shell的基本語法, 基本用法
4)掌握awk快速對數據的分析能力
5)Perl、python的調試能力
3、如何做到無漏測
從問題角度出發,看存在哪些類問題,發現階段最早在?
1)歷史漏測點
A) Awk漏測,數據測試不充分,基于構造的方法比較困難,(看懂代碼+理解邏輯+異常構造)
比如awk中的數據處理的第一條和最后一條是否符合預期,awk內存占用是否正常,可優化,數據的處理結果是否和預期一致。
B)上線單漏測
復雜上線單中的驗證,上線的時間點是否合理(非線上運行時間)
C)多級環境部署漏測
多機環境下需要模擬,遠程登錄執行或者scp數據,用戶之間要有信任關系,如spider@A到work@B的信任關系,需要在前面加上用戶名,否則ssh B會有問題。
2)歷史bug(可能漏測點)
知史而至今,前提是知史,需要對前面的問題有個學習,避免今后工作中出現。
3)無遺漏發現問題
從發現途徑上,單步執行、分塊執行、整體執行、考慮重復多次執行環境問題。從多個層次上對腳本進行測試和考慮,從細節->功能->整體運行維護:
A)Sh –x,sh -n 單步執行
解決語法問題、變量問題、文件存在性問題。
B)分塊兒執行
避免語法、邏輯問題、異常處理驗證、下載驗證、md5驗證、數據驗證
C)整體多次執行考慮
線上是多次運行,歷史數據維護,會不會有硬盤問題,會不會自動清理歷史文件,歷史文件的清理是否正確。
D)可維護角度
報警是否合理,是否報警過多。
E)上線階段
上線時間是否合理,是否正在運行中,上下游數據準備好的時間是否有足夠的時間緩沖。
F)上線檢查
對log進行檢查,及時發現問題。
從以上幾個角度出發,測試的過程是完整的,有效地避免了bug中的大部分。測試難點在于: 大awk的測試,異常測試、數據流程理解和數據異常測試、歷史環境、復雜上線單測試、多機環境部署配合測試。
本次只是針對awk測試重點進行講述,awk如果出問題都是數據問題,影響效果,下面針對awk的陷阱做了一些總結:
Case1:代碼閱讀發現缺陷,基于邏輯的數據檢查,注意第一條和最后一條的輸出邏輯:
16 awk 'BEGIN{ 17 pre_user="";check=0;dead=0 20 }{ 21 # pattern need check 22 if(ARGIND==1) 23 dict[$1]=$2; 24 else{ 25 t=split($1,a,"/"); 26 p1=a[1]"/"a[2]"/"; 27 p2=a[1]"/"; 29 if(p1 in dict) 30 p=p1; 31 else if (p2 in dict) 32 p=p2; 33 else next; 34 if(check!=0&&p!=pre_user){ 35 print p,check >>"'$3'"; 36 37 if(check==dead) 38 { 39 if(check>=dict[p]) 40 print p,check >>"'$4'"; 41 else print p,check >>"'$5'"; 42 } 43 check=0 44 dead=0 45 } 46 check++; 47 if($3==0) dead++; 48 pre_user=p 49 } 50 }' $1 $2 |
Case2:腳本中dump.sh調用filter.awk時,取不到dump.sh中使用的 shell變量,DEL_REASON的變量值,導致 從LINKBASE上取到的數據經filter.awk處理后沒有任何數據輸出,dead.url_age.[$i]永遠為空。
原文轉自:http://www.uml.org.cn/Test/201206143.asp