軟件自動化測試範疇很廣,理論我就不說了,只針對我此次選的題目——Java自定義組件的測試,從Java事件機制的基礎提及,其中有一小部分關於開源軟件測試框架Abbot的簡單介紹
仍是先說說Abbot吧,Abbot能夠支持Java GUI組件從單元測試到集成測試,簡單地說,單元測試時,你可使用Abbot的一些類庫,把你要測試的GUI扔給某個方法,而後Abbot能夠查找某個組件,好比特定按鈕,而後對那個按鈕調用一下 click(個人按鈕),就能夠實現「點擊」的效果, 你會看到屏幕上的鼠標移動到那個按鈕上並點擊,頗有趣吧,固然你能夠手工編寫一堆代碼控制鼠標移動到那個按鈕上並點擊,可是那樣很麻煩,Abbot幫你封裝了不少底層的操做。
對於一個已經作好的GUI,Abbot也能夠進行腳本錄製,也就是你在你的GUI上操做,Abbot自動記下你的動做,以腳本形式保存起來,之後你還能夠進行重放。下面是官方介紹的一部分翻譯:java
Abbot 框架
abbot提供了一個框架測試你的GUI代碼,而不用考慮你的代碼的當前狀態。若是你喜歡進行測試驅動的開發,那麼abbot提供相關工具爲你生成單元測試代碼。若是你已經有一堆代碼但不是基於單元測試的,abbot也能夠幫你生成腳本
總的來講,abbot測試首先要得到組件的引用,而後要麼模擬用戶操做,要麼對組件的狀態進行斷言。abbot提供ComponentReference得到組件的句柄,以及擴展的、相似robot的對象,用來模擬用戶行爲。這些操做既能夠經過腳本,也能夠經過java代碼來實現
abbot的目標:
1.用戶輸入的可靠重現
GUI測試不完全的一大緣由就是不能很好的重現用戶輸入
2.利用腳本控制動做
使用動態解析的腳本,省去了寫新的測試代碼的麻煩,而且這些腳本還能直接調用java單元測試的代碼
3.下降組件之間的綁定
若是修改了原有的GUI佈局,組件的位置、大小改變了,那麼以前的測試代碼可能會失效(好比找不到新的組件位置)在不一樣平臺下,組件的位置大小均可能改變,那樣測試框架就不能跨平臺了。abbot使用查詢機制,只要能查詢到組件,即便位置大小改變了,abbot同樣能夠運行
4.底層使用低級的操做系統事件來實現高級的語義行爲
java.awt.robot提供了便利的方法直接生成事件,可是其功能太過基礎,不方便使用,abbot在其上抽象出方便的接口(正如Swing對基本窗口的抽象同樣)。經過抽象語句,你能夠很容易的推斷出測試代碼的功能,好比像下面這樣:
Click on 100, 100
Move to 110, 110
Press down key
Press down key
Click on 110, 110app
Select "blue" from the color list框架
5.支持動態錄製高級語義事件
你能夠手工編輯xml文件,也能夠一條條修改測試語句,可是有了Costello editor ,電腦會幫你記錄全部用戶動做,並自動生成腳本
6.用戶動做的記錄和生成是可擴展的
你能夠本身擴展上述框架,以支持自定義的組件。雖說用基本的robot能夠在不修改測試代碼的狀況下測試任何東西,不過使用擴展的好處在於:你的代碼更加抽象,就好像調用CalRow(10)而不是click(x,y),其中x、y指的是第10行的中心座標ide