Case3:對2個有序文件進行merge,構造case的時候,構造文件$1,$2進行 merge,如果$1先結束,會造成$1的最后一條還 會不斷打印出來,使文件無序,如果$2文件先結束,則不會出現該情況,構造數據驗證時要注意等價類劃分情況,保證所有情況都被測試到。
錯誤代碼:
77 awk ' 78 BEGIN{ 79 key_url="" 80 key_all="" 81 ret=1 82 } 83 { 84 if($2<'$OLDEST_TIME') next 85 url=$1 86 while( url>key_url){ ######修改為while(ret>0 && url>key_url) 87 if(key_all) print key_all 88 while((ret=getline line < "'$1'")>0){ 89 sp=index(line, " ") 90 tmp_url=substr(line, 1, sp-1) 91 if(tmp_url>key_url){ 92 key_url=tmp_url 93 key_all=line 94 break 95 } 96 print line 97 } 98 if(ret==0) break 99 } 100 print 101 } 102 END{ 103 if(ret) print line 104 while(ret=getline line < "'$1'"){ #######修改為((ret=getline line < "'$1'")>0 print line 105 print line 106 } 107 }' $2 |
4、加快腳本測試方法
做任何事情,如果想加快,都有一些熟知的方法:1、并行處理; 2、借助于工具,自動化不需要人工介入的部分;3、加快必須人工部分的速度。如果把上面的基本方式映射到我們的腳本測試中:
4.1 并行執行多個CASE
我們可以對多次運行做并行化。對于腳本類測試,大多數是挖掘類,基于一個比較復雜的測試周邊環境,但是,不會修改本模塊以外的環境和數據。
我們可以利用一個周邊環境,部署多個被測程序,通過修改conf來保證運行:
a)對同一臺機器部署多個不同目錄(減少搭建周邊環境)
b)對不同機器相同路徑部署(減少修改conf)
對不同目錄進行不同case運行。比如,新舊對比,性能,功能等同時進行。同時對多個粒度進行測試,避免因為某次運行,占用環境,而堵塞我們的測試過程。
4.2 借助工具
自動化操作步驟,這個我們自己可以編寫test腳本來完成,比如性能監控,環境清理等功能。
借助于自動化通用工具,比如類似編譯器的變量檢查,路徑檢查,函數接口檢查等,實現腳本之間調用關系和數據依賴關系的檢查等。對很多產品線的公共問題,統一處理,這些都是大組、專人來開發和維護。
4.3 腳本測試技巧
人是靈活的,不是所有的工作都適合自動化。腳本測試設計中和代碼邏輯強相關的部分,不易自動化,因為自動化要兼容多種可能性的時候,太復雜,而且不能保證100%的準確率,還是需要人工參與,比如:
問題1:if的異常分支,空文件構造,數據的清空邏輯,數據的歷史維護邏輯,ssh邏輯,如何快速驗證?
問題2:我們為了不同粒度的測試,需要多次運行腳本,有些腳本運行時間很長,是否可以一次運行,測試完所有粒度的功能?
上面這個例子中的一些技巧:
A)異常分支,我們可以通過添加語句mkdir –p a;rm a,來保證#?的檢測
B)構造各種邏輯,或者看代碼,看是否滿足線上對數據邏輯的需求。
C)中間數據的保留,對需要長時間運行的代碼塊兒,插上樁,將結果cp到其他文件,縮短時間,后續修改腳本代碼,利用備份的中間文件多次獨立運行,節省時間。
D)成功運行一次,和多次運行相結合,對中間文件如果在腳本被刪除,需要我們再需要關注的關鍵點cp得到bak文件,運行一次后,保證任何段的代碼(粒度),單獨都可以運行。加上多環境,我們就可以在一次成功運行后,測試完所有的功能,同時并行完成性能測試。)
E)多機不同用戶部署,可以變為單機不同用戶部署;總控和運行機器,也可以通過單臺模擬,和自己建立信任關系,來驗證功能。
原文轉自:http://www.uml.org.cn/Test/201206143.asp