互聯網業務測試團隊如果快速構建輕量級的自動化
做測試,自動化是一個繞不開的主題,而且也是非常值得去做的事情,無論是對測試質量和效率的提升,還是對人的能力的鍛煉,都是非常的有幫助。就目前個人觀察到的情況,一些負責基礎性組件測試的團隊,比如底層平臺、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. 自動化的報告,每次執行完了之后自動的發郵件報告出來。
做測試,自動化是一個繞不開的主題,而且也是非常值得去做的事情,無論是對測試質量和效率的提升,還是對人的能力的鍛煉,都是非常的有幫助。就目前個人觀察到的情況,一些負責基礎性組件測試的團隊,比如底層平臺、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. 自動化的報告,每次執行完了之后自動的發郵件報告出來。
posted on 2014-07-10 19:23 順其自然EVO 閱讀(323) 評論(0) 編輯 收藏 所屬分類: selenium and watir webdrivers 自動化測試學習