首先還是要強調一點,API和command line程序都是非常適合用自動化來進行測試的。我想這個觀點,即使那些反對自動化測試的人也不應該否認吧?至少我覺得他們應該有這個意識。因此,對于他們反對自動化就集中在了UI自動化方面,我這里也完全站在UI自動化測試的角度來寫這篇文章,后邊就不再強調了。
再次套用朋友的一句話,"自動化測試聽起來很神秘,學起來很簡單,用起來很麻煩"。我想有過自動化測試經驗的人,可能大多都有這個體會吧?前邊的過程我就不提了,以后主要探討為什么用起來會麻煩和怎樣簡單化自動化測試?偠灾,想搞好自動化測試,還是需要測試人員比較高的技術水平,尤其是編程能力和解決問題,分析問題的能力。
首先,我要談談自動化測試工具和編程語言的關系。作為一個優秀的自動化測試人員,他的最基本的能力就是編程水平了。所謂編程就是至少要精通一門高級語言,比如Java,C#等等,腳本語言不計算在內。請記住,不是熟悉,是精通。高級編程語言給我們提供很強的能力來實現一些東西。你所精通的語言能力越強,你在自動化測試可以做的事情就越多,越好。簡單來講,論程序的能力來排序是這樣的,測試工具-〉腳本語言-〉高級語言(Java,C#)-〉C/C++-〉C++/CLI。根據這個語言能力的排序,結合你自己的語言能力,你可以想想你到底具備多少自動化測試能力。我所強調的是,如果你想優秀,你至少要精通一門高級語言,這是必不可少的。如果很多人還只是用測試工具,腳本語言工作而抱怨自動化,我要強烈的建議他們好好去學習一下編程能力先了。他們的問題在于,由于編程能力的不足,使得自動化測試的很多問題沒有能力和辦法去解決。再談一下自動化測試工具,無論哪種測試工具,無論他們設計的多么強大,從編程語言來講,他們最多能夠達到腳本語言的能力。也就是說,如果你完全用測試工具來進行自動化的開發,很多問題你還是無法解決的。因此,我推薦的自動化開發方法是高級語言結合測試工具。我的自動化測試邏輯是,用測試工具只是完成UI操作,其他部分完全用高級語言來實現。我們不能否認高級語言所具有的能力,他們創造出了世界上這么多豐富多彩,這么多優秀的軟件,難道開發測試程序會有問題嗎?因此,我們的焦點就落在了測試工具的UI操作部分。
第二,關于測試工具。開發語言重要,選擇一個合適的測試工具也同樣的重要。一個靈活,強大的測試工具可以使你的自動化開發起到事半功倍的作用。結合不同的項目,不同的語言,你可能會有不同的選擇。不過,這里我想解釋的是,具有了高級語言的開發能力之后,我們期望測試工具來為我們做什么。我前邊也說過了,我們所要求自動化測試工具所做的就是UI的操作。這里邊比較重要的是三個方面,一是找到UI對象,二是操作UI對象,三是同步。如果一個工具能夠讓你找到所有的UI對象,并且能成功操作這些對象,就完全滿足我們的自動化開發需要了。如果,工具能夠提供同步的功能,就使你能夠如虎添翼,不然的話要自己去實現,會麻煩不少。到了這里,你已經具有了所有UI的操作能力(測試工具提供),并且具有了高級語言的實現能力(高級語言提供),你才有了基本的能力去做一個優秀的自動化開發。沒有這些能力的人,我嚴重懷疑能否做出好的自動化測試。
第三,怎樣自動化。我的自動化的原則是,盡量少的進行UI的操作,除非是你本身要測試的UI。道理很簡單,UI操作由于可能受各種問題的干擾,很容易失敗。通過非UI的方法去實現是更加可靠和快速的。這也是我為什么要強調對于高級語言的精通,具有高級語言的開發能力,你就能過把大量的任務從UI操作轉向了程序操作,使得你的自動化程序的可靠性大大的增強。這里還需要強調的一點能力就是系統應用的能力,比如Windows使用的能力。Windows的很多的操作是有相關的命令來實現的,不一定非得通過大家熟悉的UI。記住這個原則:除非是你要測試的UI,否則盡可能的通過高級語言來實現。我想大家對于高級語言來實現的工作應該還是有信心吧?因此,下邊我要談的內容就完全的與你要測試的界面相關了。
第四,怎樣進行UI測試。首先要盡量的減少UI操作,除非是你必須要測試的操作。比如簡潔快速的啟動你要測試的界面,用快捷鍵代替鼠標操作等等?偠灾,理想狀態下我們進行的每一次UI操作,都是我們需要測試的,其他操作盡量避免,不能避免用最可靠的方式去實現。那么我們現在的焦點就變成了,怎樣來處理我們真正要測試的UI了。UI測試的開發基本上就三個問題:發現對象,操作對象和同步。簡單解釋一下同步,同步就是有一個機制告訴你何時可以執行一個UI操作。很多人是用sleep的方式,等待一定的時間去執行下一個操作,這是我非常反對的。我的原則是,盡量少用sleep,就算要用每次最多不要超過一秒。濫用sleep會嚴重影響測試程序的性能(具體的UI自動化過程,大家可以參考我的其他文章)。
文章來源于領測軟件測試網 http://www.kjueaiud.com/