qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          創(chuàng)建一個(gè)有效的GUI自動(dòng)化框架

           一個(gè)良好的自動(dòng)化測(cè)試框架應(yīng)該具備靈活的,與應(yīng)用程序無關(guān)的,與技術(shù)無關(guān)和不過時(shí)的特點(diǎn)。本文強(qiáng)調(diào)的準(zhǔn)則可以幫助開發(fā)者深層分析測(cè)試方案中的代碼。這種能力已經(jīng)被證明在多個(gè)自動(dòng)化項(xiàng)目上是有效的。
            “自動(dòng)化框架”這個(gè)術(shù)語已經(jīng)為軟件測(cè)試領(lǐng)域所熟知。盡管很多人都把它與應(yīng)用在基于UI自動(dòng)化的技術(shù)聯(lián)系起來,但是它幾乎總是被濫用于那些參與測(cè)試領(lǐng)域。這大部分的原因是由于大家對(duì)自動(dòng)化框架的應(yīng)用領(lǐng)域有誤解。它應(yīng)該不僅僅像Coded UI那樣,只是一個(gè)單純的UI技術(shù)。
            現(xiàn)在,市場上有很多商業(yè)性的和開源的測(cè)試自動(dòng)化框架。使用這些框架的主要問題在于調(diào)整他們的學(xué)習(xí)曲線和滿足自動(dòng)化項(xiàng)目的要求的困難性。雖然有一些廣泛應(yīng)用的遺留框架,但是他們還是有很多缺點(diǎn)。
            他們?nèi)狈`活性,再使用昂貴的第三方產(chǎn)品——或者,添加一個(gè)單純的現(xiàn)有用戶界面技術(shù),但不提供額外的價(jià)值。
            一個(gè)良好的自動(dòng)化測(cè)試框架應(yīng)該具備靈活的,與應(yīng)用程序無關(guān)的,與技術(shù)無關(guān)和不過時(shí)的特點(diǎn)。它應(yīng)該支持一個(gè)易于安裝和使用的結(jié)構(gòu)化和模塊化的編程模型。說“易于使用”,我們是假設(shè)和期望用戶是有經(jīng)驗(yàn)的軟件開發(fā)人員。自動(dòng)化是發(fā)展和正確的軟件工程技能,對(duì)于計(jì)劃和成功得實(shí)施一套自動(dòng)化是有需要的。
            開發(fā)一個(gè)基于UI功能自動(dòng)化系統(tǒng)背后的想法是,運(yùn)用這一框架來提高代碼的可重用性、穩(wěn)定性和可維護(hù)性。該代碼應(yīng)該是容易編寫、調(diào)試、部署和運(yùn)行,發(fā)生失敗應(yīng)該易于分析。不管你使用Ranorex,Coded UI,Telerik或Selenium
            作為底層自動(dòng)化技術(shù),設(shè)計(jì)和實(shí)現(xiàn)自動(dòng)化的解決方案都應(yīng)該是相同的。我們選擇去建議和實(shí)施的范式和模式是任何開發(fā)項(xiàng)目的最佳實(shí)踐,但他們對(duì)于UI自動(dòng)化尤其有用。
            我們已經(jīng)在外面公司對(duì)幾個(gè)不同的項(xiàng)目創(chuàng)建了自動(dòng)化框架。在一些類似的模式中,我們可以提取其中的相同之處。這些項(xiàng)目的主要問題與方法和可重用性的不同相關(guān)。除此之外,不同的團(tuán)隊(duì)通過使用不同的自動(dòng)化工具來測(cè)試應(yīng)用程序功能,這也導(dǎo)致了整體的難度。
            一般來說,一個(gè)自動(dòng)化框架可以被定義為一套可以為自動(dòng)化軟件測(cè)試提供支持的假設(shè)、概念和工具。它有以下的功能:
            ﹒定義自動(dòng)化測(cè)試腳本的方法
            ﹒提供建立聯(lián)系機(jī)制SUT(測(cè)試系統(tǒng))
            ﹒執(zhí)行測(cè)試和報(bào)告結(jié)果
            ﹒減少自動(dòng)化項(xiàng)目啟動(dòng)時(shí)間
            ﹒建立一個(gè)共同的標(biāo)準(zhǔn)
            基本原則
            讓我們假設(shè)我們有一個(gè)具有豐富的用戶界面和大量的控制的復(fù)雜的應(yīng)用程序,但它只有兩個(gè)屏幕。應(yīng)用程序是復(fù)雜的事實(shí)可能意味著它可以有幾十個(gè)手動(dòng)功能測(cè)試例子。所有這些使用相同的兩個(gè)屏幕。那么,我們?cè)鯓硬拍茉黾舆@樣的測(cè)試解決方案的可維護(hù)性
            分層架構(gòu)模式
            把軟件系統(tǒng)體系結(jié)構(gòu)分解為單獨(dú)的一層的想法是非常普遍的。第一個(gè)是邏輯展示層面,,第二個(gè)是業(yè)務(wù)邏輯層面,第三個(gè)層次是負(fù)責(zé)數(shù)據(jù)存儲(chǔ)。使用這種模式可以降低應(yīng)用程序的維護(hù)成本從每一層內(nèi)的組件可以改變而不影響其他的水平。同樣的方法可以應(yīng)用于測(cè)試系統(tǒng)。
            測(cè)試代碼可以分為三層:
            ·為UI自動(dòng)化工具訪問被測(cè)系統(tǒng)的接口層
            ·邏輯功能層
            ·測(cè)試用例
            每一層執(zhí)行某項(xiàng)任務(wù)時(shí)都有一個(gè)降低測(cè)試的費(fèi)用維護(hù)和促進(jìn)創(chuàng)造一個(gè)新的測(cè)試的共同的目標(biāo)。
            圖1:架構(gòu)原型,測(cè)試系統(tǒng)的多層體系結(jié)構(gòu)

           Page Object
            根據(jù)每個(gè)單獨(dú)的測(cè)試案例來創(chuàng)建單獨(dú)的測(cè)試邏輯、業(yè)務(wù)庫和UI Map,為我們提供了特殊能力來修改當(dāng)前測(cè)試用例。
            讓我們假設(shè)我們的應(yīng)用程序是web郵件服務(wù)Gmail,并且兩個(gè)屏幕之一是登錄屏幕。登錄流程被所有測(cè)試用例中所使用。(例如,為了得到第二個(gè)屏幕,您需要執(zhí)行首先登錄到應(yīng)用程序)。
            圖2:谷歌郵件登錄
            讓我們假定UI中有一些東西改變了,但是不合邏輯的。在我們的特定情況下,每個(gè)登錄進(jìn)入Gmail的現(xiàn)在需要輸入驗(yàn)證碼。
            圖3:谷歌郵件登錄與驗(yàn)證碼
            這意味著每個(gè)測(cè)試案例現(xiàn)在應(yīng)該更新為新的登錄流程。但是一般來說,這只符合邏輯地更新一段代碼。此時(shí)Page Object和功能方法模式的作用就顯而易見。如果只有一個(gè)頁面對(duì)象宣布登錄屏幕和一個(gè)登錄方法,只需要兩個(gè)參數(shù)(即登錄名和密碼),然后只有身體的登錄功能方法需要更新,以涵蓋所有情況下與這種變化有關(guān)。
            頁面的無縫銜接
            頁面的無縫銜接的實(shí)現(xiàn)背后的想法是,在頁面對(duì)象的所有方法返回另一個(gè)頁面對(duì)象類實(shí)例(下一個(gè)SUT上下文頁面)。例如,登錄方法在我們的樣例返回主應(yīng)用程序默認(rèn)的屏幕。它使一系列步驟的功能測(cè)試用例編寫一個(gè)接一個(gè),使這種用方法去鏈接。因此,業(yè)務(wù)方法本身就能夠通過IDE的智能感知,為測(cè)試腳本的開發(fā)人員的代碼提出建議。
            面向切面編程
            面向切面編程實(shí)現(xiàn)方面似乎是很有價(jià)值的,特別是如果你需要用特定方法到try-catch塊,或?qū)憟?bào)告日志條目進(jìn)入/退出方法。這種方式,包含面向切面實(shí)現(xiàn)方面有助于提高自動(dòng)化代碼,使它更具可讀性和可以理解的。
            構(gòu)建/運(yùn)行時(shí)驗(yàn)證
            自動(dòng)化框架也經(jīng)常建議企業(yè)標(biāo)準(zhǔn)。大多數(shù)開發(fā)人員常將同樣的自動(dòng)化方案應(yīng)用在不同的項(xiàng)目上,這是一個(gè)十分棘手的問題。所以,自動(dòng)化框架可以提供一系列設(shè)施,去驗(yàn)證在商業(yè)程序庫或者功能測(cè)試中的方法是否是最佳方案。
            有不同的方法可進(jìn)行驗(yàn)證:
            ·使用IDE擴(kuò)展/插件等可能設(shè)置自定義構(gòu)建的規(guī)則(例如:ReSharper, StyleCop for Visual Studio)
            ·編寫自己的ID擴(kuò)展名
            ·編寫一個(gè)機(jī)制,可以驗(yàn)證測(cè)試是否包含預(yù)期的屬性在運(yùn)行,如果有什么不正確的在運(yùn)行,它將因描述性的錯(cuò)誤而失敗。
            以下提供一些可被驗(yàn)證的項(xiàng)目的簡單列表:
            ·測(cè)試腳本的命名
            ·有適當(dāng)?shù)淖⑨?描述
            ·業(yè)務(wù)方法的返回值/參數(shù)
            ·解決方案分層 (確認(rèn)不會(huì)有交叉層次訪問沖突在自動(dòng)化代碼中出現(xiàn))。
            ·自動(dòng)化測(cè)試框架的硬件支持
            顯然,該框架不能只包括最佳實(shí)踐。沒有人能夠在沒有任何基礎(chǔ)設(shè)施來支持他們的情況下繼續(xù)做下去。以下提供的是一些有助于更好的理解自動(dòng)化框架實(shí)現(xiàn)的指引。
            首先我們需要以某種方式運(yùn)行測(cè)試。在大多數(shù)情況下,單元測(cè)試框架是用于運(yùn)行功能測(cè)試和衡量結(jié)果。有了各種技術(shù)/語言的支持,能夠?yàn)楣δ軠y(cè)試代碼和持續(xù)集成(CI)系統(tǒng)完美的結(jié)合提供了多種選擇的單元測(cè)試框架。
            為測(cè)試運(yùn)行加載配置
            測(cè)試配置很大程度上取決于SUT域和測(cè)試細(xì)節(jié)。例如,在大多數(shù)測(cè)試流的所有配置(如參數(shù)、遠(yuǎn)程連接服務(wù)器等)可以只是在測(cè)試腳本中寫死的。
            在數(shù)據(jù)驅(qū)動(dòng)的測(cè)試中, 當(dāng)相同的測(cè)試可以使用不同的配置(例如,輸入?yún)?shù))多次運(yùn)行的情況下,單元測(cè)試框架還提供從外部存儲(chǔ)設(shè)備讀取數(shù)據(jù)測(cè)試腳本。
            因此,如果需要自定義配置加載的實(shí)現(xiàn)你的自動(dòng)化框架的話,您需要仔細(xì)反復(fù)檢查。
            報(bào)告測(cè)試結(jié)果
            報(bào)告測(cè)試結(jié)果/調(diào)試測(cè)試信息是自動(dòng)化框架的最重要的功能之一。
            有以下幾個(gè)原因:
            ﹒報(bào)告分析簡化了測(cè)試應(yīng)用程序/故障排除,所以你的報(bào)告的信息越多,它提供的支持越好。
            ﹒報(bào)告是所有的項(xiàng)目經(jīng)手人觀察到的結(jié)果。
            如果你想跟蹤測(cè)試執(zhí)行在一段時(shí)間內(nèi)的一些動(dòng)態(tài)變化,你應(yīng)該運(yùn)用額外的設(shè)備將測(cè)試結(jié)果永久地保存到數(shù)據(jù)庫,這樣就可以作比較。
            別忘了把一些花俏的東西放進(jìn)報(bào)告表示層(xml / html),如公司標(biāo)志、結(jié)構(gòu)化輸出等。這些事情能夠極大地改善你的管理。如果你提供一個(gè)“時(shí)間”報(bào)告,圖表也需要高度重視。
            驗(yàn)證
            再者,大多數(shù)單元測(cè)試框架已經(jīng)有一套支持在測(cè)試腳本中執(zhí)行Assert/Verify的機(jī)制。這是一個(gè)很好創(chuàng)建自己的驗(yàn)證機(jī)制的實(shí)踐,以便:
            ﹒從一個(gè)特定的單元測(cè)試框架中抽象用例斷言
            ﹒為你的需求定制一套驗(yàn)證方法
            ﹒添加特定的邏輯到您的驗(yàn)證方法,讓您的驗(yàn)證結(jié)果自動(dòng)寫入報(bào)告

           切面
            自動(dòng)化測(cè)試解決方案在不同的項(xiàng)目中大多是類似的。所以為現(xiàn)有解決方案增加自動(dòng)化框架工具應(yīng)該是個(gè)簡單的事情。如果你想為現(xiàn)有項(xiàng)目提供更多實(shí)用價(jià)值,使用框架來減少遷移工作是很重要的。
            這方面確實(shí)很有幫助。只需添加一個(gè)方面屬性定義到一個(gè)測(cè)試項(xiàng)目,一會(huì)兒你就會(huì)有一個(gè)廣泛的報(bào)告機(jī)制在您的測(cè)試解決方案中激活!當(dāng)然,它的實(shí)現(xiàn)需要一些高級(jí)方面,但這絕對(duì)是值得的。
            關(guān)鍵詞
            你可能覺得有趣的是,我們?cè)谶@篇文章中沒有提及任何關(guān)鍵字驅(qū)動(dòng)框架。關(guān)鍵字市場另一組可用的解決方案,包括商業(yè)的和開源的。可以肯定的是,已經(jīng)有成百上千的自定義關(guān)鍵字驅(qū)動(dòng)框架存在。但是,我們發(fā)現(xiàn)他們是并不完整的。原因如下:
            ﹒他們沒有解決測(cè)試腳本的可維護(hù)性。他們中的大多數(shù)介紹是大量重復(fù)的。
            ﹒把關(guān)鍵字驅(qū)動(dòng)框架緊密地綁定到特定的自動(dòng)化工具(或者是一個(gè)UI自動(dòng)化工具)的一部分,這使得在解決方案開發(fā)沒有變化。
            結(jié)論
            在本文中,我們描述了我們?cè)谧詣?dòng)化框架的實(shí)現(xiàn)中的一些經(jīng)驗(yàn)。這篇文章強(qiáng)調(diào)的一些原則可以提供在深度上分析測(cè)試方案的代碼的能力,并被證明在多個(gè)自動(dòng)化項(xiàng)目中是有效的。作為一個(gè)例子,其中一個(gè)我們已經(jīng)開發(fā)了大約500個(gè)業(yè)務(wù)場景與110個(gè)測(cè)試用例,每個(gè)測(cè)試用例平均30步驟(請(qǐng)注意,一步也可以由幾個(gè)業(yè)務(wù)方法調(diào)用)。所描述的方法使我們能夠達(dá)到每一個(gè)業(yè)務(wù)場景36倍的平均可重用性。
            這是由你來決定你的自動(dòng)化項(xiàng)目使用什么框架。也許這將是一個(gè)簡單的記錄/回放頁面工具與一群或者是一組關(guān)鍵字驅(qū)動(dòng)腳本的表格。但是,當(dāng)涉及到自動(dòng)化的一百多的測(cè)試用例時(shí),您需要證明較高的成熟度級(jí)別來實(shí)現(xiàn)您的測(cè)試解決方案的可維護(hù)性。
            Oleksandr Reminnyi作為SoftServe Inc的軟件工程師,SoftServe Inc是一家全球領(lǐng)先的外包產(chǎn)品和應(yīng)用開發(fā)公司。Oleksandr Reminnyi負(fù)責(zé)為新的和現(xiàn)有的客戶建立自動(dòng)化項(xiàng)目和流程。他認(rèn)為,成功和失敗是完全取決于自動(dòng)化建立過程是否設(shè)定正確的目標(biāo)。他目前正在他的博士學(xué)位致力于研究自動(dòng)化。
            David Krauss擁有超過30年的應(yīng)用經(jīng)驗(yàn)和產(chǎn)品設(shè)計(jì)和交付,與廣泛的編程和跨多個(gè)平臺(tái)架構(gòu)經(jīng)驗(yàn),技術(shù),和語言。精通遺留資產(chǎn)現(xiàn)代化,全球協(xié)作開發(fā)過程,客戶機(jī)/服務(wù)器和網(wǎng)絡(luò)平臺(tái),測(cè)試自動(dòng)化(一個(gè)專利自動(dòng)化,自動(dòng)化生成一個(gè)專利申請(qǐng)中)。二十多年專業(yè)從事自動(dòng)化測(cè)試工具和范例,自動(dòng)化框架和測(cè)試方法。

          posted on 2014-03-20 11:11 順其自然EVO 閱讀(304) 評(píng)論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          <2014年3月>
          2324252627281
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 襄城县| 东方市| 凤阳县| 玉屏| 胶州市| 梁平县| 丽江市| 开阳县| 静安区| 漳州市| 日喀则市| 岑巩县| 永清县| 东乡县| 横山县| 响水县| 塔城市| 龙江县| 沈丘县| 宜州市| 贵阳市| 陆良县| 尖扎县| 油尖旺区| 五台县| 勃利县| 聊城市| 黄石市| 云霄县| 维西| 旬邑县| 柳江县| 松溪县| 灵武市| 海丰县| 永修县| 玉溪市| 沛县| 屯门区| 绩溪县| 兴和县|