Windows Automation API和自動化測試

感謝輪子哥點贊,這會兒消息扎堆過來了,輪帶逛果然不是隨便說說的……

第二篇一個簡單的Windows Automation API測試用例已經更新。

之前回答了一個問題zhihu.com/question/4945,本來是說那個火車票查詢軟體的,捎帶說了一句UI自動化測試,結果評論里大家對Windows怎麼用C#做UI自動化測試比較感興趣。我就寫幾篇關於UI自動化的文章,順便也算是對這些年工作的總結吧。這個是第一章,後來會結合代碼來深入講解。文筆老婆說是文盲級別的,大家隨便看看。如果哪裡講的不對,還請在評論里指出,謝謝!

首先聲明一下,我講的是UI自動化,而且是進程外操作另外一個程序(進程內怎麼做,不在本文覆蓋範圍,非UI的自動化測試也不在本文覆蓋範圍)。對於UI自動化測試,我是持謹慎樂觀態度,也就是謹慎選擇是否要做UI自動化測試,謹慎寫自動化測試用例,對於UI自動化測試的效果還是比較樂觀的。

要說Windows上邊的UI自動化測試,我們就先從底層的Windows API講起吧,這裡不會講很細,先大概說一下,有興趣的朋友可以看MSDN的鏈接。

  • 在最初版本的Windows上(應該是windows8以前吧,如果沒有記錯的話)是沒有專門針對自動化測試的API(雖然不知道微軟最初的設計時候,有沒有針對自動化測試,我的理解是沒有的),只有一套API是針對Accessibility的(MSAA - Microsoft Active Accessibility),也就是針對特殊人群,這些API提供的功能就是幫助程序識別現在滑鼠下邊的文字、控制項類型等,來幫助這些人使用電腦(比如屏幕閱讀器等)。而美國政府有一個針對這個的標準,叫Section 508:https://www.section508.gov,微軟的所有標準控制項都是支持這個標準並實現MSAA的介面。

    我們都知道,人民群眾的智慧是無限的,利用這套MSAA API,人們可以做很多有意思的事情,不限於屏幕閱讀。比如電子詞典的滑鼠取詞翻譯,比如截圖軟體可以識別控制項的區域從而實現精準截圖。再比如我們今天的重點,可以通過這個API,實現一個程序控制另外一個程序,並且獲得控制項的文本和狀態來做測試的驗證

    從利用這個API做測試的角度來看,測試程序可不就是一個盲人程序,我們寫邏輯來幫助這個盲人程序去操作另外一個程序。
  • 然而歷史都是在發展的,隨著WPF的出現,MSAA在對這類UI的支持就捉襟見肘了。Windows Automation API也應運而生,這套API從名字上看就可以知道是為了Automation而設計的,它支持以前的MSAA控制項(win32和winform),並且對WPF也有很好的支持。

從這兩套API的角度,我們再來看自動化測試工具的發展(以我用過的工具來說):

  • 最初用的工具是Silktest,比較古老的一個自動化工具。自從有了WPF之後,它就比較捉急了,各種控制項不支持,沒法做自動化測試,直到WPF發布至少一年之後才有新版本支持。最初我所在的Team要測試的產品就是WPF UI的,只能放棄Silktest了。在當年也沒有任何的自動化測試工具可以支持WPF,大家也可以想明白原因,因為以前所有的工具都是基於MSAA的,Windows Automation API大家還都沒有開始支持。
  • 對了Silktest不支持,我們暫時也找不到工具來做,所以只能基於Windows Automation API自己做了一套類庫來做這個測試。後邊有時間我會寫一些其它的文章,來講怎麼去實現這個的
  • 後來的工具TestComplete也都是支持WPF了,底層其實都是一樣Windows Automation API。TestComplete也就是玩了一下,當時性能很捉急,也就沒有繼續試了
  • 再後來,就是大公司的通病,什麼都想插一腳過來,微軟自己也做了CodeUI這套類庫,來支持創建UI自動化測試的Testcase。CodeUI這套類庫好不好用,我就沒有發言權了,因為我們有自己的類庫,而且最初嘗試了CodeUI,發現不支持正則表達式匹配,也就沒繼續玩了

後邊章節預告 (我現在只有個標題,等工作不是很忙了再一個個補上,大家如果有特別感興趣的話題,我也可以調整一下順序……):

  • 一個簡單的Windows Automation API測試用例
  • 非UI自動化測試和UI自動化測試

  • 反對盲目的UI自動化測試

  • C#反射在UI自動化測試工具中的應用

  • 什麼是一個好的UI自動化測試用例

  • 進程內自動化測試和進程外自動化測試
  • 同步和Sleep的選擇

  • 自動化測試應該從軟體設計開始

  • 自定義控制項支持Windows automation api
  • 專職自動化測試還是兼職自動化測試

  • Python在自動化測試上的應用

  • 談談Qt這貨

  • 談談UI自動化在localization測試中的問題

  • Jenkins跟自動化測試是好基友

  • 基於Cloud的自動化測試系統設想

  • MacOSX平台自動化測試

推薦閱讀:

WEB自動化1:什麼是自動化測試?
為什麼要寫測試用例,測試用例寫給誰看?
在國外,資深的軟體測試人員大多是手動測試,他們厲害之處在於測試用例的設計,但在國內,很多測試人員都把自動化測試當成很厲害的資本,為什麼?
為何國內的前端對自動化測試好像不是很看重?
用Tomcat,部署時對server.xml文件里的埠號進行修改,但這三個埠號必須全部修改嗎?

TAG:自动化测试 | C#编程 | 软件测试 |