qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          互聯網業務測試團隊如果快速構建輕量級的自動化




           做測試,自動化是一個繞不開的主題,而且也是非常值得去做的事情,無論是對測試質量和效率的提升,還是對人的能力的鍛煉,都是非常的有幫助。就目前個人觀察到的情況,一些負責基礎性組件測試的團隊,比如底層平臺、SDK等,或者是負責功能通用性高的產品,比如防火墻、郵件系統等,都可以做到比較高的自動化率,而且自動化測試開發的過程通常也沒有那么糾結。相比而言,強應用層業務相關的測試團隊,通常在自動化方面的開展要困難很多。我這里說的是比較全面的功能的自動化,不是指寫幾個簡單的腳步覆蓋幾個功能,大的思路是接口層面,不涉及UI的,而且可以制作大規模的用例。
            主要有幾個問題:
            1. 首要的問題是版本的節奏,互聯網的產品版本的節奏非???,一個20多人的測試團隊一周發布上百個功能特性是一件很普通的事情。團隊成員有非常多的精力消耗在這些功能版本上,需要快速的理解業務,構建測試環境,bug驗證回歸,以及發布上線等等,留給業務測試同學構建自動化用例的時間非常少。
            2. 功能非常的龐雜,而且有負責的業務流程,難以標準化。
            3. 說到自動化,大家會想到自動化框架,需要有一個比較好的自動化框架。自己開發或者維護過框架的同學可能都深有體會,這絕不是一件容易的事情,其工作量和持續的時間往往會超出我們的預期。我們是否有足夠的測試開發人力能做自己的框架,以及業務能否承受這樣的等待時間?
            互聯網行業的變化很快,線上功能變化按天算,業務調整和組織架構調整按月看,做一個大的框架如果在部門層面還有可能,到了業務測試團隊來說比較奢侈。很多方案是環境和需求逼出來的,細想下來,有兩條路,一是看部門的框架,二是有沒有輕量級的方案,可以快速的應用。
            這里結合我們自己的一些實踐來看看,也是一點淺顯的經驗。
            部門有一些平臺,但是有一些局限,主要是針對HTTP協議,另外對數據的準備支持不太好,也不支持DB的數據檢查等功能,另外就是不太方面去定制和擴展,相比而言更適合外網的監控,評估下來準備想想別的辦法。
            很多時候,過去的成功經驗往往會讓我們想復用,所以一開始的時候準備參照在以前公司做過的keyword driven的框架,把功能點封裝成一個個的步驟,然后通過配置文件來構造用例,實現自由的組合和數據驅動。這條路驗證過,而且看起來對現在的業務來說也沒有什么問題,能走通,但是就目前團隊的情況來看,開發一個這樣的框架的代價無法承受。
            考慮了很久,于是有了現在更輕量點的做法,寫出來給那些測試開發資源比較少的業務測試為主的團隊參考。
            如果想要快速,但是又功能豐富,最好的辦法就是抱一條粗腿,這里我們選的是JMeter。從2.2版本到最近的2.11,一直在關注和使用,發現JMeter的進步很快,版本活躍程度也很高,另外,它早就超出了一個HTTP性能測試工具的范疇,自動化測試其實是它另一個很大的主打,官方文檔也提到。
            選中JMeter簡單來說有幾點:
            1. 接口大部分HTTP協議,而JMeter對HTTP支持非常全面,畢竟是做這個出身的。如果有些接口不是呢?我們的做法是用寫adapter轉換,這里不詳述,所以寫用例這邊還是按HTTP協議走。
            2. 對數據提取和斷言非常多的支持。還可以支持直連DB,可能需要補充額外的驅動jar包,但是沒有技術障礙。
            3. 可以圖形界面,極大的方便了用例制作和調試。以前的經驗,我們做了命令行的功能點,后面為了大規模制作用例,還開發過web console,現在完全沒有必要,這一部分也省掉了。
            4. 可以命令行執行,這就意味著可以方面的被粘合到我們的腳本里面。
            5. 輸入和輸出都是文本,jmx和存成的csv都是文本,極大的方便了腳本的處理和結果的parse。
            還有更多細節的點不多說了,有了這些基本可行性就很高了。想要獨自開發上面這些功能得很大的代價,這也是輕量級能做到的主要原因。
            有了上面這些基本的骨架有了,但是要想想怎么整合成可復用和擴展的用例。
            基本的思路如下:
            1. 用例的分層,為了更好的復用和管理。CGI是最小的粒度,對應一個HTTP請求,完成一個很細節的操作。Function是一個對外有邏輯意義的歷史,比如下訂單,審核訂單。TestCase是一個成品,TestSuite是一個用例的集合。
            每個子系統的目錄組織如下:
            這里有個小的tricky的地方,為了部署的時候更靈活,希望腳本里面互相引用的文件是相對的路徑,但是JMeter支持不太好,默認的根目錄是bin,所以簡單的做法是把整個自動化用例的目錄copy到JMeter的bin下面。 2. 因為我們有多個系統,對應多個測試小組,大家各有專注,而我們電商的業務又是一個長鏈條。function層就是我們復用的基礎,里面再包含對CGI層接口的調用。這里有點JMeter的技術細節,2.10開始建議用TestFragment來組織,而TestFragment是不能直接執行的,只是些積木,到了TestCase層面再用ThreadGroup現場組,才可以執行。
            下面是一個完整的TestCase,include了本系統和其他系統的一些function座位步驟。用例細節其實還有很多需要打磨的地方,比如命名規范,執行起來不容易。
            3. 自動化的報告,每次執行完了之后自動的發郵件報告出來。
           為了更好的定位問題,需要把每個接口執行的細節也暴露出來,點擊詳情可以看到調用的情況,包括request和response的數據。
            除了好處,也有一些不方便的地方:
            1. JMeter在include其他的jmx腳本后,不能直接在界面顯示加載的內容,所以看不到被include的腳本里面的步驟,調試的時候不方便。不過好在JMeter可以一套binary啟多個,并著看。
            2. 最后的結果報告里面,不能控制展示的粒度,是直接攤開成CGI層面的步驟,顯得比較雜。
            目前我們執行的情況
            1. 目前覆蓋了200多個CGI接口,以及100多個功能點,初步有4個系統掛接到了自動部署后的執行。用例還在進一步的擴展中,框架不需要改動。JMeter本身的穩定性還是不錯的。
            2. 整個過程,不算制作用例的時間,我們實際投入的測試開發的人力合起來不到一個人月。
            3. 大部分業務測試同學都參與到了用例的制作,提升了對業務邏輯的理解,并且對部分同學來說,也補了HTTP協議等基礎知識的課,實際動手比聽聽培訓效果要好。
            從實際的效果和投入來說還是比較滿意的。
            除了技術層面,自動化執行起來有幾個核心的要點:
            1. 一定要強掛鉤到測試和發布的環節。
            這一點看起來沒那么重要,但是如果不希望自動化成為花瓶,就必須要這樣做。像互聯網產品這樣快的節奏跑起來,任何花哨的環節會逐漸被洗掉,因為人員的配比和版本的數量,不是必做的東西慢慢就堅持不下來。所以自動化如果要能發揮效果,目前來看最合適的點是在每次自動部署后快速的刷一遍,在手工測試開始之前。而且如果要人工去點,這事兒時間長了也不靠譜,一定要把這個過程也自動化,版本在測試環境部署好了之后,自動化自動跑完,這就是強的掛鉤。
            2. 報告也是要自動的,并且郵件抄送給相關的開發,測試和團隊的負責人。我們現在的做法是跑完了腳本解析后自動的發郵件報告。
            3. 非100%成功的都要跟進。
            寧愿少而精,這個也類似broken window理論,如果能容忍一個用例失敗,就會有2個,3個,也會讓自動化慢慢失去意義。目前的做法是只要有失敗,對應系統的負責同學要郵件reply all跟進原因。
            4. 關注用例的細節
            團隊的負責人要去看用例的質量,而不只是用例的數量和執行情況,比如斷言做到什么程度,哪些是寫死的哪些參數化了,功能之間的復用情況。其實這個和所有的事情一樣,如果真的重要,就應該要跳進去關注細節。
            其實說起來上面沒有什么高深的地方,道理也淺顯,可能是工作久了會變得更加務實,最怕做了沒有用的東西。
            1. 關于技術含量的問題,不糾結。當然,有能力和精力做到技術含量很好。但是沒有技術含量但是有價值 > 有技術含量效果不好。
            2. 盡可能的復用好的組件,核心的引擎不一定要自己做,特別是業務測試團隊。用開源組件,自己開發特點需求,并把它們粘合起來。
            以上粗略的整理,希望給那些想要做功能自動化,但是又受限于非常快得功能版本節奏,也沒有大量測試開發人力的業務測試團隊一點參考。





          31/3123>






          posted on 2014-07-10 19:23 順其自然EVO 閱讀(323) 評論(0)  編輯  收藏 所屬分類: selenium and watir webdrivers 自動化測試學習

          <2014年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 白水县| 镇赉县| 和平区| 博野县| 肥东县| 江源县| 福贡县| 塔河县| 南充市| 舒兰市| 乌兰县| 灌南县| 旌德县| 珠海市| 射洪县| 合阳县| 贵港市| 曲松县| 凤庆县| 汝州市| 磐石市| 循化| 大埔区| 文山县| 八宿县| 萍乡市| 宽城| 麻城市| 抚顺市| 平果县| 兴城市| 化州市| 灯塔市| 长葛市| 定边县| 贵南县| 山西省| 双辽市| 甘孜县| 岑巩县| 都兰县|