用Robotium對android進行自動化測試的探索
一.簡介
Robotium是一款國外的Android自動化測試框架,主要針對Android平臺的應用進行黑盒自動化測試,它提供了模擬各種手勢操作(點選、長按、滑動等)、查詢和斷言機制的API,能夠對各種控制元件進行操作。Robotium結合Android官方提供的測試框架達到對應用程式進行自動化的測試。另外,Robotium 4.0版本已經支援對WebView的操作。Robotium 對Activity,Dialog,Toast,Menu 都是支援的。
二.相關背景
市面上已經有很多關於Robotium的介紹與教程,大部分都是人工編寫執行動作,對android介面進行點選,並且記錄點選結果或者進行相關判斷,很少有對app進行隨機自動點選的測試指令碼,所以本人決定嘗試編寫對app進行隨機點選的自動化測試。但中途遇見了很多坑,所以寫此部落格將相關內容記錄下來。
三.初始思路
1.對app介面基於位置進行隨機點選,即先獲得手機螢幕大小,隨機生成座標點,利用robotium的api進行點選
2.對app基於控制元件進行隨機點選,即先獲取當前介面所有控制元件,隨機選取控制元件進行點選。
考慮過後決定採用第二種方法,第一種方法開銷太大,並且效率不高
四.實現過程
由於一個app可能由多個activity組成,每個activity又可能有多個可選控制元件,如果遞迴遍歷的話會出現組合爆炸的情況,所以決定隨機選擇控制元件並點選。
Robotium提供了一些獲取控制元件的api,如solo.getCurrentViews(),solo.getCurrentViews(Class<T> classToFilterBy, View parent)
等。
但是這些api可能獲取到的並不是實際的控制元件內容,可能會有一些隱藏的控制元件也會被獲取到,所以就要對獲取到的控制元件進行一些處理,這裡主要用到了控制元件的三個屬性isClickable
isEnable
isFocusable
isClickable為true的控制元件即為可以點選的控制元件,isEnable為true的控制元件即為有效控制元件,isFocusable的控制元件即為可以獲得焦點的控制元件,通過這三個屬性即可判斷這個控制元件是否是我們需要點選的有效的控制元件。
接下來就是要隨機選擇常用的控制元件來進行點選,這裡選擇了Button,ImageButton,EditText,ListView,CheckBox,RadioButton,RadioGroup,ActionMenuView,SeekBar,LinearLayout,TextView,ImageView,RelativeLayout,FrameLayout,CheckedTextView,Spinner這些常用的控制元件。
如果要選擇獲取某一型別的所有控制元件,可以執行以下程式碼List<ImageButton> list1=solo.getCurrentViews(ImageButton.class);
即可獲得當前頁面的所有ImageButton
而List<View> list1=solo.getCurrentViews();
則會獲得當前介面所有的控制元件
這裡對這些控制元件進行點選或者進行一些操作可能會出現另外一個問題Method getText() must be called from UI thread
這是由於我們在測試類中呼叫了改變介面控制元件內容的方法,而這些方法只能在UI執行緒中呼叫,關於android中的UI執行緒和非UI執行緒在這裡不做過多說明,網上有很詳細的解釋。所以我們不能直接對控制元件進行操作,需要採用下面的這種方式來操作控制元件:
<pre>solo.getCurrentActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
editText.setSelection(editText.getText().length(), editText.getText().length());
editText.setText("test");
}
});</pre>
五.應用場景
這種隨機自動化測試一般不會獨立存在,需要結合其他的測試方法或者工具來進行使用,比如結合影象對比等技術,這裡只是粗略的對robotium工具進行了探索與嘗試,並描述了一種隨機自動化測試的方法,以後還將進行更深入的探索。
相關文章
- Flutter應用進行自動化測試Flutter
- Appium自動化(15) - 針對 webview 進行自動化測試APPWebView
- Android使用Espresso進行UI自動化測試AndroidEspressoUI
- 前端自動化測試探索前端
- 用QTP進行GMail郵箱的自動化測試QTAI
- 使用PostMan進行自動化測試Postman
- 使用 PostMan 進行自動化測試Postman
- 測試前奏 之 Robotium使用Eclipse和ADT對apk進行黑盒測試EclipseAPK
- 【自動化測試入門】用Airtest - Selenium對Firefox進行自動化測試(0基礎也能學會)AIFirefox
- 真的要進行介面測試自動化?
- 用python進行應用程式自動化測試(uiautomation)PythonUI
- iOS自動化測試驅動工具探索iOS
- 怎樣開始用selenium進行自動化測試?
- 使用QTP進行非GUI的自動化測試QTGUI
- Junit測試Android自動化測試Android
- 使用 Headless Chrome 進行自動化測試Chrome
- [android]android自動化測試Android
- API自動化測試平臺,高效實現對API的自動化測試API
- 使用 Robot Framework 進行自動化視覺測試Framework視覺
- 大佬對 WEB 自動化測試的看法Web
- 自動化測試系列 —— UI自動化測試UI
- Android 談談自動化測試Android
- Selenium+Java+TestNG進行web自動化測試JavaWeb
- 為 UIAutomation 新增自動化測試標籤的探索UI
- 深圳軟體測試學習:如何在Android手機上進行自動化測試【千鋒】Android
- [android]android自動化測試十三之monkeyRunner自動化框架Android框架
- 自動的自動化:EvoSuite 自動生成JUnit的測試用例UI
- robotframework + appium進行自動化測試時遇到的問題FrameworkAPP
- 利用Jscrīpt進行簡單的GUI自動化測試JSGUI
- Python + requests + unittest + ddt 進行介面自動化測試的框架Python框架
- 測者的測試技術手冊:自動的自動化EvoSuite 自動生成JUnit的測試用例UI
- [android]android自動化測試十四之dumpsys效能測試Android
- Web自動化-Selenium自動化測試-4-編寫測試用例Web
- 自動化裝置測試與自動化測試的區別
- [IOS]IOS如何模擬弱網進行自動化測試iOS
- 手工測試用例與自動化測試用例的區別
- Android 自動化測試之 MonkeyAndroid
- Android自動化測試解決方案Android