天天看點

Robotium測試系統APK

   學習了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運作。

繼續閱讀