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

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

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

    qileilove

    blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

    GUI功能測試自動化模式

     對于某個特定程序,為其開發(fā)自動化功能測試解決方案的過程,與創(chuàng)建該程序的過程,二者相較并沒有很懸殊的差別。自動化測試是一個非常年輕的領(lǐng)域,它正在不斷經(jīng)歷大量的進步、提升和標準化進程。在這個領(lǐng)域中,涌現(xiàn)了許多與“被測系統(tǒng)”(SUT,System Under Test)互動的新工具。
      現(xiàn)在,軟件開發(fā)方面有大量可供選擇的方法論和途徑,例如:面向?qū)ο缶幊獭⒑瘮?shù)式編程、領(lǐng)域驅(qū)動設(shè)計、測試驅(qū)動設(shè)計、行為驅(qū)動設(shè)計等等。它們擁有明確的聲明性概念和理論,并簡化了對初始系統(tǒng)架構(gòu)的定義過程、對系統(tǒng)的理解以及開發(fā)者之間的知識交換等方面的工作
      本文將主要針對GUI(圖形用戶界面)應(yīng)用的測試自動化進行討論——從自動化開發(fā)人員的角度看,在這種情況下被測系統(tǒng)(SUT)表現(xiàn)為一個黑箱(被測系統(tǒng),是指一個正在測試是否能夠正確操作的系統(tǒng)。對于桌面應(yīng)用來說,它就是應(yīng)用本身,而對瀏覽器系統(tǒng)來說——則代表了網(wǎng)站/Web項目等含義)。在公司的遺留系統(tǒng)占很高比例的環(huán)境里,或是在新開發(fā)的系統(tǒng)沒有考慮可檢測質(zhì)量屬性時,這一現(xiàn)象非常常見。
      對最佳實踐的準備和定義,是開發(fā)自動化的測試的關(guān)鍵部分。下圖展示了被測系統(tǒng)和測試者之間的傳統(tǒng)交互:
      測試者與SUT之間的交互
      位于該系統(tǒng)中心的,是一個扮演測試者角色的人類個體。測試者使用手動交互和應(yīng)用的視覺化分析,以及特定的SUT非可視化界面訪問工具,將測試用例中所描繪的場景進行復(fù)制。如果失敗或是遇到系統(tǒng)意外行為,測試者便將錯誤行為的有關(guān)信息輸入到默認的追蹤系統(tǒng)中。
      自動化測試的主要目的,是消除(或者至少最小化)人類與SUT之間的交互。在持續(xù)交付產(chǎn)品開發(fā)周期中,這是非常常見的問題。一份文獻來源的研究表明,現(xiàn)在自動化測試系統(tǒng)的數(shù)量非常多。商業(yè)產(chǎn)品一般會公布一系列詳細的要求和推薦,特別適用于其產(chǎn)品。但是這些廠家往往不會公布適合與任何自動工具一起使用的一系列工具診斷實踐。
      此外,這些自動工具軟件提供商往往還會運用營銷手段,基于小量功能測試來描繪其系統(tǒng)的優(yōu)勢。但是隨著自動化測試數(shù)量的增長,維護現(xiàn)有測試將成為系統(tǒng)工作流程中最昂貴的部分。
      自動化測試框架旨在幫忙解決這些問題。他們定義了基本的系統(tǒng)可復(fù)用組件,公布了最佳實踐和統(tǒng)一自動方法——為了正確地開發(fā)自動化測試框架,我們需要得到獨立最佳實踐的指導(dǎo)。
      自動化功能測試的模式
      讓我們檢查以下Web應(yīng)用程序自動化方面的問題(圖1),這是一個自動化解決方案裝置的例子。該應(yīng)用包含了一幅登錄頁面,而每項測試都必須經(jīng)過該頁面,才能進行更進一步的測試。
      圖1:示例——擁有最少頁面和功能集的簡單Web應(yīng)用
      分類體系(圖2)為我們帶來了全部功能測試模式的整體視角,本文稍后會對各個模式展開描述。
      圖2:自動化功能測試模式的分類

     測試實現(xiàn)的模式
      記錄
      通過自動化測試工具來執(zhí)行此模式的測試實現(xiàn)。該工具記錄并回放手工測試者的操作。某種程度上,考慮到昂貴的維護成本,這種方式被認為是一個糟糕的實踐。
      腳本化
      由程序員使用自動化工具的API來執(zhí)行測試實現(xiàn)(例如Selenium WebDriver API)。
      實現(xiàn)基礎(chǔ)模板(測試模板)
      該模式將實現(xiàn)基礎(chǔ)測試模板類。要實現(xiàn)各種測試的變體,可以通過繼承和擴展模板類的功能來創(chuàng)建。
      數(shù)據(jù)驅(qū)動實現(xiàn)
      通過測試用例來定義一個基礎(chǔ)測試的實現(xiàn)。可以通過一系列不同的輸入數(shù)據(jù)組合,來創(chuàng)建各種測試的變體。
      在大部分單元測試框架中都實現(xiàn)了這一方法,例如:MSTest以DataContext(鍵值集合)的方式,提供對測試內(nèi)部的屬性的訪問權(quán)限。于是,相同的測試方法主體會運行很多次,但DataContext屬性所提供的數(shù)據(jù)各不相同。
      關(guān)鍵字驅(qū)動實現(xiàn)
      這一測試實現(xiàn)借助了關(guān)鍵字(例如:點擊、回車)。測試實現(xiàn)通過特殊的IDE完成,這類IDE可以鉤掛到應(yīng)用的UI上。
      目前已有數(shù)款軟件工具,支持借助關(guān)鍵字來實現(xiàn)測試。測試的步驟,以關(guān)鍵字、屏幕上的控制名和輸入?yún)?shù)的結(jié)合的形式出現(xiàn)。HP QTP和MonkeyTalk是這類IDE中的典型例子
      模型驅(qū)動實現(xiàn)
      對任何應(yīng)用來說,在特定的時刻接受特定的輸入,都只會有一個特定的狀態(tài)。根據(jù)這樣的定義,我們可以將軟件程序描繪為有限狀態(tài)機(有限自動機)。考慮到這一事實,以及狀態(tài)可用性和轉(zhuǎn)換模型(例如圖1),我們可以定義一套特定的頁面間轉(zhuǎn)換(工作流)的集合,它將能夠覆蓋程序的大部分功能。
      架構(gòu)模式
      多層的測試解決方案
      該模式從邏輯維度將正在測試的系統(tǒng)劃分為獨立的邏輯層級。
      將軟件系統(tǒng)以架構(gòu)性方式分為獨立的層級是一個廣為流傳的實踐。第一層封裝了表述邏輯,第二層則是業(yè)務(wù)邏輯層,而第三層負責數(shù)據(jù)存儲。使用這一范式,有助于降低應(yīng)用維護成本,因為更換每層內(nèi)部的組件對其他層級的影響將被最小化。而同樣的方法也可以運用到測試系統(tǒng)中。
      測試代碼同樣可以分為三層:用來向SUT提供訪問的UI自動化工具界面層、功能邏輯層和測試用例層。每一層都肩負特定的責任,而它們都在追求共同的目標——降低測試維護成本,提升創(chuàng)建新測試的便利性。
      圖 3: 架構(gòu)性原型——測試系統(tǒng)的多層架構(gòu)
    元框架
      該模式定義了一組基礎(chǔ)的獨立工具類。對任何自動化工具來說,它們都是通用的,而且可以在不同自動化項目之間復(fù)用。
      當需要在一個組織機構(gòu)中測試不同的項目,而且企業(yè)標準要求測試結(jié)果采用統(tǒng)一的界面時,或許就需要這樣的解決方案。此外,元框架改進了項目間代碼復(fù)用的度量標準,因為它可能會包含有用的工具方法。有關(guān)功能和測試對象的基礎(chǔ)類,簡化了項目之間知識的轉(zhuǎn)移。元框架展現(xiàn)在圖3的右側(cè)。
      功能組合模式
      功能方法
      針對特定于應(yīng)用的業(yè)務(wù)功能,從其UI實現(xiàn)、API或其他層面進行了抽象。
      用于自動化測試的許多工具,都支持創(chuàng)建被稱之為“場景記錄”的功能。當一位測試開發(fā)者針對特定應(yīng)用執(zhí)行特定操作時,這些工具將自動創(chuàng)建一份測試腳本。它可以在稍后進行回放,并檢查在程序發(fā)生變化后,該腳本是否得到了正確的執(zhí)行。
      例子:改變登錄界面的外觀,將要求在全部預(yù)計的測試場景中的對應(yīng)部分都進行變更。如果我們將登錄方法提取為Application.Login(username,password),并在全部測試中使用這一方法,那么當?shù)顷戫撁姘l(fā)生任何變更的時候,我們將只需要修改僅僅這一個功能方法,隨后變更就會被自動分發(fā)到所有使用該方法的測試中。
      圖4:測試腳本與(a)缺乏功能方法的過渡層的用戶界面之間的交互;(b) 帶有功能方法層的用戶界面。當應(yīng)用發(fā)生變更時,陰影部分對象將會被改變。
      頁面對象
      這一模式將某個頁面的功能方法組合在一起。
      由于圖1中展現(xiàn)的用于應(yīng)用的功能方法數(shù)量不多,因此它們可以移入一個單獨的類。但是為了提升代碼可維護性,此模式建議依據(jù)這些方法所代表頁面,對其進行分組。例如,這些對應(yīng)關(guān)系可以包括:頁面:PageLogin——方法:Login();頁面PageHome——方法:Logout()、CreateUser()。
      功能庫
      它將某個特定應(yīng)用的功能對象或(和)功能方法分組打包,成為一個適合復(fù)用的模塊。
      SUT的啟動和拆卸對象(SUT運行者)
      該模式支持被測系統(tǒng)的初始啟動,即它的初始化。在此之后,測試對象釋放與該系統(tǒng)相關(guān)的資源。
      在功能方法之中,我們可以區(qū)分出與功能測試無關(guān)的方法集合:例如啟動某個Web瀏覽器,并訪問SUT的登錄頁面。而在測試之后,Web瀏覽器應(yīng)該被關(guān)閉。SUT運行者負責以上這些通用活動。
      對象源(對象之母、對象精靈、對象工程)
      該模式按測試執(zhí)行所要求的形式,創(chuàng)建并初始化的對象。
      運輸者(導(dǎo)航器)
      根據(jù)測試要求,它將被測試系統(tǒng)中的導(dǎo)航控制集中在一起。
      該對象封裝了與被測試系統(tǒng)內(nèi)部的導(dǎo)航實現(xiàn)有關(guān)的完整邏輯。因此業(yè)務(wù)邏輯的問題不會影響系統(tǒng)內(nèi)的導(dǎo)航。
      對于圖1所描述的情況,我們將擁有一個Transporter類(運輸者),它擁有以下方法:NavigateToLogin()、NavigateToHomePage()和NavigateToCreateuser()等等。或者,每個獨立的頁面(page)對象或許都會擁有自己的運輸(transport)方法。在這種情況下,這些方法就作為該對象自身的運輸者。
      復(fù)合頁面對象
      該模式將復(fù)用的頁面(page)對象聚合在一個外部對象中。
      這一模式支持用更加“面向?qū)ο?#8221;的方式來組織頁面對象——把可以在不同頁面上復(fù)用的子對象分離,并將其包含到父對象中。
      圖5:通過在主頁和創(chuàng)建用戶頁面對象中聚集,來使用導(dǎo)航頁面(Navigation Page)對象
      擴展的頁面對象
      該模式通過繼承來擴展基礎(chǔ)的頁面對象,成為復(fù)合頁面對象的替代選擇。
      過程模式
      給定條件/時機/結(jié)果
      此模式將測試執(zhí)行過程分為三個階段:
      給定條件(定義先決條件)
      時機(設(shè)定與上下文協(xié)同工作的特定操作)
      結(jié)果(檢查結(jié)果)
      四階段測試
      此模式將測試執(zhí)行過程分為四個階段:
      定義先決條件
      調(diào)用業(yè)務(wù)功能
      Checking results;
      拆卸系統(tǒng)
      流測試
      該模式支持在一個測試內(nèi)執(zhí)行業(yè)務(wù)操作并進行檢查。兩項內(nèi)容可以交替進行,直到實現(xiàn)測試的最終目標。
      多次失敗
      該模式定義了一套機制,能夠在非致命錯誤出現(xiàn)之后繼續(xù)進行測試。
      測試依賴模式
      獨立測試
      該模式令被測試的系統(tǒng)回到測試前的狀態(tài)。
      鏈式測試
      在該模式中,初步測試樹立起了測試需要跟蹤的SUT狀態(tài)。
      測試分組模式
      每個測試類封裝一個測試方法
      在該模式下,每個獨立的測試方法,都封裝在一個獨立的測試類中。
      測試類中的分組測試方法
      在該模式下,多個測試方法被放置于一個獨立的測試類中。
      總結(jié)
      測試解決方案的設(shè)計背后的驅(qū)動力,是對特定測試實現(xiàn)模式的選擇。它扮演了未來所有測試解決方案開發(fā)的起點,將在可讀性、可維護性和其他諸多特性方面產(chǎn)生影響。而且它也設(shè)置了這些實驗,使其在能夠產(chǎn)生幫助的時候更好地復(fù)用項目之間的資源,并減少新項目自動啟動的時間。
      這篇文章拋出了有關(guān)如何參考設(shè)計模式,來構(gòu)建測試解決方案的想法。

    posted on 2013-11-29 11:02 順其自然EVO 閱讀(197) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    <2013年11月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    1234567

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 相泽南亚洲一区二区在线播放| 亚洲AV无码一区二区乱孑伦AS| 精品无码一区二区三区亚洲桃色 | va天堂va亚洲va影视中文字幕| 国产国产人免费人成成免视频 | 爱爱帝国亚洲一区二区三区| 亚洲精品视频在线免费| 国产亚洲3p无码一区二区| 一级中文字幕乱码免费| 亚洲成A人片在线观看中文| 亚洲爆乳精品无码一区二区| 最近中文字幕免费mv视频8| 亚洲色图校园春色| 久久久久久精品成人免费图片| 国产成A人亚洲精V品无码性色| a级毛片毛片免费观看久潮喷| 中文字幕亚洲乱码熟女一区二区 | 91视频免费观看高清观看完整| 亚洲国产综合人成综合网站| 国产乱子伦精品免费视频| 亚洲国产一成人久久精品| 无码一区二区三区免费| 亚洲美女在线观看播放| 成人午夜免费福利| 少妇亚洲免费精品| 亚洲精品乱码久久久久久按摩| 在线观看肉片AV网站免费| 亚洲沟沟美女亚洲沟沟| 国产做床爱无遮挡免费视频| 99久久婷婷免费国产综合精品| 亚洲精品在线免费观看视频| 午夜电影免费观看| 两个人看www免费视频| 亚洲人成图片网站| 久久久久亚洲AV成人网人人软件| 亚洲成人免费在线| 成年网站免费入口在线观看| 亚洲精选在线观看| 亚洲国产精品碰碰| 国色精品卡一卡2卡3卡4卡免费| fc2成年免费共享视频网站|