學習了Robotium之後,很少使用,幾乎都忘記了。于是想着,寫個文檔記錄一下。
1.下載下傳Robotium最新的JAR包
https://github.com/robotiumtech/robotium
2.由于我是測試系統APK,無源碼,是以跳過“導入被測應用到eclips”這一步驟,直接打開eclips->new Project->Android Test Project->填好項目名稱後->選擇This project(沒有被測代碼,故選擇此項)->finish。
3.右鍵選中我們項目->new->folder->lib,手動拷貝我們1步驟下載下傳的jar包,如robotium-solo-5.2.1.jar到lib檔案夾下,右鍵項目名->build Path->Configure Build Path再導入剛剛複制的robotium-solo-5.2.1.jar包。
4.開始配置我們的AndroidManifest.xml檔案,主要修改instrumentation。
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.android.settings" />
android:name中預設的是android.test.InstrumentationTestRunner,如果你有設定傳參則把此檔案修改成你實際的傳參類,一般為"包名.InstrumentationTestRunner"。
android:targetPackage則是被測APK包名,我這裡主要想測的wifi,于是是系統設定的包名。
檢視包名可以通過sdk\tools下面的hierarchyviewer.bat或者uiautomatorviewer.bat均可以檢視。(連接配接樣機,輕按兩下bat即可)
注:AndroidManifest.xml檔案有兩個地方涉及包名,
其中<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xxx.xxx.xxx.xxx"的包名對應的你自己所編寫的包名,而instrumentation對應的包名是被測應用的。
5.選中包名,開始new一個Junit Test Case,根據自己請款選擇Junit版本,我這裡選擇Junit4,完全之後,在Configure Build Path導入Junit4。
6.開始編寫測試用例:以下是一個直接點選WLAN的簡單例子。
package com.example.wifi.test;
import static org.junit.Assert.*;
import android.test.ActivityInstrumentationTestCase2;
import org.junit.Test;
import com.robotium.solo.Solo;
import android.test.ActivityInstrumentationTestCase2;
@SuppressWarnings("rawtypes")
public class TestWifi extends ActivityInstrumentationTestCase2{
private static final String ACTIVITY_CLASSNAME =
"com.android.settings.Settings";
private Solo solo;
private static Class<?> launcherActivityClass;
static{
try{
launcherActivityClass=Class.forName(ACTIVITY_CLASSNAME);
}
catch (ClassNotFoundException e)
{
throw new RuntimeException(e);
}
}
@SuppressWarnings("unchecked")
public TestWifi() {
super(launcherActivityClass);
// TODO Auto-generated constructor stub
}
@Test
public void test() {
trunOnWifi();
}
private void trunOnWifi() {
// TODO Auto-generated method stub
solo.clickOnText("WLAN");
}
@Override
protected void setUp() throws Exception {
solo = new Solo(getInstrumentation(), getActivity());
}
@Override
public void tearDown() throws Exception {
solo.finishOpenedActivities();
}
}
7.編寫完成後,選中項目->右鍵->Android Tools->Export unsigned Application Package到與系統簽名檔案同一個檔案夾下。
8.例子中所用的是SettingAPK,故使用Android系統的platform簽名。
輸入指令 java -jar signapk.jar platform.x509.pem platform.pk8 xx.apk xx_new.apk來重新簽名,簽系統簽名。
注:
signapk.jar:是/platform/build/tools/signapk/編譯出,在/out/host/linux-x86/framework/中。
platform.pk8 platform.x509.pem:Android采用RSA簽名算法來給應用簽名,其中platform.pk8為私鑰,platform.x509.pem為公鑰。可在/platform/build/target/product/security/目錄下找到。
9.adb install xx_new.apk 後,使用指令adb shell am instrument -w 包名/android.test.InstrumentationTestRunner運作。