qileilove

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

          基于Sahi和Twist搭建的Web自動化測試框架

           Twist是一個基于Eclipse開發的自動化測試平臺,它是ThoughtWorks公司的一款商業軟件。Sahi是一個Web自動化工具,有Tyto公司創建,具有免費版和專業版兩個版本。作者將在本文中簡單介紹一下這兩個工具,以及基于它們搭建的輕量級Web自動化測試框架,最后重點跟讀者分享一些個人使用的經驗和技巧。

            在介紹Sahi之前,首先簡單描述一下作者參與的項目。這個項目是為一家公司做商業應用的實施。由于時間緊迫,測試人員較少,大部分時間都是在針對主要功能做手工測試。為了減少一些重復的手工勞動,我們決定搭建一套Web自動化框架。這個框架需要符合以下條件:1、搭建迅速,易于維護;2、使用簡單,易學易用,降低測試人員的學習成本。3、由于業務流程比較復雜,希望在測試用例失敗的時候能夠方便測試人員快速準確的定位并重現問題。考慮到以上幾點,再加上這個項目只需要對一些常用重復的流程進行自動化,我們放棄了以前搭建過的一套比較成熟的測試框架,轉而決定使用Sahi和Twist來搭建一個輕量級的Web自動化框架。

            Sahi是一個比較成熟的Web自動化工具,使用它可以輕松的對Web頁面操作進行錄制和回放。作者曾經使用過一段時間的Selenium,就個人經驗而言,Sahi在元素定位,頁面等待上更有優勢一些。Twist是一個可協作的功能測試平臺,之所以稱為平臺,是因為它提供了很多有用的功能來幫助測試人員編寫和管理測試用例。Twist有個很好的特性是同時支持用戶手工和自動化運行測試用例。這點可以讓我們在得到功能需求后,先在Twist里建好測試場景,并根據業務邏輯寫下測試步驟,等到被測功能比較穩定后,再決定自動化哪些測試用例,而那些業務邏輯和自動化腳本可以很好的在Twist中被關聯起來,如圖1所示。

          圖1 Twist中的測試場景

            在結合Twist的一些特性和Sahi的錄制回放功能后,我們將測試框架設計如下圖所示:

          圖2 基于Sahi和Twist的Web自動化測試框架

           這個框架并沒有什么特別復雜的地方,基本就是將Sahi中的Java API進行封裝,然后使用Twist中的已有功能來對系統進行自動化測試。下載兩個工具后,就可以進行測試場景的編寫和自動化。下面是作者在這個項目中總結的一些經驗和技巧:

            1、把握好測試場景描述的粒度。在Twist的場景中,應盡量使用業務語言來描述測試步驟,而避免使用操作性的語言。在Twist幫助文檔中有一章高級指導(Advanced Tutorial),其中專門提到在不犧牲可讀性的前提下,應最大限度的用抽象概念來描述步驟。這里的抽象概念就是指的具體業務邏輯。但就個人經驗而言,抽象還是有度的,太抽象的描述復用性就不夠好了。讀者可通過多嘗試多思考來把握這個描述的粒度。

            2、為測試場景加標簽并按順序為其命名。可能大家比較習慣于為一個待測功能單獨建立一個文件夾,并將測試場景都放在里邊,但由于在Twist視圖下,只對Scenario目錄下的場景可見,如果在其目錄下建立子目錄,將無法使用Filter的功能。所以建議為每一個場景加上標簽,可以是功能的編號或名稱,這樣就可以分類查看和運行了。另外,在Twist視圖中,所有的場景是按名稱的字母序來排列的,故建議在場景名稱前加01,02,......。(eg.01Login,02SearchBook.加0是因為根據字母序11是在1和2之間的)這樣便于查找以及管理場景執行的先后順序。

            3、當用Sahi定位動態生成的頁面元素時,應使用in,near等方法配合別的頁面元素來進行定位。比如測試步驟為點擊一個數據列表中某一行里的圖片鏈接,如果使用Sahi錄制,生成出來的元素ID可能跟HTML里的元素ID一樣,也可能是一串很長的數字,可讀性較差,測試代碼也較難維護,這時可以先根據序列號或者標題字符串等定位到該行的某一個位置,再結合Sahi中in和near方法,定位到這行上的圖片鏈接。

            4、需要用多組數據來測試同一場景時,盡量使用Twist中提供的Data Table功能。在Twist里,可以將來自不同數據源的數據導入到測試中,并且支持選擇每次需執行的幾組數據。

            5、完善錯誤處理機制。在場景運行失敗的時候,可加入一段代碼,截屏保存當時的出錯頁面,同時,將被測系統的日志文件截取部分放到指定文件夾,這樣就能更加方便地分析定位問題。(在Sahi專業版中可直接使用takeSnapShot()方法進行截屏,如果使用免費版,可使用其它方法實現,例如類java.aw.Robot中的createCapture()方法)

            6、導出build.xml文件,整合其它工具。在Twist中,我們可以導出ant文件,并且編寫我們需要的task,例如在不同瀏覽器上運行,或者是運行某一標簽的測試場景等,這樣就可以在不打開Twist的情況下,通過運行命令行的方式來執行測試。這些命令還可以放到其它工具中進行整合,例如持續集成工具Hudson,可在build完成后自動運行一些基礎測試。

            總的來說,Twist和Sahi是比較適合一個小型測試團隊進行自動化測試的。Twist能夠有效地減少搭建自動化測試框架的時間,讓測試人員更多的關注在業務邏輯上面,有興趣的讀者可以下載Twist的試用版進行嘗試。

          posted on 2012-11-20 09:38 順其自然EVO 閱讀(1163) 評論(0)  編輯  收藏 所屬分類: selenium and watir webdrivers 自動化測試學習

          <2012年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 廊坊市| 托克托县| 木里| 广南县| 囊谦县| 革吉县| 宁蒗| 青神县| 额尔古纳市| 林芝县| 运城市| 宁远县| 黄大仙区| 新乡市| 枣庄市| 黔江区| 彝良县| 嘉黎县| 隆德县| 历史| 兰坪| 剑阁县| 文山县| 监利县| 诸城市| 灯塔市| 温宿县| 慈利县| 阳新县| 北宁市| 镇康县| 永吉县| 山阳县| 乐清市| 图木舒克市| 阿克苏市| 蕲春县| 阿勒泰市| 淳安县| 广安市| 佛坪县|