<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

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

    一個用于網站自動化測試的生態系統實現

    一個用于網站自動化測試的生態系統實現

      這是我在從事網站自動化測試工作當中構建出的一個“生態系統”。“生態系統”這個概念是我從公司的前輩身上學到的,他一直以來都認為自動化測試人員不應僅僅局限于編寫測試代碼,還應該讓整個自動化測試的過程(測試代碼的持續集成、分發、執行等)都自動化,形成一個“系統”,這個系統的自動化程度越高,自動化測試人員就越省力。
      一、概念
      這里我畫了一張示意圖:
      之所以稱之為“生態系統”,是因為建成之后需要的人為干涉很少,其余的時間都是系統內部循環運作。作為自動化測試人員的你只需要提交代碼,之后便可以在AutomationDashboard上看到運行的結果了,其余的事情都由系統內部消化。當然,結果的分析還是需要人來完成,機器還沒有聰明到可以靈活分析出各種各樣讓case fail掉的原因。
      我們可以把整個系統看作一個黑盒子,那么上面的圖可以變成:
      實際上這里畫的人不僅限于自動化測試人員,也可以是:
      (1)產品的管理者,比如產品經理需要從自動化回歸測試知道這次release有無推遲風險;
      (2)團隊的管理者,比如開發經理、QA經理需要從自動化的daily/weekly regression知道最近的代碼質量如何;
      (3)開發人員,他們也許會想通過quick regression(提交的產品代碼被部署到測試環境之后運行的測試)知道自己剛提交的代碼有沒有破壞系統的基本功能;
      (4)其他幫忙做自動化測試的開發人員、剛剛開始學習編寫自動化測試代碼的手動測試人員,他們不必關心生態系統的內部實現。
      二、實現
      說完概念,接下來該說說具體實現了。我這里講的是我認為最適合我所測試的產品的實現,工具不止一種,方式不止一種。Jenkins可以用TeamCity或其它CI替換,git也可以是svn或tfs,AutomationDahsboard可以用.NET、SpringMVC、ROR等等實現,運行測試的slave可以是Windows/Linux/Mac(土豪!),總之選擇一種最適合你所測試的產品的實現。還有一點就是自動化測試代碼是用關鍵字驅動思想實現的,這是另外一個話題了,有時間另外寫篇文。
      好,進入正題。依次說說系統的每個重要組成部分吧:
      1、SCM(Source Code Management)。我選的是git,可以是git服務器(公司自己搭建了一個git server),也可以是一個bare repo(http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/) 。
      2、CI(continuous integration)。我選的是部署方便、插件豐富的Jenkins。
      它的職責是:
      (1)從git上取出代碼,build(.NET對應msbuild,如果是ruby則不用build了,直接部署即可);
      (2)把build好的*.dll部署(這里即是拷貝)到所有的slave上;
      (3)啟動或停止所有slave上的AutomationService(后面還會講到AutomationService),從而控制測試的執行。我在Jenkins的這些個job配置起來還是比較繁瑣的,要細講又可以另外寫一篇文了。這里就特別提到兩個很實用的插件吧:
      (1)Parameterized Trigger Plugin(https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin):可以在一個build step中觸發其它project的build。
      它最有用的就是這個“Block until the triggered projects finish their builds”選項,勾上的話Jenkins就能在所有trigger的project完成build之后(而非僅僅trigger其它project的build,不等它們完成就繼續下一個build step)再繼續下一個build step,做到真正的依次執行每個build step。
      (2)NodeLabel Parameter Plugin(https://wiki.jenkins-ci.org/display/JENKINS/NodeLabel+Parameter+Plugin):在所有“Possible nodes”標有指定標簽(“Label”)的Jenkins節點(就是Jenkins master或Jenkins slave)上觸發指定project(被觸發的project是參數化的)。
      比如我有一個project叫“StartClassicROLATServiceOnAllNodes”,它有一個build step是這樣設定的:
      再來看看“StartClassicROLATServiceOnASingleNode”這個project的設定:
      這個project有一個Node類型的參數,參數名“NodeX”與之前Label Factory中的“NodeX”對應,“Possible nodes”選的是“ALL”,那么列出的所有node(master、10.107.122.152、10.107.122.153、10.107.122.154)都在判斷范圍之內(判斷其是否有“Node”標簽,有則執行project)。
      另外,列出的所有node我都為其加了一個“Node”標簽。
      這樣,當我trigger “StartClassicROLATServiceOnAllNodes”之后,就會在master、10.107.122.152、10.107.122.153、10.107.122.154這4個node上同時執行“StartClassicROLATServiceOnASingleNode”。
     3、AutomationDashboard,這里姑且譯作“自動化測試控制面板”吧。實際上它應該和Jenkins一起并稱控制面板,不過因為Jenkins有API可以調用,所以想做的畫兩者也是可以統一成一個web界面的。這個dashboard完全是用.NET+IIS+SQLServer一點點從數據庫設計構建、數據訪問層、業務層、表現層做起來的,要細講……額……又會是另外一篇文了(Oh man, not again!)。反正我覺得,雖然我是做自動化測試工作的,但不應該把自己局限于測試。為了更好地進行自動化測試,開發網站、安裝配置虛擬機以及其它要用到的工具,都應該抽時間去學習、掌握。
      好,來說說這個dashboard。這里只講兩個主要組成部分,一個網站(以下簡稱dashboard)、一個Windows Service(以下簡稱ATService)和一個console application(以下稱ConsoleRunner):
      (1)dashboard,它的主要功能:
      a、展示測試的運行狀況:有多少正在運行/執行完畢,分別在哪臺slave上執行等等。
      b、通過call Jenkins的API來trigger Jenkins的job,間接控制測試的執行。
      c、展示測試的結果:發生錯誤的是哪個case、出錯時間、錯誤信息、代碼回溯(stack trace)、甚至可以包含一張出錯時的截圖。
      主要界面如下:
      a、Summary,顧名思義是匯總信息,case有多少pass多少fail、case按分類每一類有多少等等。(其實這里我少做了一張很重要的圖,就是coverage餅狀圖)
      b、Queue,測試隊列,包含當前正在運行的、運行完的、等待運行的test fixture或test case(依據測試工具的不同,NUnit、JUnit、RSpec等,fixture的叫法可能不同,總之就是包含多個test case的集合)。可以啟動、停止、終止(終止之后可以清空)測試執行或清空當前隊列。
      c、TestCase,生態系統中的所有測試用例會展示在這里,可以看到它們最后一次執行的時間和狀態(pass/fail),點擊某條case可以跳轉到該條case的所有test result。可以按狀態(pass/fail/other)篩選用例,可以勾選部分用例重新執行、或重新執行所有fail的case。“Reload Test Cases”主要是考慮到*.dll文件中的test case可能會在某次部署之后發生變化,需要重新加載。不過后來我修改了Jenkins里的job在每次部署之后都自動重新加載,所以這個按鈕其實沒什么用了。
      d、TestSuite,包含多個fixture的集合是一個suite。勾選多個suite點擊“Run Suite”即可把這些suite中包含的fixture添加到Queue。
      這里的suite是對NUnit中的Category的一個補充,點擊“New Suite”你可以任意選擇fixture來組成自己想要的suite:
      e、TestResult,展示所有test case的運行結果,可以按test case id進行篩選,點擊TC#這一列的id就只顯示這條case的結果。
      點右邊的藍色“i”圖標可以跳到這條結果的詳細頁面,截圖功能暫未啟用,根據RunnerMessage和RunnerStackTrace可以知道報錯的代碼位置,進而嘗試重現問題。

    posted on 2014-03-13 13:01 順其自然EVO 閱讀(445) 評論(0)  編輯  收藏 所屬分類: 自動化測試持續集成

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

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产另类久久久精品黑人 | 国产精品亚洲五月天高清| 无码日韩精品一区二区三区免费| 久久亚洲AV无码西西人体| 污污的视频在线免费观看| 全部免费国产潢色一级| 亚洲av无码日韩av无码网站冲| 日韩中文字幕免费| 亚洲aⅴ无码专区在线观看春色| 好吊妞在线新免费视频| 亚洲五月丁香综合视频| 91嫩草免费国产永久入口| 亚洲精品国产啊女成拍色拍| **真实毛片免费观看| 亚洲国产精品线观看不卡| 国产三级在线观看免费| 亚洲欧美成aⅴ人在线观看| 四虎免费永久在线播放| 精品97国产免费人成视频| 久久久久亚洲精品成人网小说| 91精品国产免费入口| 亚洲一区AV无码少妇电影| 四虎免费永久在线播放| 国色精品va在线观看免费视频 | 青青青国产免费一夜七次郎| 黄色一级视频免费| 亚洲精品成人无码中文毛片不卡| 色猫咪免费人成网站在线观看| 91嫩草亚洲精品| 免费v片在线观看品善网| 中国国语毛片免费观看视频| 亚洲精品成人图区| 国产极品粉嫩泬免费观看| 韩日电影在线播放免费版| 亚洲冬月枫中文字幕在线看| 无码欧精品亚洲日韩一区夜夜嗨 | 久久精品亚洲一区二区三区浴池| 久久久久国产精品免费免费搜索 | 一级毛片免费观看不卡的| 亚洲精品9999久久久久无码| 亚洲熟妇av一区二区三区|