• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 軟件測試自動化中腳本開發經驗分享

    發表于: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

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>