android自動化測試之robotium初探

 

對於robotium的使用感覺來說一下吧。使用感覺當然是方便了。因爲確實幫助自動化測試開發者提供了很多方便的方法。

 

具體的使用到的方法在這邊說一下。

 

首先,android Junit 提供的實例代碼,對於學習好像有一些幫助,但是對於一個實際的涉及到Activity之間有切換的問題,好像提及的不多,反正是沒有找到。但是在robotium裏面有一個solo.getCurrentActivity()幫助我們很輕鬆的搞定這個問題。

 

其次,輸入內容。robotium裏面的做的很細緻,輸入是模擬輸入並不是簡單的setvalue這樣的簡單粗暴的方法,其次對於控件是否存在和時候能夠輸入都做了判斷。最後,等待控件在方法裏面直接封裝好了。就是用起來很方便了。

 

再來說說robotium的不足,

 

我段數比較低,還沒有發現,但是淘寶的牛人們大概說了這麼幾條。

 

Robotium提供的API是面向過程的,測試代碼的可擴展性差—— 我覺得robotium可以簡單的源碼反編譯,看到源碼,是在不爽了,可以自己重寫方法。

 

讓testapp和app運行在兩個不同的進程中,這是一個大坑。——太高深的理解不了,但是有一個顯而易見的缺點就是app進程不在了,testapp還在斷言。呵呵

 

目前框架中有很多地方硬編碼Thread.sleep()去等待一個View加載完成,避免對空的View進行操作,或者是對一個view進行set操作後,也需要等待一段時間讓操作生效。希望能找到一種回調機制優雅的解決——這個說的很好,但是android現在真的沒有提供。

 

 

淘寶的牛人說的不足,不光是robotium的不足,而且是android JUnit的不足。所以淘寶希望能又自己的測試框架。這個對於一般中小型軟件公司的投入來說是一個不敢想象的問題。所以,坐等淘寶的更高級的測試框架吧。先用robotium了。


評論:

robotium本身就是對instrumentation的封裝,如果再進行反編譯,那你還不如直接去用instrumentation測試..... 
我是最近開始瞭解這個的.也不太清楚.

 

robotium本身就是對instrumentation的封裝,如果再進行反編譯,那你還不如直接去用instrumentation測試..... 

robotuim之二
 
首先,robotium 有一個getCurrentActivity,這個方法,我覺得那是相當的好用。於是,決定反編譯源碼好好的學習一下。於是,自己基本在照抄的情況下有了自己的getCurrentActivity方法。一用不好用。然後繼續學習。
 
隨着學習發現,robotium的那個getCurrentActivity方法也不好用了。超級糾結。
 
開始實驗,getCurrentActivity方法使用範圍。
 
自己寫了一個簡單的程序,這個程序由2個Activity組成。Activity1 使用 Intent方式調用 Activity2 。
Intent先由button的click事件觸發。寫了測試程序,getCurrentActivity方法很好用。沒有問題。
 
繼續改造,還是原來的程序,Activity1 使用 Intent方式調用 Activity2,Intent由oncreat方法直接調用。
修改了測試程序。發現,我靠,鬱悶了,報錯了,得不到Activity2。
 
 
繼續學習,把原來的被測試程序修改一下。Activity1 Intent Activity2 ,Activity2 Intent Activity3 觸發的方式都是使用button的click事件。修改了測試程序。運行。沒有問題。
 
最後確認。再次修改被測試程序。Activity1 Intent Activity2 ,Activity2 Intent Activity3。Activity1-》Activity2 使用的是button的click事件觸發,Activity2-》Activity3 直接在oncreat方法調用。修改了測試程序,getCurrentActivity能找到Activity3。
 
自己重寫的getCurrentActivity方法和robotium裏面的getCurrentActivity方法表現是一樣的。因爲基本上就是抄了人家的方法。
 
總結一下,如果程序剛啓動的首個Activity自動Intent另外一個Activity來顯示,這個地方不要使用getCurrentActivity方法,想別的辦法直接找控件,在robotium裏面除了用id找控件的方法,別的方法基本都是延時等待。就這樣吧,android在線程方面感覺比較混亂,這個自動化測試做起來比較頭大。getCurrentActivity這個方法一定要慎用。不過,這個很可能是android本身的一個bug。就像android在2。2以前的版本,不支持北側程序不能有C++原生庫一樣。

robotium初探(三)

在qa.taobao上面看到高手評論robotium的不足,於是記下來實踐了一下。

1  無法捕獲Toast。

2  robotium無法操作webview控件。

 

大概研究了一下。

 

1  無法捕獲Toast,這個有點不明白。大概實驗了一下,可以使用waitForText這個函數來捕獲文字,這個方法返回值是布爾型的,所以返回true就是找到了。

這個方法要注意:(1)找的內容最好別處沒有,別到時候別處也有相關的內容就有點悲催了。

                            (2)這個方法用的是延時等待,所以如果找不到的話,需要超時來處理,程序定義      的超時時間爲20s,這個有點慢了。所以不太好。

 

2 無法操作webview的問題。大概看了一下robotium是不可以操作webview。但是在開發文檔中找到了webview可以通過javascript來互動。互動這個很重要,大概的想法就是利用Javascript來實現操作webview。因爲webview裏面的結構應該是dom的結構,YUI裏面提供了模擬用戶操作的相關內容。

這個有時間在研究吧。

 

順便說一句,手機方面的自動化測試真變態。android上面還好一些,IOS的那個更變態。IOS那個以後再說吧。

 

robotium就這樣吧,大概能用了。如果遇到問題到時候在研究吧。大概用起來還是很方便的,而且robotium考慮的比較全面,反正比我考慮的全面多了,拿來主義吧。

 

 

之後的工作應該主要考慮一下,利用robotium測試android應用的程序架構。

 

1  控件識別方法,包括考慮程序修改和功能變化等;

2  測試方法封裝,儘可能的減少重複並且在最後一層表現爲標準的ATDD的方式

3  測試結果展現,從現在查到的資料沒有看到直接從手機上看測試結果,這個很不方便。日誌(不管是logcat還是自己寫文件)個人覺得也不方便。需要自己寫一個方法直接捕獲測試結果並且展現。手機測試當然要出去測試了,出去測試的時候還要連着電腦有點搞笑有點丟人。

另外:

android是可以裝個terminal和bash的,而且可以支持python

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章