對(duì)于任何一個(gè)需要開(kāi)發(fā)有持久生命力軟件的組織來(lái)說(shuō), 自動(dòng)化測(cè)試顯得必不可少。 比如像Windows這樣的產(chǎn)品, 通常的生命周期可以長(zhǎng)達(dá)10年以上。 試想一下, 沒(méi)有自動(dòng)化測(cè)試的話(huà), 任何一次的產(chǎn)品改動(dòng)、升級(jí)、補(bǔ)丁、導(dǎo)致的測(cè)試成本有多大。

  之所以說(shuō)自動(dòng)化測(cè)試是技術(shù), 原因在于自動(dòng)化測(cè)試的技術(shù)難度, 特別是UI測(cè)試自動(dòng)化。 跟軟件產(chǎn)品一樣, 自動(dòng)化測(cè)試程序也講究性能、穩(wěn)定性、可伸縮性等指標(biāo)。 測(cè)試程序除了要實(shí)現(xiàn)目標(biāo)程序一樣的功能才能夠進(jìn)行結(jié)果檢驗(yàn)以外, 測(cè)試程序還要實(shí)現(xiàn)額外的功能去觀察目標(biāo)程序的行為。比如要自動(dòng)化測(cè)試 “dir C:*.txt” 這個(gè)命令, 測(cè)試程序除了要實(shí)現(xiàn)跟dir一樣的文件讀取, 通配符展開(kāi)的功能外, 還需要讀取dir命令的輸出結(jié)果才能夠進(jìn)行結(jié)果的比對(duì)。同時(shí)也要支持跟dir命令一樣的靈活性和擴(kuò)展性。這使得自動(dòng)化測(cè)試在實(shí)現(xiàn)起來(lái)有可能比其測(cè)試目標(biāo)的實(shí)現(xiàn)更加困難。而對(duì)于UI產(chǎn)品的自動(dòng)化,實(shí)現(xiàn)起來(lái)牽涉到讀取GUI的圖像輸出(比如檢查是否正確彈出了MessageBox),模擬用戶(hù)的鼠標(biāo)鍵盤(pán)輸入(比如模擬用戶(hù)在保存文件的時(shí)候選擇正確的保存路徑),同步測(cè)試產(chǎn)品和用戶(hù)的交流等等。這些技術(shù)門(mén)檻使得自動(dòng)化測(cè)試成為一把雙刃劍,成敗不在于是不是去做它,而是有沒(méi)有能力把它做好。 接下來(lái)的介紹會(huì)讓你對(duì)微軟的UI測(cè)試自動(dòng)化和軟件測(cè)試開(kāi)發(fā)工程師(Software Development Engineer in Test以下簡(jiǎn)稱(chēng)SDET)有更深入詳細(xì)的了解。

  舉一個(gè)十分具體的UI自動(dòng)化的例子:

  1. 啟動(dòng)計(jì)算器程序(calc.exe)

  2. 模擬用戶(hù)進(jìn)行菜單輸入,從普通模式切換到科學(xué)模式

  3. 模擬用戶(hù)計(jì)算(4+6/2)的階乘

  4. 檢查計(jì)算結(jié)果是否正確

  要求:

  1. 整個(gè)流程的執(zhí)行在4秒以?xún)?nèi)完成

  2. 能夠適應(yīng)于不同分辨率和語(yǔ)言 (不同語(yǔ)言的菜單項(xiàng)文字是不同的!)

  3. 能夠穩(wěn)定執(zhí)行,若非產(chǎn)品本身的確有bug,該序列不允許失敗

  4. 如果下一版本的calc.exe修改UI風(fēng)格 (Win7中已經(jīng)修改了),或者改為WPF實(shí)現(xiàn),要求現(xiàn)有的測(cè)試代碼僅做簡(jiǎn)單修改即可繼續(xù)使用

  對(duì)于剛?cè)肼毜腟DET來(lái)說(shuō),其實(shí)現(xiàn)難度已經(jīng)足夠大得讓其寧愿去寫(xiě)一個(gè)calc.exe程序本身。無(wú)論是學(xué)校的教學(xué)還是課外的研究,針對(duì)UI自動(dòng)化的資料幾乎是零。上訴功能和需求,需要工程師結(jié)合已知的知識(shí)和技能,研究出解決問(wèn)題的佳辦法。

  UI自動(dòng)化其實(shí)是一種進(jìn)程與進(jìn)程之間的通信。測(cè)試程序需要跟目標(biāo)程序通過(guò)某種進(jìn)程通信方式來(lái)獲取目標(biāo)程序的信息,包括UI元素的位置,顯示的文字內(nèi)容,然后再模擬用戶(hù)的操作比如在特定位置點(diǎn)擊鼠標(biāo)。進(jìn)程之間通信方式來(lái)說(shuō),Windows平臺(tái)上有很多選擇,比如管道,TCPIP,Windows消息,共享文件,RPC等等。對(duì)于UI自動(dòng)化,容易想到的解決方案是Windows消息。通過(guò)Windows消息以及跟Windows相關(guān)的API可以獲取計(jì)算器窗口,菜單和按鈕位置。但真正開(kāi)始用Windows消息來(lái)實(shí)現(xiàn)UI自動(dòng)化測(cè)試的時(shí)候,會(huì)發(fā)現(xiàn)Windows消息的一些不足,比如Windows消息無(wú)法用于WPF程序,無(wú)法獲取Excel或者IE里面的UI子元素。

  所以,除了Windows消息外,工程師還需要更深入地考慮其它技術(shù)。其間需要研究微軟內(nèi)部的各種UI Test Framework,了解不同F(xiàn)ramework的實(shí)現(xiàn)技術(shù),優(yōu)劣以及和測(cè)試目標(biāo)的匹配程度。在進(jìn)行不斷的摸索,嘗試,原代碼分析后,工程師才會(huì)對(duì)微軟平臺(tái)各種技術(shù)有深入的了解,整個(gè)過(guò)程是把基礎(chǔ)的理論知識(shí)轉(zhuǎn)換為產(chǎn)品相關(guān)的生產(chǎn)力的過(guò)程。

  UI自動(dòng)化對(duì)于SDET來(lái)說(shuō)有兩層含義。其一,對(duì)該技術(shù)的熟悉程序決定測(cè)試工作的質(zhì)量。另外,由于UI自動(dòng)化涵蓋的技術(shù)范圍和深度,使得該技術(shù)是鍛煉SDET的一個(gè)很好的平臺(tái)。微軟對(duì)工程師的技術(shù)技能要求不是限制在某一固定領(lǐng)域的,而是要求工程師鍛煉能夠通用的核心競(jìng)爭(zhēng)力。比如,作為SDET,通過(guò)2年的努力,在Visual Studio的界面測(cè)試上取得了90分的成功,那么,如果該工程師愿意換一個(gè)項(xiàng)目做SDE(Software Development Engineer, 即軟件開(kāi)發(fā)工程師)的話(huà),比如到SQL Server開(kāi)發(fā)存儲(chǔ)過(guò)程的圖形化設(shè)計(jì),他在前兩年所積累的技術(shù)技能,要能夠確保他在新的項(xiàng)目和職位上,取得同級(jí)別的90分。而UI自動(dòng)化,對(duì)于鍛煉這樣的核心競(jìng)爭(zhēng)力是一個(gè)非常好的平臺(tái),因?yàn)樗辽侔耍?/FONT>

  1. 精通微軟通用的開(kāi)發(fā)工具和技術(shù), 比如C#, .NET Framework, 多線(xiàn)程。把開(kāi)發(fā)技巧運(yùn)用到實(shí)際的項(xiàng)目中。

  2. 熟悉Windows平臺(tái)的系統(tǒng)知識(shí),比如進(jìn)程間通信, Win32消息機(jī)制。站在微軟工程師的角度,通過(guò)具體的項(xiàng)目和代碼充分了解Windows平臺(tái)。

  3. 鍛煉在壓力環(huán)境下解決實(shí)際問(wèn)題的能力, 比如深入分析COM/DCOM,研究UI Automation Framework的底層實(shí)現(xiàn)來(lái)解決技術(shù)上的細(xì)節(jié)問(wèn)題。

  4. 熟練掌握調(diào)試技巧。UI自動(dòng)化的開(kāi)發(fā)過(guò)程牽涉到測(cè)試程序和目標(biāo)程序,在調(diào)試的時(shí)候需要處理兩者的同步問(wèn)題。同時(shí),UI自動(dòng)化的穩(wěn)定性是比較難解決的問(wèn)題。調(diào)試一個(gè)偶爾發(fā)生的錯(cuò)誤是一個(gè)非常有挑戰(zhàn)性的任務(wù)。

  5. 在自動(dòng)化測(cè)試的開(kāi)發(fā)過(guò)程中熟悉微軟的項(xiàng)目流程,后,給SDET帶來(lái)的不僅僅是測(cè)試技能的飛躍,同時(shí)也讓工程師更加熟悉所測(cè)試的產(chǎn)品,更好地保證產(chǎn)品質(zhì)量。

  當(dāng)一個(gè)SDET經(jīng)歷了UI自動(dòng)化測(cè)試,武裝上了上述技能,意味著他熟知微軟平臺(tái)的開(kāi)發(fā)技巧,體驗(yàn)過(guò)程序開(kāi)發(fā)過(guò)程中通常是如何犯錯(cuò),如何調(diào)試,工程師在怎樣的情況下容易做出錯(cuò)誤的判斷和假設(shè),那么,他能夠很輕松地破壞別人的程序,找出漏洞。這不僅僅對(duì)測(cè)試工作來(lái)說(shuō)是一個(gè)很好的起點(diǎn),這樣的堅(jiān)實(shí)技術(shù)背景還能夠讓工程師學(xué)習(xí)和發(fā)展其它技能的時(shí)候事半功倍。換言之,自動(dòng)化測(cè)試對(duì)微軟的產(chǎn)品來(lái)說(shuō),是保證其可以持續(xù)成功的重要技術(shù);對(duì)于的SDET來(lái)說(shuō),是一項(xiàng)必不可少的重要的技能;對(duì)于剛?cè)肼毜墓こ處焷?lái)說(shuō),親身體驗(yàn)和研究自動(dòng)化測(cè)試,特別是UI自動(dòng)化,能夠讓你實(shí)現(xiàn)學(xué)生生涯到職業(yè)生涯的轉(zhuǎn)變。

  在后續(xù)的文章中,我打算介紹自動(dòng)化測(cè)試和手動(dòng)測(cè)試的比較,看看自動(dòng)化測(cè)試所達(dá)到的效果是否等同于手動(dòng)測(cè)試的錄制和重復(fù)。同時(shí),也會(huì)具體介紹UI自動(dòng)化測(cè)試開(kāi)發(fā)的有趣細(xì)節(jié)。