https://zhuanlan.zhihu.com/p/22083601\正則表達式
感謝輪子哥點贊,這會兒消息扎堆過來了,輪帶逛果真不是隨便說說的……windows
第二篇一個簡單的Windows Automation API測試用例已經更新。api
以前回答了一個問題https://www.zhihu.com/question/49452639/answer/117174974?group_id=749327470490025984,原本是說那個火車票查詢軟件的,捎帶說了一句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的角度,咱們再來看自動化測試工具的發展(以我用過的工具來講):spa
- 最初用的工具是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平臺自動化測試