客戶端GUI測(cè)試技術(shù)和自動(dòng)化測(cè)試架構(gòu)設(shè)計(jì)簡(jiǎn)談_第1頁(yè)
客戶端GUI測(cè)試技術(shù)和自動(dòng)化測(cè)試架構(gòu)設(shè)計(jì)簡(jiǎn)談_第2頁(yè)
客戶端GUI測(cè)試技術(shù)和自動(dòng)化測(cè)試架構(gòu)設(shè)計(jì)簡(jiǎn)談_第3頁(yè)
客戶端GUI測(cè)試技術(shù)和自動(dòng)化測(cè)試架構(gòu)設(shè)計(jì)簡(jiǎn)談_第4頁(yè)
客戶端GUI測(cè)試技術(shù)和自動(dòng)化測(cè)試架構(gòu)設(shè)計(jì)簡(jiǎn)談_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

客戶端GUI測(cè)試技術(shù)和自動(dòng)化測(cè)試架構(gòu)設(shè)計(jì)簡(jiǎn)談客戶端自動(dòng)化特點(diǎn)客戶端的自動(dòng)化,通常做過(guò)的人都不是很愿意深入討論。因?yàn)槌斯δ芎瓦壿嬛?,不得不面?duì)各種界面變化,各種和環(huán)境交互,各種兼容問(wèn)題以及想不到灰色地帶,就算這樣,也找不到太多有效的bug。然而即便如此,客戶端的自動(dòng)化必須去做,尤其是GUI的。它的自動(dòng)化特點(diǎn)是:復(fù)雜成本高不容易發(fā)現(xiàn)問(wèn)題技術(shù)要求高架構(gòu)很難通用下面,從一些基本的東西開(kāi)始一點(diǎn)點(diǎn)的討論客戶端GUI測(cè)試的一些問(wèn)題和處理辦法,以及自動(dòng)化架構(gòu)設(shè)計(jì)的一些思路。事實(shí)上就像上面說(shuō)的,GUI的測(cè)試并不是為了發(fā)現(xiàn)bug,而是回歸的一種方式,作為保證而已——它過(guò)了不能說(shuō)明質(zhì)量多么好,但是不過(guò),質(zhì)量肯定不達(dá)標(biāo)。即使在微軟內(nèi)部,客戶端的GUI一樣不是個(gè)受歡迎的家伙,通常用來(lái)做BVT的測(cè)試(或一些重要性回歸,冒煙等)??蛻舳俗詣?dòng)化簡(jiǎn)述這里并不花過(guò)多的筆墨介紹什么是客戶端,或者如何分類的種種——這些東西教材和網(wǎng)上的東西一坨一坨很多很多,這里可能“漫談”的,是實(shí)際工作中,客戶端和GUI自動(dòng)化中可能遇到的一些底層技術(shù),基本上原理,架構(gòu)設(shè)計(jì)方法以及一些項(xiàng)目存在困惑,這些方面的一些處理的方法。最早的自動(dòng)化我個(gè)人認(rèn)為所謂的計(jì)算機(jī)行業(yè)的自動(dòng)化,是一直跟著這個(gè)行業(yè)的發(fā)展在走,比如下面的這些:老式計(jì)算機(jī)——CPU計(jì)算:最早自動(dòng)解決手工分配穿孔的卡片問(wèn)題內(nèi)存分配任務(wù)調(diào)度:操作系統(tǒng)的核心就是內(nèi)存和任務(wù)的自動(dòng)管理系統(tǒng)配置Loader:操作系統(tǒng)啟動(dòng)的引導(dǎo)自啟動(dòng)程序注冊(cè)表:windows系統(tǒng)中自啟動(dòng)程序的配置什么是自動(dòng)化測(cè)試我個(gè)人認(rèn)為自動(dòng)化測(cè)試,就是用技術(shù)和自動(dòng)化去服務(wù)測(cè)試,保證質(zhì)量,提高產(chǎn)品生產(chǎn)率(不是測(cè)試生產(chǎn)力)。無(wú)論如何這個(gè)行業(yè)需求是關(guān)鍵,脫離需求和具體環(huán)境,一切都是玩笑。傳統(tǒng)客戶端客戶端的特點(diǎn)是基于操作系統(tǒng)之上,它的GUI一般寄生于操作系統(tǒng)的接口。傳統(tǒng)客戶端一般采用系統(tǒng)提供的默認(rèn)GUI來(lái)完成主要邏輯功能。特點(diǎn)是技術(shù)相對(duì)簡(jiǎn)單,系統(tǒng)兼容性好,但是相對(duì)沒(méi)有那么炫。對(duì)于自動(dòng)化來(lái)說(shuō),盡管完成起來(lái)“冗余”,但是不存在技術(shù)的難點(diǎn)。也就是通道都已經(jīng)鋪平了,大部分流行的GUI工具都是服務(wù)于這樣的客戶端?;ヂ?lián)網(wǎng)常用客戶端互聯(lián)網(wǎng)常用的客戶端,由于為了提供用戶體驗(yàn)度,大都采用directUI,無(wú)論哪種自繪方法,都不是系統(tǒng)直接提供的。另外,由于互聯(lián)網(wǎng)客戶端的功能很雜,對(duì)注冊(cè)表的各種注入,操作系統(tǒng)的各種更改等,都會(huì)導(dǎo)致一些兼容性和安全性問(wèn)題出現(xiàn)。這是互聯(lián)網(wǎng)客戶端的特點(diǎn)。特殊客戶端(瀏覽器)瀏覽器作為特殊的客戶端出現(xiàn)是因?yàn)樗莃/s和c/s的一個(gè)界限,它本身是一個(gè)客戶端,但是卻是web的依賴著,PC上Web的主要入口。對(duì)于其他客戶端,它的特點(diǎn)如下:寄生jsCookies等安全各種插件W3c標(biāo)準(zhǔn)其他不同瀏覽器頁(yè)面GUI識(shí)別不同客戶端自動(dòng)化特點(diǎn)/htm/test/newweb.htm一開(kāi)始已經(jīng)提到過(guò)客戶端GUI自動(dòng)化測(cè)試的特點(diǎn),由于這些特點(diǎn),導(dǎo)致很多沒(méi)有預(yù)算和積累的公司,會(huì)放棄客戶端GUI的自動(dòng)化測(cè)試。客戶端自動(dòng)化通用模型一般來(lái)說(shuō),客戶端GUI的自動(dòng)化測(cè)試,大體可以分為5個(gè)部分,底層GUI技術(shù),用例組織和開(kāi)發(fā),調(diào)度和執(zhí)行,日志以及用戶操作接口。事實(shí)上,除了底層GUI實(shí)現(xiàn)是客戶端GUI的專屬,其他的部分都屬于一般的自動(dòng)化測(cè)試架構(gòu)部分,不過(guò)對(duì)客戶端測(cè)試,這些部分可以適當(dāng)調(diào)整。所以這里的重點(diǎn),是GUI測(cè)試的底層。底層實(shí)現(xiàn)/limi/index.htm底層實(shí)現(xiàn)中包括GUI控件識(shí)別操作,信息hook,進(jìn)程檢測(cè),文件管理等各種底層,其中GUI控件識(shí)別是難點(diǎn),其他的都可以比較輕松的完成,任何工具和編程語(yǔ)言都有相關(guān)部分。關(guān)于控件識(shí)別部分,包含以下內(nèi)容:基本原理控件識(shí)別是GUI的測(cè)試最核心部分,它是客戶端GUI可測(cè)與否的關(guān)鍵——底層如果走不通,其他的都是噱頭。IPC基本上操作系統(tǒng)標(biāo)準(zhǔn)控件默認(rèn)使用的都是IPC的方式,實(shí)際上這個(gè)也是大多數(shù)GUI的底層技術(shù),即進(jìn)程間通信。被測(cè)程序和測(cè)試程序之間采取這種方式,達(dá)到GUI的識(shí)別和操作。內(nèi)存共享內(nèi)存共享是IPC的一種方法,這里提到只是說(shuō)出了操作系統(tǒng)提供的IPC方法,一些項(xiàng)目和產(chǎn)品也可以自己采用內(nèi)存共享的方法進(jìn)行GUI的數(shù)據(jù)共享,比如測(cè)試輸入法的時(shí)候,共享的數(shù)據(jù)可以使用windows接口hook到,但是中文輸入的分音符”’”,是私有數(shù)據(jù),不可能搞到。通常的做法就是在測(cè)試程序中給一個(gè)帶有私有數(shù)據(jù)定義和傳出的.h文件。通信這里的通信不只是IPC中的管道通信,而是真正的通信,它的特點(diǎn)是安全性高,但是效率低一些。某些情況下,底層處理好,易用性很高。比如web測(cè)試中流行的webdriver,其中chrome瀏覽器對(duì)應(yīng)的是chromedriver.exe,這個(gè)驅(qū)動(dòng)就是采用代理和通信的方式完成的。Chrome內(nèi)置一個(gè)服務(wù),chormedriver.exe會(huì)開(kāi)啟一個(gè)socket和chrome連接驅(qū)動(dòng)瀏覽器執(zhí)行,selenium使用http和chromedriver通信,達(dá)到和其他driver使用封裝的一致。Chromedriver后門后門的方法,其實(shí)上面提到的輸入法私有數(shù)據(jù)就算一種,開(kāi)發(fā)提供.h文件到測(cè)試系統(tǒng)中,只給測(cè)試程序開(kāi)后面。當(dāng)然還有其他的方法,比如編譯出測(cè)試版本,進(jìn)行測(cè)試,發(fā)布版本關(guān)掉這些支持;還可以開(kāi)發(fā)直接提供一些hook工具,開(kāi)啟的時(shí)候提供相關(guān)支持等。自繪控件自繪控件,是GUI測(cè)試的最核心問(wèn)題。這個(gè)問(wèn)題是這樣的——即使開(kāi)發(fā)人員幫著寫自繪控件的支持,也不會(huì)每個(gè)控件都寫,每個(gè)方法都寫,如果這樣的話,用一些流行的工具,還是會(huì)錯(cuò)誤百出。IAcessible實(shí)現(xiàn)最根本的自繪控件實(shí)現(xiàn),可以參考Chrome的源代碼,windows的chrome,在UI上,都實(shí)現(xiàn)了這個(gè)東東??偟膩?lái)說(shuō),需要三個(gè)步驟:繼承IAccessible相關(guān)類,然后通過(guò)LresultFromObject把IAccessible接口返回給測(cè)試程序注冊(cè)系統(tǒng)VM_GETOBJECT事件,使對(duì)外proxy可以獲取實(shí)例的變量分別實(shí)現(xiàn)IAccessible中的各個(gè)接口Chrome中原生的界面庫(kù)采用這種方式實(shí)現(xiàn),這樣的事例在chrome中看到很多,比如:初始化:注冊(cè):接口實(shí)現(xiàn):hook實(shí)現(xiàn)hook的方法前面提到過(guò)一些,有些情況并不適合做控件的這些接口支持,還是用前面的輸入法為例,及時(shí)是操作系統(tǒng)自帶輸入法,在微軟內(nèi)部也沒(méi)有實(shí)現(xiàn)——最早的微軟輸入法是有IAccessbie的支持,后來(lái)的就沒(méi)有了。微軟內(nèi)部也是采用hook的方法去進(jìn)行測(cè)試的。一些互聯(lián)網(wǎng)公司的輸入法,同樣也是hook去解決。坐標(biāo)計(jì)算坐標(biāo)去判斷是一種無(wú)奈之舉,但是有時(shí)候確實(shí)有用。之前我做過(guò)的一個(gè)特殊需求,就是完全的模擬用戶亂點(diǎn)瀏覽器頁(yè)面的鏈接,不能用任何接口和通信支持。最終打開(kāi)頁(yè)面的時(shí)候,用鼠標(biāo)在整個(gè)頁(yè)面掃一下,記錄下鼠標(biāo)指針變化的位置。Win32handleWin32handle是基于句柄和消息的windowssdk中的一個(gè)工具,是windows系統(tǒng)中,GUI最基礎(chǔ)的支持。通常能獲取窗口句柄信息,類名消息等,使用相關(guān)windowsapi操作。當(dāng)然根本技術(shù)還是IPC,被測(cè)和測(cè)試之間通信完成。如下:獲取采取windowsapi的方式這種技術(shù)能處理起來(lái)比較簡(jiǎn)單,也是很多流行工具的根本原理。但是使用的范圍極其有限。MsaaMsaa是在windowsapi的基礎(chǔ)上,專門應(yīng)對(duì)IAccessible接口而設(shè)計(jì)的,msdn上有各種相關(guān)的資料。它還是基于IPC技術(shù)的,原理如下:Msaa的核心和ole,com這些是一樣的,因?yàn)閙saa的實(shí)現(xiàn)依賴于oleacc。事實(shí)上這些技術(shù)的核心,就是邊界值檢測(cè)和引用計(jì)數(shù),但是由于不是這里的重點(diǎn),所以這里不詳細(xì)討論??梢詤⒖几鞣N教程,比如wiki。Msaa可以獲取更多hwnd的隱藏信息和一些自定義控件的信息,如下圖所示:Msaa的信息獲取,可以通過(guò)oleacc實(shí)現(xiàn)。比如在一下的python代碼(更多請(qǐng)參考python的msaa封裝,在之前的相關(guān)博客):最終結(jié)果如下:Msaa的方式能夠滿足大多數(shù)需要,但是還有其局限性。UIAUIA是在.netframework之上,所以針對(duì)msaa,提供了更多有效的功能。然后由于結(jié)構(gòu)的復(fù)雜,需要更強(qiáng)的編程能力。UIA的原理如下:類似的,UIA可以獲取到如下信息:由于UIA的部分需要.netframework的支持,暫時(shí)沒(méi)有示例。但是畢竟是在framework之上的東西,網(wǎng)上相關(guān)的教程也是一把一把的。UIA的特點(diǎn)是提供了更為豐富的實(shí)現(xiàn)和功能,IPC結(jié)構(gòu)更加完善,使用便利,支持vista以上系統(tǒng)和WPF的測(cè)試。。缺點(diǎn)是太過(guò)于繁瑣,開(kāi)發(fā)復(fù)雜。微軟內(nèi)部的GUI測(cè)試架構(gòu)Mita,也是完全重新封裝UIA的架構(gòu),不進(jìn)行二次封裝,很難快速的使用。比如msaa整個(gè)的封裝可能幾K而已,但是UIA相比之下,就是巨無(wú)霸級(jí)別了。當(dāng)然各種基于UIA的工具,性能可想而知——很多情況下我們需要測(cè)試XP和一些老式的低配機(jī),這種情況下它并不適合?;趫D像技術(shù)嚴(yán)格來(lái)講,我本人并不推薦這種技術(shù),一方面不穩(wěn)定,另一方面性能消耗較大。大的方面說(shuō),有一些整體都基于圖像的如ikuli,可以通過(guò)圖像去識(shí)別驅(qū)動(dòng)一些程序,并且不依賴被測(cè)程序開(kāi)發(fā)。但是我個(gè)人認(rèn)為這東西用在自動(dòng)化測(cè)試上,并不實(shí)用。小的方面說(shuō),一些用例的檢查點(diǎn),和圖像有關(guān),這時(shí)候需要做一些基于圖像的處理,比如對(duì)比圖片MD5呀,分析圖像色度之類的功能。所以基于圖像的技術(shù),可以用在一些邊角的實(shí)現(xiàn)上,不太適合作為底層的主角——當(dāng)然這是我個(gè)人的體會(huì)。WebGUIWeb的GUI之所以放到最后,是因?yàn)樗奶厥庑浴S玫臑g覽器中,原理是不同的。在IE上,由于有com的支持,頁(yè)面的GUI和控件是一樣的,selenium中IE的driver部分也是這樣的原理,甚至一些基于IE內(nèi)核的瀏覽器,只要內(nèi)嵌IE_frame結(jié)構(gòu),都是一樣的,如下:對(duì)于Chrome的頁(yè)面GUI,之前已經(jīng)提到過(guò)chromedriver.exe了,它是采取了通信的手段實(shí)現(xiàn),而不是com或Ole這種基于IPC的方式。輔助工具輔助工具,指一些輔助開(kāi)發(fā)使用的GUI查看工具,這些工具比較多,包括上面使用過(guò)的spy++,inspect,當(dāng)然還包括各種UIASpy等等。當(dāng)然也可以自己開(kāi)發(fā),或者使用網(wǎng)上其他的工具,這部分工具還是很多的。Web頁(yè)面的自動(dòng)化工具,如果單獨(dú)的IE情況下,可以像上面那樣按照客戶端GUI的方式完成,但是如果使用selenium這樣的架構(gòu),最好還是像chrome一樣使用自帶的開(kāi)發(fā)者工具完成web結(jié)構(gòu)定位等。好在IE也有相應(yīng)的開(kāi)發(fā)者工具,而且相比真正客戶端的層級(jí)關(guān)系,web的更加規(guī)范,也穩(wěn)定。簡(jiǎn)單示例msaa接口:如上示例UIA接口:如上示例QTP等:自行查閱用例組織和開(kāi)發(fā)UnittestUnittest是兩個(gè)聰明的家伙創(chuàng)作的(名字忘了),最早在smalltalk的單元測(cè)試中,后來(lái)到JUnit和pyunit。用Pyunit舉例,大概包含如下部分:TestResult:用例結(jié)果實(shí)例,架構(gòu)自動(dòng)調(diào)用TestCase:測(cè)試用例基類TestSuite:測(cè)試套件實(shí)例,用來(lái)管理測(cè)試用例TestLoader:加載測(cè)試用例,返回一個(gè)測(cè)試套件TextTestRunner:執(zhí)行實(shí)例TestProgram:執(zhí)行核心對(duì)于這個(gè)優(yōu)秀的小測(cè)試架構(gòu),當(dāng)然不能浪費(fèi)了。有些測(cè)試用例的執(zhí)行和管理,直接使用這個(gè)架構(gòu)。另外,很多大型的測(cè)試驅(qū)動(dòng)架構(gòu),和這個(gè)小架構(gòu)核心非常類似,比如微軟的MTM,用例管理的套件,思路上很像。直接使用這個(gè)框架,大部分是三種情況:第一種在uniitest框架上編寫用例,和一般的單元測(cè)試相似;第二種動(dòng)態(tài)將測(cè)試用例在執(zhí)行時(shí)轉(zhuǎn)化為uniitest結(jié)構(gòu),并且執(zhí)行;第三種借用測(cè)試套件管理測(cè)試用例;基于unittest的用例組織和管理直接,靈活,但是對(duì)于場(chǎng)景復(fù)雜并且測(cè)試人員編程功底不夠的情況,是不適合的。更多內(nèi)容可以參考:/pyunit_cn.html用例格式unittest中提供的,只是一種格式,事實(shí)上用例的格式千變?nèi)f化,沒(méi)有所謂的最好,只有最適合。文本文本類的用例比較適合編寫,而且不存在太多復(fù)雜的東西,定義好用例結(jié)構(gòu),可以直接解析。Xml擴(kuò)充容易,復(fù)用度高——編輯容易出錯(cuò)比如網(wǎng)上的一個(gè)示例:Txt編寫容易——結(jié)構(gòu)不嚴(yán)謹(jǐn),難擴(kuò)展比如IBM的robot中的測(cè)試用例結(jié)構(gòu):表格excel等excel格式的自動(dòng)化用例一般都用在數(shù)據(jù)驅(qū)動(dòng)的架構(gòu)中,一般底層封裝層次比較多,只留下外部數(shù)據(jù)接口,這種測(cè)試用例適合簡(jiǎn)單但是數(shù)量多的測(cè)試情況。如下;腳本腳本的測(cè)試用例一般測(cè)試開(kāi)發(fā)人員比較提倡,無(wú)縫調(diào)用,適用性強(qiáng),并且重用度高。但是這種用例需要一定編程功底。Lua類似的用例如下:Java&C#Java&C#的測(cè)試用例類似于下面的情況:PythonPython的測(cè)試用例使用比較多,chrome和互聯(lián)網(wǎng)的發(fā)展,讓Python的地位越來(lái)越高,典型的用例如下:嵌套用例調(diào)用形式一些場(chǎng)景類的用例,需要很多重用的邏輯,也就意味著需要有很多公用的用例或者模塊,一些最終用例也很可能某一天,會(huì)成為公共用例。這樣的情況下,需要實(shí)現(xiàn)嵌套的結(jié)構(gòu)。一般來(lái)說(shuō),這樣的情況分為兩種方法。一種是腳本或者編程語(yǔ)言寫的測(cè)試用例,這種用例可以打包為模塊或者測(cè)試套件實(shí)現(xiàn)公用;另一種是文本類用例,這種情況下必須采取文本嵌套的模式進(jìn)行調(diào)用,比如xml的:將每一個(gè)step都統(tǒng)一成一個(gè)文件,這樣就實(shí)現(xiàn)了用例的遞歸調(diào)用。管理方式無(wú)論包方式還是文件方式,都是都是以模板和功能為核心進(jìn)行文件夾的管理。一般會(huì)統(tǒng)一到svn或者其他源代碼管理工具,因?yàn)闇y(cè)試用例也需要維護(hù),某種程度上,這就是代碼。用例驅(qū)動(dòng)用例驅(qū)動(dòng)方面,我個(gè)人并不提議各種驅(qū)動(dòng)什么的,這些是個(gè)名詞而已,而且大都是針對(duì)使用工具的人來(lái)介紹而已。對(duì)于架構(gòu)設(shè)計(jì)和開(kāi)發(fā)人員來(lái)說(shuō),更關(guān)注的是名字后面代表的各種含義和解決方案。我個(gè)人對(duì)這些驅(qū)動(dòng)的解釋是,他們沒(méi)有本質(zhì)性的差別,只是在封裝、重用和特殊需求下的粒度不同,有些極端,有些折中。關(guān)鍵字驅(qū)動(dòng)這種方式是大多數(shù)流行的測(cè)試工具所提倡的,因?yàn)檫@些測(cè)試工具并不是為工具開(kāi)發(fā)者使用,而是商業(yè)的,所以這種方式最適合,也有推廣性。這種解決方案適用在業(yè)務(wù)復(fù)雜,重復(fù)度一般的情況下。除了底層的封裝外,外層封裝和測(cè)試用例都是和業(yè)務(wù)邏輯對(duì)應(yīng)的,管理和封裝方法也取決于業(yè)務(wù)邏輯特點(diǎn)。一般來(lái)說(shuō)將業(yè)務(wù)的最小粒度分層封裝,一直到業(yè)務(wù)頂層。執(zhí)行的時(shí)候只需要判斷關(guān)鍵字的結(jié)構(gòu)和分層順序執(zhí)行。方法驅(qū)動(dòng)這種解決方案完全為由測(cè)試開(kāi)發(fā)人員決定,一般來(lái)說(shuō),底層封裝完全,提供了共有的接口之后,業(yè)務(wù)很亂或者對(duì)業(yè)務(wù)不理解,都會(huì)直接保留接口封裝而不是業(yè)務(wù)邏輯,這樣的情況下,以后業(yè)務(wù)梳理完一部分,用方法順序執(zhí)行一部分。當(dāng)然,測(cè)試開(kāi)發(fā)負(fù)責(zé)接口開(kāi)發(fā),手工測(cè)試進(jìn)行邏輯業(yè)務(wù)用例編寫一般也是這種情況。數(shù)據(jù)驅(qū)動(dòng)所謂數(shù)據(jù)驅(qū)動(dòng),是自動(dòng)化測(cè)試的一個(gè)極端情況——這種情況業(yè)務(wù)邏輯相對(duì)單一,但是需要反復(fù)測(cè)試不同的數(shù)據(jù)。這種情況下,外部接口相對(duì)簡(jiǎn)單,用例更多的是數(shù)據(jù)的編寫和組織。比如之前提到的輸入法的測(cè)試,比如我新開(kāi)發(fā)一款輸入法,需要測(cè)試a開(kāi)頭到z開(kāi)頭的100萬(wàn)個(gè)字母串輸入的首個(gè)匹配中文,并且和搜狗的輸入法做對(duì)比,這就是典型的所謂數(shù)據(jù)驅(qū)動(dòng)模式。功能邏輯的接口很少,但是需要不斷重復(fù)執(zhí)行,去測(cè)試不同的數(shù)據(jù)。場(chǎng)景驅(qū)動(dòng)場(chǎng)景驅(qū)動(dòng),噱頭的成分更大一些。純面向?qū)ο蟮臉I(yè)務(wù)開(kāi)發(fā)都沒(méi)有什么成功的案例,面向業(yè)務(wù)和服務(wù)的開(kāi)發(fā)模式,更是不實(shí)際。個(gè)人覺(jué)得所謂的場(chǎng)景驅(qū)動(dòng),是建立在一定粒度的關(guān)鍵字驅(qū)動(dòng)封裝之上。一些穩(wěn)定回歸的,邏輯固定的場(chǎng)景抽象出來(lái),作為獨(dú)立的部分,所以純面向場(chǎng)景的驅(qū)動(dòng)不是沒(méi)有,而已意義沒(méi)有宣傳的那么大,它更多是結(jié)構(gòu)上的,但是實(shí)際工作上很少完全場(chǎng)景化。錄制回放錄制回放的方式,比場(chǎng)景驅(qū)動(dòng)噱頭還要大,尤其在一些控件點(diǎn)擊和web元素執(zhí)行的情況下。錄制回放并不能算作一個(gè)驅(qū)動(dòng)方式,只是一種輔助的手段,好處是一些技術(shù)基礎(chǔ)差的測(cè)試人員能夠參與測(cè)試用例的開(kāi)發(fā)中,提高開(kāi)發(fā)速度。不好的地方,是錄制后的腳本和用例一樣需要修改和調(diào)試才能實(shí)際工作,而且在自動(dòng)化架構(gòu)開(kāi)發(fā)的過(guò)程中,需要配套的使用hook和消息機(jī)制,做出相關(guān)的錄制功能。實(shí)際工作并不是商業(yè)軟件開(kāi)發(fā),需要合理的折中預(yù)算和人力投入,所以做不做是要看收益。但是事實(shí)上,錄制回放可以和后續(xù)的日志部分結(jié)合一起——執(zhí)行步驟,日志和錄像都可以通過(guò)索引整合到一起,定位到出錯(cuò)部分,并且重現(xiàn)。這是它的另一個(gè)好處。調(diào)度和執(zhí)行前面所有的東西,包括底層和測(cè)試用例管理驅(qū)動(dòng)的部分,能夠保證自動(dòng)化可測(cè),即這兩方面都完成的話,放到測(cè)試機(jī)上,就可以正常執(zhí)行和測(cè)試了。但是如果用例集很大,執(zhí)行環(huán)境復(fù)雜,人力執(zhí)行顯然不是好辦法。成熟的自動(dòng)化架構(gòu),必須考慮到測(cè)試機(jī)的執(zhí)行和調(diào)度。測(cè)試機(jī)管理測(cè)試機(jī)管理中,一般可以分為測(cè)試機(jī)執(zhí)行接口和代理——這兩個(gè)詞并不準(zhǔn)確,我臨時(shí)拿來(lái)用。命令發(fā)送命令發(fā)送這個(gè)詞同樣不準(zhǔn)確,因?yàn)樵趯?shí)體機(jī)的服務(wù)端和代理端,確實(shí)是以命令作為最小單元,但是如果是虛擬機(jī),就不存在命令發(fā)送,而是虛擬機(jī)接口。虛擬機(jī)調(diào)度虛擬機(jī),需要使用vmware提供的接口,流行語(yǔ)言都已經(jīng)提供,或者可以自行調(diào)用dll完成。接口在WM安裝路徑的32bit\vix.dll中。官網(wǎng)有相關(guān)信息。實(shí)體機(jī)實(shí)體機(jī)的命令發(fā)送,是我說(shuō)的真正的命令發(fā)送,無(wú)論服務(wù)和代理之間采用任何形式通信,執(zhí)行一條命令是最基本的顆粒。最小顆粒之上,是定義各種需要的命令。代理通信代理是調(diào)度驅(qū)動(dòng)的核心,一般情況下,實(shí)體機(jī)想要驅(qū)動(dòng),必須保持雙向聯(lián)通。一起單項(xiàng)的命令模式也能驅(qū)動(dòng),但是這是不完善的,沒(méi)有回執(zhí)和狀態(tài)查詢,就不能叫做調(diào)度和代理。虛擬測(cè)試機(jī)一樣需要代理通信——一個(gè)服務(wù)器資源有限,即便虛擬30多臺(tái)測(cè)試機(jī),有時(shí)候同樣不夠用。這時(shí)候可能有很多臺(tái)服務(wù)器提供虛擬機(jī),那么每臺(tái)服務(wù)上必須有自己的代理,服務(wù)和服務(wù)器通信,并且管理它的所有虛擬機(jī)。Socket通常,代理會(huì)選用socket進(jìn)行通信,服務(wù)端管理多個(gè)代理,這是通信的最常用技術(shù)。但是一些時(shí)候也會(huì)選擇直接使用http通信,每個(gè)client端管理一個(gè)web服務(wù),這種情況比較少。反ping對(duì)于有些特殊情況,比如需要重啟或者重裝系統(tǒng)的情況,需要代理的client端失去聯(lián)系后反Ping服務(wù)端,重新恢復(fù)session。ICE一個(gè)比較久遠(yuǎn)的面相對(duì)象的中間件平臺(tái),可以借助ICE定義自己的接口,最終完成代理通信和調(diào)用。GoogleProtoBuf簡(jiǎn)單的說(shuō),googleprotoBuf是谷歌的一種數(shù)據(jù)交換格式,更確切的說(shuō),是一種可擴(kuò)展的序列化結(jié)構(gòu)數(shù)據(jù)格式,可以用來(lái)存儲(chǔ),RPC或者等數(shù)據(jù)通信。對(duì)于通信調(diào)用,可以借助這種格式進(jìn)行傳輸和臨時(shí)存儲(chǔ)。MinaMina在這里,是一個(gè)重量級(jí)的東西。因?yàn)樯厦鍵CE和googleprotobug的內(nèi)容它都包含。它的根本是一個(gè)通信應(yīng)用框架,提供了協(xié)議的封裝,流和管道機(jī)制,同步和異步等。和ICE一樣也提供了server和client的封裝。在考慮寫代理的時(shí)候,可以優(yōu)先選擇。缺點(diǎn)是只能用java來(lái)寫。WTT&MTMWTT是微軟內(nèi)部一直使用的一個(gè)測(cè)試機(jī)任務(wù)派發(fā)調(diào)度系統(tǒng),它是基于命令的,同時(shí)采取了反ping技術(shù),所以一些斷網(wǎng)和刪除驅(qū)動(dòng)的測(cè)試,一樣可以勝任。這是我覺(jué)得任務(wù)派發(fā)的調(diào)度的一個(gè)比較好的系統(tǒng),并且支持定時(shí)任務(wù)和派發(fā)模板的創(chuàng)建,通過(guò)配置幾乎可以完成任何測(cè)試調(diào)度的任務(wù)。只可惜是個(gè)內(nèi)部的東東,而且太大了,一般的測(cè)試團(tuán)隊(duì)很難開(kāi)發(fā)和維護(hù)。相對(duì)來(lái)說(shuō),微軟的另一個(gè)主推的測(cè)試生態(tài)平臺(tái)MTM和AutoLib,并不是很好,很難和流行的QC等系統(tǒng)比較。主要愿意是它勉強(qiáng)和VS的搞到了一起,而且很多設(shè)計(jì)在根本上沒(méi)有考慮到擴(kuò)展和模板的概念。另外,作為一個(gè)平臺(tái),它寄生在VS的生態(tài)環(huán)境,使得性能無(wú)法提高。其他調(diào)度分配調(diào)度分配在執(zhí)行調(diào)度中,是一個(gè)可大可小的東西。一般在自動(dòng)化架構(gòu)開(kāi)發(fā)初期不怎么去考慮。但是如果自動(dòng)化架構(gòu)穩(wěn)定之后,可能會(huì)有一些分配上的需求,包括平均,動(dòng)態(tài)以及一些特殊的需求。通常分配策略使用插合的方式,可以一種策略對(duì)應(yīng)一個(gè)對(duì)象,也可以所有策略對(duì)應(yīng)工廠類,或者使用純算法的方式完成。平均平均模式一般將M個(gè)用例分到N臺(tái)機(jī)器上執(zhí)行,即使能夠監(jiān)控測(cè)試機(jī)狀態(tài),也沒(méi)辦法對(duì)已經(jīng)分法出去的任務(wù)進(jìn)行異常處理動(dòng)態(tài)動(dòng)態(tài)分配是一種相對(duì)較優(yōu)的辦法,它通常會(huì)輪詢測(cè)試機(jī),有空閑則分配測(cè)試任務(wù)。它不會(huì)因?yàn)槟硞€(gè)任務(wù)異?;蛘邷y(cè)試機(jī)異常而卡住。但是由于輪詢都需要計(jì)算,所以分發(fā)計(jì)算上效率差一些。隊(duì)列和池?zé)o論任何任務(wù)隊(duì)列也好,調(diào)度池也好,各種說(shuō)法等等,在分配策略中,事實(shí)上只有任務(wù)集合和測(cè)試機(jī)集合。再?zèng)]有其他約束條件的情況下,即所有任務(wù)級(jí)別一樣,所以測(cè)試機(jī)級(jí)別一樣,它的調(diào)度會(huì)有一個(gè)折中的動(dòng)態(tài)方法,在動(dòng)態(tài)分配的基礎(chǔ)上,定義每次分發(fā)的最小單元。在動(dòng)態(tài)的同時(shí)保證了計(jì)算效率。特殊需求這里的特殊需求,指的特殊的任務(wù)級(jí)別和特定測(cè)試機(jī)環(huán)境。這里一些有效的方法就是聚成,重排和過(guò)濾。無(wú)論是任務(wù)和測(cè)試機(jī),都可以分成各種集合和子集合,在執(zhí)行的時(shí)候,可以才去節(jié)點(diǎn)為參數(shù)進(jìn)行任務(wù)的下發(fā),滿足特殊需求;如果用例和測(cè)試機(jī)的命令有約束,也可以采取過(guò)濾的方法,制定好過(guò)濾規(guī)則。另外在任務(wù)隊(duì)列里,會(huì)涉及到一些局部排序方法,這些可能要具體情況具體考慮。日志日志是一個(gè)測(cè)試架構(gòu)必須的部分,可以幾乎任何部分都要涉及到日志。當(dāng)然除了通常的一般日志,還有一些特定的日志,他們可以用來(lái)定位測(cè)試用例失敗點(diǎn)等等。調(diào)試日志調(diào)試日志通常放在執(zhí)行目錄下,無(wú)論調(diào)度服務(wù)還是測(cè)試用例在測(cè)試機(jī)上的執(zhí)行。一般來(lái)說(shuō),調(diào)度服務(wù)的日志只需要記錄具體關(guān)注的問(wèn)題即可,但是在測(cè)試機(jī)中執(zhí)行的測(cè)試用例,其日志需要和用例執(zhí)行步驟一一對(duì)應(yīng)。這部分建議是,如果用例順序執(zhí)行,則順序記錄日志,如果遞歸執(zhí)行,則遞歸格式記錄日志。日志的內(nèi)容可以包括和用例一一對(duì)應(yīng)的信息,以及執(zhí)行的具體山下文環(huán)境,和運(yùn)行時(shí)狀態(tài)。本地&數(shù)據(jù)庫(kù)通常,測(cè)試日志分為兩部分,一部分測(cè)試結(jié)果在運(yùn)行時(shí)存入數(shù)據(jù)庫(kù),這也是最終查看測(cè)試執(zhí)行結(jié)果的數(shù)據(jù)源。當(dāng)時(shí)一些調(diào)試信息日志,沒(méi)必要放在數(shù)據(jù)庫(kù),而且也不便于調(diào)試,一般來(lái)說(shuō)這部分日志在用例執(zhí)行結(jié)束后,會(huì)按照具體執(zhí)行ID放入到固定的共享文件夾。測(cè)試人員調(diào)研和調(diào)試測(cè)試用例的時(shí)候,這些都是重要的東西。另外,放到共享文件夾的調(diào)試日志,最好也包含用例執(zhí)行步驟和結(jié)果,因?yàn)橐恍嗑W(wǎng)的情況下,無(wú)法保證數(shù)據(jù)庫(kù)的連通,但是卻希望得到執(zhí)行的正常結(jié)果。結(jié)果執(zhí)行結(jié)果執(zhí)行結(jié)果一般是以步驟為最小粒度,存放在數(shù)據(jù)庫(kù)。當(dāng)然本地日志中也最好有一份,如上面所提到的。失敗截圖失敗截圖是日志的重要組成部分,對(duì)于將截圖放在日志的共享文件夾目錄下,是沒(méi)有太多異議的,一般來(lái)說(shuō),這部分的異議是是否應(yīng)該將失敗截圖保存到數(shù)據(jù)庫(kù)中。個(gè)人建議這個(gè)看情況,但是一般保存到數(shù)據(jù)庫(kù)中也沒(méi)有什么不好,如果不需要在數(shù)據(jù)庫(kù)讀取的話,是個(gè)備份,如果讀取的話,可以整合到一些前臺(tái)頁(yè)面中。這里唯一需要注意的是,如果將失敗截圖存放到數(shù)據(jù)庫(kù),那么,那么千萬(wàn)別使用select*fromXXX的這種方式進(jìn)行讀取,不然你的數(shù)據(jù)庫(kù)服務(wù)器內(nèi)存再大也承受不住。錄像錄像沒(méi)有太多爭(zhēng)議的放在了文件共享系統(tǒng)中進(jìn)行保存,畢竟它太大了,也沒(méi)有太多頁(yè)面顯示的必要,反而不如在文件系統(tǒng)查看方便。錄像這部分需要注意的是,很多時(shí)候錄像可以和失敗日志集成到一起,通過(guò)失敗日志進(jìn)行索引的定位,然后點(diǎn)擊錄像查看。一些流行的測(cè)試框架也提供了這類的日志和錄像的查看工具。存儲(chǔ)存儲(chǔ)主要是用來(lái)查看的,之前也提到了主要分為數(shù)據(jù)庫(kù)存儲(chǔ)和文件系統(tǒng)存儲(chǔ),他們適合存不同

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論