軟件測試自動化中腳本開發經驗分享

發表于:2014-08-27來源:uml.org.cn作者:不詳點擊數: 標簽:腳本
腳本語言語法簡單靈活,與效率不是很相關的部分,使用腳本比較方便。對于多個文件的讀寫和控制,有比較成熟的庫,幾行代碼可以解決C、C++需要較多代碼才能實現的功能。特別是

  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

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97