這周都在忙大學最后一門課的課程設計——軟件自動化測試,同一組的一個考研一個實習,基本都是我把活干了,不過也學到不少東西,貼出來分享一下
軟件自動化測試范疇很廣,理論我就不說了,只針對我這次選的題目——Java自定義組件的測試,從Java事件機制的基礎說起,其中有一小部分關于開源軟件測試框架Abbot的簡單介紹
還是先說說Abbot吧,Abbot可以支持Java GUI組件從單元測試到集成測試,簡單地說,單元測試時,你可以使用Abbot的一些類庫,把你要測試的GUI扔給某個方法,然后Abbot可以查找某個組件,比如特定按鈕,然后對那個按鈕調用一下 click(我的按鈕),就可以實現“點擊”的效果, 你會看到屏幕上的鼠標移動到那個按鈕上并點擊,很有趣吧,當然你可以手工編寫一堆代碼控制鼠標移動到那個按鈕上并點擊,但是那樣很麻煩,Abbot幫你封裝了很多底層的操作。
對于一個已經做好的GUI,Abbot也可以進行腳本錄制,也就是你在你的GUI上操作,Abbot自動記下你的動作,以腳本形式保存起來,以后你還可以進行重放。下面是官方介紹的一部分翻譯:
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, 110
Select "blue" from the color list
5.支持動態錄制高級語義事件
你可以手工編輯xml文件,也可以一條條修改測試語句,但是有了Costello editor ,電腦會幫你記錄所有用戶動作,并自動生成腳本
6.用戶動作的記錄和生成是可擴展的
你可以自己擴展上述框架,以支持自定義的組件。雖然說用基本的robot可以在不修改測試代碼的情況下測試任何東西,不過使用擴展的好處在于:你的代碼更加抽象,就好像調用CalRow(10)而不是click(x,y),其中x、y指的是第10行的中心坐標
官方文檔還是比較詳細的,看完可以基本入門,網址是 http://abbot.sourceforge.net/
在coding的過程中,還遇到了大大小小的各種問題,也會作為技巧性的帖子發上來