Robotium自动化测试框架实用教程(图)
一、簡介
Robotium是一款國外的Android自動化測試框架,主要針對Android平臺的應用進行黑盒自動化測試,它提供了模擬各種手勢操作(點擊、長按、滑動等)、查找和斷言機制的API,能夠對各種控件進行操作。Robotium結合Android官方提供的測試框架達到對應用程序進行自動化的測試。另外,Robotium?4.0版本已經支持對WebView的操作。Robotium?對Activity,Dialog,Toast,Menu?都是支持的。
?
二、相關下載
源碼獲取:http://code.google.com/p/robotium/
源API文檔:http://robotium.googlecode.com/svn/doc/index.html
?robotium5.1下載和最新API文檔:http://pan.baidu.com/s/1bnlO8MF
官方例子記事本:http://pan.baidu.com/s/1qWLVL72
重簽名工具:http://pan.baidu.com/s/1i3H0tKD
?
三、常用語法
1.等待timeout毫秒一個名字為name的Activity啟動: waitForActivity(String name, int timeout) 實例:assertTrue("無法啟動啟動類", solo.waitForActivity ("MainActivity", 30000));2.Robotium將睡眠設置的毫秒數:sleep(int time) 實例:solo.sleep(5000)3.清空EditText的內容:clearEditText(android.widget.EditText editText) 實例:solo.clearEditText((EditText)solo.getView ("edtInsertName"))4.根據按鈕上的文字點擊按鈕:clickOnButton(String text) 實例:solo.clickOnButton("^綠色$");5.根據文字點擊控件:clickOnText(String text) 實例:solo.clickOnText("控件上顯示文字");6.輸入內容:enterText(android.widget.EditText editText, String text) solo.enterText((EditText)solo.getView("edtInsertName"), "說些什么好呢?");7.返回:goBack()8.截屏并保存為設置的名字:takeScreenshot(String name) 默認保存在: /sdcard/Robotium-Screenshots/9.解鎖屏幕:unlockScreen()四、實戰-針對APK進行的測試
?被測試項目為demo1,下面是實戰的具體步驟
1. 配置ANDROID_HOME為android sdk的安卓目錄,例如:D:\android-sdk
2. 在path下添加這兩個:%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;
3. 需要把APK重新簽名,因為robotium要求被測應用和測試代碼要有一致的簽名, 所以我們需要把下載到的apk,通過re-sign.jar來產生debug key的apk,這個重新生成的apk就會跟測試項目簽名一致了
4. 下載完后,需要配置ANDROID_HOME,就是安卓SDK的位置,然后把APK拉到圖標上,就會自動生成一個debug key的apk,如果無法直接單擊re-sign.jar運行,需要切換到放置該jar文件的目錄,cmd執行java -jar re-sign.jar產生新apk的過程中會彈出一個信息框,記得截下圖,因為里面有兩個信息我們等會的代碼中需要用到
5. 安裝產生的apk。然后打開模擬器(模擬器器一定要打開才能安裝成功),然后打開命令行? adb install mitalk_debug.apk(新生成apk的名稱) , 或者雙擊apk文件也可以安裝
安裝成功就可以再模擬器里看到該應用的圖標了
6. 打開Eclipse,點擊File->New一個Android Test Project??TestDemo1,?然后點擊下一步的時候選擇This project(因為我們測試的是APK),然后選擇要在哪個android版本上測試
7. 在該項目下創建一個包,com.example.demo1.test,在該包下創建TestDemo1Apk類,如下
package com.example.demo1.test;import com.robotium.solo.Solo;import android.test.ActivityInstrumentationTestCase2; import android.widget.EditText;@SuppressWarnings("rawtypes") public class TestDemo1Apk extends ActivityInstrumentationTestCase2 {private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.example.demo1.MainActivity";//啟動類private static Class<?> launcherActivityClass;static{try {launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);} catch (ClassNotFoundException e) {throw new RuntimeException(e);}}@SuppressWarnings("unchecked")public TestDemo1Apk() throws ClassNotFoundException {super(launcherActivityClass);}private Solo solo;@Overrideprotected void setUp() throws Exception {solo = new Solo(getInstrumentation(), getActivity());}public void testcase001() throws Exception {//等待 Activity "MainActivity" 啟動assertTrue("無法啟動啟動類", solo.waitForActivity("MainActivity", 30000));solo.sleep(5000);//輸入文字:"131243"solo.enterText((EditText)solo.getView("edtInsertName"), "說些什么好呢?");solo.sleep(2000);//清空輸入框的內容solo.clearEditText((EditText)solo.getView("edtInsertName"));//按下 按鈕 "綠色"solo.clickOnButton("^綠色$");solo.sleep(2000);//按下 按鈕 "黃色"solo.clickOnButton("^黃色$");solo.sleep(2000);//按下 按鈕 "藍色"solo.clickOnButton("^藍色$");solo.sleep(2000);//按下 TextView "看我變變變~~~"solo.clickOnText("^看我變變變~~~$");solo.sleep(5000); }@Overridepublic void tearDown() throws Exception {solo.finishOpenedActivities();}}
8.右鍵該項目,選擇property然后選擇java build path, 選擇 Add JARs,選擇下到的robotium.jar
Add Library,點擊Junit,選擇Junit4
?
9.在跑測試用例之前,還需要修改下AndroidManifest.xml文件的android:targetPackage為被測應用的根的包名
<instrumentationandroid:name="android.test.InstrumentationTestRunner"android:targetPackage="com.example.demo1" />10.最后: run as android junit test,就可以進行測試了
源碼下載:http://pan.baidu.com/s/1ybPUI
?
五、實戰-針對工作目錄下的項目
?被測試項目為demo1,下面是實戰的具體步驟
1.新建一個測試項目名為demo1Test
Eclipse-File-Project-Android Test Project
測試項目名為demo1Test,測試目標項目選擇demo1
?
2.添加必要類庫,robotium和junit
(1)在項目中新建lib目錄,把robotium-solo-5.1.jar和robotium-solo-5.1-javadoc.jar拉進該目錄。
(2)添加junit4
?
3.添加robotium
?
4.創建測試用例
右鍵點擊包-New-JUnit Test Case
最基礎的測試用例框架類
package com.example.demo1.test;import com.example.demo1.MainActivity;//導入目標項目的啟動類 import android.test.ActivityInstrumentationTestCase2; import com.robotium.solo.Solo;public class TestDemo1 extends ActivityInstrumentationTestCase2<MainActivity>{//繼承目標項目的啟動類private Solo solo;//初始化一個solo對象public TestDemo1() {//在構造函數處標明繼承自目標項目的啟動類super(MainActivity.class);}@Overridepublic void setUp() throws Exception {//在測試開始之前會調用這個方法,這里來創建一個Solo對象solo = new Solo(getInstrumentation(), getActivity());}@Overridepublic void tearDown() throws Exception {//一個測試用例結束的時候會調用這個方法solo.finishOpenedActivities();//這個方法將結束掉所有在測試執行過程中打開的activity}}在基礎測試類里面添加相關的測試方法,也就是真正在執行的測試用例
package com.example.demo1.test;import com.example.demo1.MainActivity;//導入目標項目的啟動類 import android.test.ActivityInstrumentationTestCase2; import android.widget.EditText;import com.robotium.solo.Solo;public class TestDemo1 extends ActivityInstrumentationTestCase2<MainActivity>{//繼承目標項目的啟動類private Solo solo;//初始化一個solo對象public TestDemo1() {//在構造函數處標明繼承自目標項目的啟動類super(MainActivity.class);}@Overridepublic void setUp() throws Exception {//在測試開始之前會調用這個方法,這里來創建一個Solo對象solo = new Solo(getInstrumentation(), getActivity());}public void testcase001() throws Exception {//等待 Activity "MainActivity" 啟動assertTrue("無法啟動啟動類", solo.waitForActivity("MainActivity", 30000));solo.sleep(5000);//輸入文字:"131243"solo.enterText((EditText)solo.getView("edtInsertName"), "說些什么好呢?");solo.sleep(2000);//清空輸入框的內容solo.clearEditText((EditText)solo.getView("edtInsertName"));//按下 按鈕 "綠色"solo.clickOnButton("^綠色$");solo.sleep(2000);//按下 按鈕 "黃色"solo.clickOnButton("^黃色$");solo.sleep(2000);//按下 按鈕 "藍色"solo.clickOnButton("^藍色$");solo.sleep(2000);//按下 TextView "看我變變變~~~"solo.clickOnText("^看我變變變~~~$");solo.sleep(5000); }@Overridepublic void tearDown() throws Exception {//一個測試用例結束的時候會調用這個方法solo.finishOpenedActivities();//這個方法將結束掉所有在測試執行過程中打開的activity}}源碼共享:http://pan.baidu.com/s/1mgKcgju
?
六、一些特殊設置的說明
1.添加到庫內需要先新建Lib目錄,再把robotium-solo-5.2.1.jar放到里面,這樣移動項目就不會找不到
2.測試項目的AndroidManifest.xml里面??? <uses-sdk android:minSdkVersion="10" />需要在8以上,而且要跟被測試的項目一樣大
3.需要勾選
?
4.最細節的就是:構造方法必須是無參數的,新建的測試用例一般都是有參數的:
public TestHelloWorldCase() {
super(HerlloActivity.class);
}
?
5.測試APK的時候需要重簽名,然后再安裝進去,才可以正常測試
?
6.如何配置Robotium的幫助提示
右鍵點擊項目-Build Path-configure?Build Path
?
?
7.robotium不同版本的方法不同
robotium的getCurrentListViews
1.版本3.6版本和4.1以上版本的表達方式
3.6版本:ArrayList<ListView> lw = solo.getCurrentListViews();
4.1版本以上:ArrayList<ListView> lw = solo.getCurrentViews(ListView.class);
還有如:
ArrayList<ImageView> imageList=solo.getCurrentViews(ImageView.class);得到的即是ImageView
ArrayList<ImageView> imageList=solo.getCurrentViews(ImageView.class,parentView);
?
8.如何獲取控件ID-兩種方法
(1)Android 實用工具Hierarchy Viewer實戰
- 是隨AndroidSDK發布的工具,位置在tools文件夾下,名為hierarchyviewer.bat
- 需要運行測試項目,在調試環境下才可以檢測到模擬器的
(2)運行命令行記錄log,然后點擊對應Activity,接著可以在logcat看到
轉載于:https://www.cnblogs.com/ITGirl00/p/4337541.html
總結
以上是生活随笔為你收集整理的Robotium自动化测试框架实用教程(图)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在ubuntu下安装合适的翻译词典
- 下一篇: [转]12种JavaScript MVC