自動化測試Robotium實戰(zhàn)學(xué)習(xí)

從什么是自動化測試開始

自動化測試就是通過一定的編程手段,自動執(zhí)行本來需要手動執(zhí)行的一系列測試的活動。

自動化測試和手動測試的對比:

  1. 執(zhí)行速度快
  2. 可靠性高
  3. 復(fù)用性高
  4. 節(jié)省人力資源成本

移動端自動化測試工具的選擇

  1. Appium:可以用來測試native、hybird和mobile web APP,最突出的一點是它既支持Android的自動化測試,也支持IOS的測試;另一方面是它支持使用不同的編程語言編寫測試代碼。缺點:穩(wěn)定性有待提高。點此進官網(wǎng)
  2. Uiautomator:其是Google官方提供的一款自動化測試框架,主要特點是支持跨進程操作(這一點極大的方便了對應(yīng)用外控件的操作)。缺點:只支持Android Platform、API16及以上,調(diào)試編譯運行比較麻煩。具體可在官網(wǎng)查看
  3. Robotium:支持native和hybird的自動化測試,API使用起來方便簡單,執(zhí)行速度快,可根據(jù)控件ID操作;另外它既可以基于源碼操作,也能基于APK測試,功能強大。缺點:不支持跨進程的操作;針對APK操作,而且需要對APK重新簽名(有工具:re-sign),因此操作相對復(fù)雜。點此進官網(wǎng)
  4. 其他的自動化測試框架:monkey,monkeyrunner,Testdroid(商業(yè))和Eggplant(商業(yè))等。

Robotium版“Hello World”

基于源碼自動化測試

  1. 搭建實戰(zhàn)測試項目:在eclipse中依次選擇File->New->Other->Android Test Project,一路點擊next,添加Robotium.jar 5.6.3,在添加jar文件時應(yīng)在java build path中查看,不然在初始化solo時容易碰到NullPointerException錯誤。
  2. 新建第一個測試用例:新建Java類,繼承ActivityInstrumentationTestCase2< >.
//泛型寫入需要測試的工程的入口activity名-LoginActivity
public class TestCase1 extends ActivityInstrumentationTestCase2<LoginActivity> {
    private Solo solo;
    public TestCase1(){
        //LoginActivity是指啟動的activity名稱
        super(LoginActivity.class);
    }
    //實現(xiàn)測試前的初始化工作,JUnit框架下的方法
    @Override
    protected void setUp() throws Exception {
        // TODO Auto-generated method stub
        super.setUp();
        solo=new Solo(getInstrumentation(),getActivity());
    }
    //實現(xiàn)測試完成后的垃圾回收等工作,JUnit框架下的方法
    @Override
    protected void tearDown() throws Exception {
        // TODO Auto-generated method stub
        solo.finishOpenedActivities();
        super.tearDown();
    }
    //測試用例
    public void testTestCase1(){
        //不推薦通過index的方式找到控件,應(yīng)通過ID的方式
        solo.enterText(0, "abcd");
        solo.enterText(1, "1234567");
        solo.clickOnButton(0);
        assertTrue("錯誤提示信息沒有出現(xiàn),可能出現(xiàn)bug",solo.searchText("用戶名或者密碼錯誤",true));
    }
}

小結(jié):在setUp()中實現(xiàn)一些前置動作,在tearDown()做一些恢復(fù)初始狀態(tài)的動作,然后在test方法實現(xiàn)測試動作。

  1. 運行Robotium例子:在測試類中單擊鼠標(biāo)右鍵,選擇Run As->Android JUnit Test.

基于APK的自動化測試

APK重簽名:在基于APK的自動化測試過程中,需要確保被測試的APK必須與測試項目具有相同的簽名。利用工具re-sign.jar,用法可自行Google。(re-sign重簽名找的debug.keystore是位于C://User/.android下的,而eclipse的debug.keystore要與re-sign的一致

  1. 搭建項目和新建測試用例與上述一樣
//該注解的作用是給編譯器一條指令,告訴它對被注解的代碼內(nèi)部的某些警告保持靜默
@SuppressWarnings("rawtypes")
public class FirstQunarTest extends ActivityInstrumentationTestCase2{
    private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME="com.Qunar.NoteActivity";
    private static Class<?> launcherActivityClass;
    /*static代碼塊(靜態(tài)代碼塊):在類中獨立于類成員的static語句塊,可隨便存放
    它不在任何的方法體中,JVM加載類時會按照它們在類中出現(xiàn)的先后順序依次執(zhí)行它們,
    并且只會執(zhí)行一次*/  
    static{
        try {
            launcherActivityClass=Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    @SuppressWarnings("unchecked")
    public FirstQunarTest(){
        super(launcherActivityClass);
    }
    private Solo solo;
    @Override
    protected void setUp() throws Exception {
        // TODO Auto-generated method stub
        solo=new Solo(getInstrumentation(),getActivity());
    }
    //測試用例:黑盒測試方式——無被測項目的源代碼(基于APK)
    //robotium通過反射的方法來調(diào)用被測應(yīng)用程序的代碼(具體原理??)
    public void testCanOpenSettings(){
        if(solo.searchText("軟件更新")){
            solo.clickOnView(solo.getView("button3"));
        }
        solo.pressMenuItem(0);
    }
    @Override
    protected void tearDown() throws Exception {
        // TODO Auto-generated method stub
        solo.finishOpenedActivities();
        super.tearDown();
    }
}
  1. 運行Robotium例子:在測試類中單擊鼠標(biāo)右鍵,選擇Run As->Android JUnit Test.

Robotium API簡介

官網(wǎng)(http://recorder.robotium.com/javadoc/)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,551評論 19 139
  • 一、關(guān)于安卓自動化測試 關(guān)于測試自動化金字塔,金字塔底端是最基礎(chǔ)的單元測試,再往上是系統(tǒng)接口測試,再往上就是UI自...
    隋胖胖LoveFat閱讀 5,660評論 1 12
  • Instrumentation介紹 Instrumentation是個什么東西? Instrumentation測...
    打不死的小強qz閱讀 7,957評論 2 39
  • 版權(quán)聲明:本文為小斑馬偉原創(chuàng)文章,轉(zhuǎn)載請注明出處! 上篇簡單的闡述了響應(yīng)式編程的基本理論。這篇主要對響應(yīng)編程進行詳...
    ZebraWei閱讀 3,231評論 0 2
  • 周末啦! 早上拿墊子的時候手一滑,不小心將放在旁邊的鏡子砸了下來。 我愣著的時候, 老公聞聲而來, 說:“老婆,真...
    三水原童閱讀 246評論 0 0

友情鏈接更多精彩內(nèi)容