1.Android JUnit Runner(使用AndroidStudio)


一、Android JUnit Runner介紹

1.Android JUnit Runner

1)是一個測試運行器,用於運行Junit3和Junit4的Android測試包
2)替換Instrumentation Test Runner(一個比較舊的測試運行器)
3)支持Instrumentation Test Runner所有特性,但又進行了擴展
4)保持了所有Instrumentation Test Runner的命令格式

2.繼承關系
java.lang.Object

    android.app.Instrumentation

        android.support.test.runner.MonitoringInstrumentation

            android.support.test.runner.AndroidJUnitRunner

二、Instrument測試命令

1.命令格式:
am instrument [-r] [-e <NAME> <VALUE>] [-p <FILE>] [-w]
                     [--user <USER_ID>|CURRENT]
                     [--no-window-animation] [--abi <ABI>] <COMPONENT>

//COMPONENT:包名/運行Runner
  • 運行所有測試用例命令的例子:
adb shell am instrument
-w com.testDemo.test/android.support.test.runner.AndroidJUnitRunner
2.測試命令

參數

說明

-r

打印原始結果(如果不加測試結果信息會很少)
使用[-e perf true]生成原始輸出性能度量

-e

設置參數
為測試運行器常見的形式是:
[-e [,…]]
將profiling數據寫入到文件中
注:需要先建立一個trace文件

-w

等待測試完成(這是一個必需參數)

–user |
current

指定用戶運行,如果不指定則使用當前用戶運行
–no-window-animation 關掉窗口動畫(相當於開場動畫)再運行

–abi

通過所選的ABI啟動進程,選擇支持的CPU架構
可以使用(adb shell getprop

 

 

3.實例(使用Android Studio):

1)在github中搜索android-testing選中googlesamples/android-testing點進去,然后下載.zip壓縮包
2)下載完成后進行解壓,所有的依賴都在android-testing-master\ui\espresso\BasicSampleBundled\libs路徑下
3)file–new–new project(等待工程創建完成)–app–java–[packageName右鍵]–new–java class
注:點開java后會有兩個選項,上面的一個是apk代碼,下面是測試代碼,我們寫測試用例一般都寫在測試代碼包內
4)復制android-testing-master\ui\espresso\BasicSampleBundled\libs目錄下除android-support-v4.jar以外的全部文件到創建的工程的libs文件夾中
5)選中copy進去的所有文件右鍵—add as library—在彈出的提示窗口中選擇app—OK
6)增加完成后可以切換到Android視圖,在Gradle Scripts/build.gradle(Module:app)中進行查看,並且注釋掉第一行*(注釋的那一行表示它會把libs下面所有的jar包編譯進去,因為我們已經手動把它添加進去了所以就不需要了),代碼顯示如下:

dependencies {
    //compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/espresso-contrib-2.2-release-no-dep.jar')
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/espresso-core-2.2-release-no-dep.jar')
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/espresso-idling-resource-2.2-release-no-dep.jar')
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/espresso-intents-2.2-release-no-dep.jar')
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/espresso-web-2.2-release-no-dep.jar')
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/exposed-instrumentation-api-publish-0.3-release-no-dep.jar')
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/guava-18.0.jar')
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/hamcrest-core-1.3.jar')
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/hamcrest-integration-1.3.jar')
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/hamcrest-library-1.3.jar')
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/javawriter-2.1.1.jar')
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/javax.annotation-api-1.2.jar')
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/javax.inject-1.jar')
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/jsr305-2.0.1.jar')
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/junit-4.12.jar')
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/rules-0.3-release-no-dep.jar')
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/runner-0.3-release-no-dep.jar')
    compile files('C:/Users/xuzhonghui/AndroidStudioProjects/RunnerDemo/libs/uiautomator-v18-2.1.1-release-no-dep.jar')
}

 

5)點擊導航欄Run—Edit Configurations…—點擊彈出界面左上角的+號—Android Tests,配置參考下圖


這里寫圖片描述


  • 截圖說明:
    a.name可以自行設置
    b.Target選項請根據實際情況設置,我這邊是拿模擬器進行調試的

6)在Gradle Scripts/build.gradle(Module:app)文件的defalutConfig中增加調試器,增加后的代碼顯示如下:

android { 

    compileSdkVersion 23

    buildToolsVersion "23.0.2" 



    defaultConfig { 

        applicationId "com.example.xuzhonghui.runnerdemo" 

        minSdkVersion 15 

        targetSdkVersion 23 

        versionCode 1 versionName "1.0" 

        //引號中的內容為剛剛創建的運行器 

        testInstrumentationRunner"android.support.test.runner.AndroidJUnitRunner" 

    } 

    buildTypes { 

        release { 

            minifyEnabled false proguardFiles 

            getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 

        } 

    } 

}

 

7)至此,基本的配置完成了,然后在剛剛創建的類中寫測試代碼了,代碼如下:

package com.example.xuzhonghui.runnerdemo;

import android.app.Instrumentation;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import android.support.test.uiautomator.UiDevice;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;


//下面一行一定要的,就是指定哪個運行器運行
@RunWith(AndroidJUnit4.class)
//測試用例
public class RunnerTest {
    //初始化設備
    UiDevice device;

    @Before
    public void setip{
        device=UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
    }
    //用例1
    @Test
    public void  test1(){
        device.pressMenu();
    }
    //用例2
    @Test
    public void  test2(){
        device.pressBack();
    }
    //用例3
    @Test
    public void  test3(){
        device.pressMenu();
    }
    //用例4
    @Test
    public void  test4(){
        device.pressBack();
    }
}

 

 

8)代碼寫好后需要重新配置一下運行器,配置圖如下:

 
這里寫圖片描述


  • 配置說明:
    a.在Test中選中測試類,然后將剛剛寫好測試代碼的那個類添加進去,也就是標紅的位置了
    b.show device chooser Dialog表示彈出一個選擇目標設備的對話框

9)然后運行即可

  • 注意事項:

我第一次按照上述步驟運行的時候就出現了問題,具體原理暫時還沒搞清楚,以后明白了補上,問題和解決方案請參考這里:http://blog.csdn.net/qq_26967883/article/details/50477071的第一條:Excution faild for task ‘:app:transformResourcesWithMergeJavaResForDebug’

4.Instrument命令簡單使用
#列出手機中所有已安裝的包,界面中可以看到剛剛使用Android Studio安裝的包
adb shell pm list instrumentation   

#該命令中不打印詳細日志,-e后面的參數是剛剛Android Studio中創建用例的<packageName>.<className>
adb shell am instrument -w -e class com.example.xuzhonghui.runnerdemo.RunnerTest com.example.xuzhonghui.runnerdemo.test/android.support.test.runner.AndroidJUnitRunner

#跟上一條命令相比,只是多了一個<-r>參數,是讓他輸出詳細的運行日志,相當於eclipes調試uiautomator的時候輸出的日志
adb shell am instrument -w -r -e class com.example.xuzhonghui.runnerdemo.RunnerTest com.example.xuzhonghui.runnerdemo.test/android.support.test.runner.AndroidJUnitRunner

#跟上一條相比多了一個-p+file的參數,目的是為了將運行日志保存到.trace文件中。使用該命令要先在adb shell 模式下在設備中使用命令"touch runner.trace"創建一個自定義名稱的.trace文件
adb shell am instrument -w -r -p /data/local/tmp/runner.trace -e class com.example.xuzhonghui.runnerdemo.RunnerTest com.example.xuzhonghui.runnerdemo.test/android.support.test.runner.AndroidJUnitRunner

三、Android JUnit Runner過濾與例子

1.過濾器

過濾參數

說明

-e testFile 運行文件中指定的用例
-e package 運行這個包中的所有用例
-e size [small|medium|large] 運行注釋Small/MediumTest/largeTest的用例
-e annotation 運行指定注釋的用例
-e notAnnotation 運行不包含指定注釋的用例
-e numShards 將用例分割成不同的切片
-e shardIndex 運行指定切片id的用例

 

2.例子

這里寫圖片描述

 

這里寫圖片描述

 

這里寫圖片描述

 

這里寫圖片描述

3.實例

1)首先修改一下上面使用Android Studio創建的用例代碼,多加幾個測試方法,我這里加了10個,都是按鍵信息,加完后記得先跑一次,把包push到手機中

#列出手機中所有已安裝的包找到com.example.xuzhonghui.runnerdemo.test/android.support.test.runner.AndroidJUnitRunner就是我們使用Android創建並安裝到手機中的包
adb shell pm list instrumentation

#運行全部用例,沒有日志信息
C:\Users\xuzhonghui>adb shell am instrument -w com.example.xuzhonghui.runnerdemo.test/android.support.test.runner.AndroidJUnitRunner

#運行全部用例,有日志信息
C:\Users\xuzhonghui>adb shell am instrument -w -r com.example.xuzhonghui.runnerdemo.test/android.support.test.runner.AndroidJUnitRunner

#運行指定類的用例(指定類=包名.類名)
C:\Users\xuzhonghui>adb shell am instrument -w -r -r class com.example.xuzhonghui.runnerdemo.RunnerTest com.example.xuzhonghui.runnerdemo.test/android.support.test.runner.AndroidJUnitRunner

#運行指定類中的某一條用例(在指定類后面加一個"#用例名")
C:\Users\xuzhonghui>adb shell am instrument -w -r -r class com.example.xuzhonghui.runnerdemo.RunnerTest#test3 com.example.xuzhonghui.runnerdemo.test/android.support.test.runner.AndroidJUnitRunner

#運行多個類的用例,運行前先在之前先在Android Studio中多創建一個類並復制幾條用例進去方便(這里只演示兩個類,多個類同理,加個逗號即可)
C:\Users\xuzhonghui>adb shell am instrument -w -r -r class com.example.xuzhonghui.runnerdemo.RunnerTest,com.example.xuzhonghui.runnerdemo.RunnerTest2 com.example.xuzhonghui.runnerdemo.test/android.support.test.runner.AndroidJUnitRunner

創建一個.txt文檔,文檔內容如下圖,然后使用命令”adb push F:\testFile.txt /data/local/tmp”將文檔push到手機中
這里寫圖片描述

#運行剛剛.txt文件中指定的用例
adb shell am instrument -w -r -e testFile /data/local/tmp/testFile.txt com.example.xuzhonghui.runnerdemo.test/android.support.test.runner.AndroidJUnitRunner

#運行com.example.xuzhonghui.runnerdemo包里的所有用例
adb shell am instrument -w -r -e package com.example.xuzhonghui.runnerdemo com.example.xuzhonghui.runnerdemo.test/android.support.test.runner.AndroidJUnitRunner

修改一下之前在Android Studio中創建的用例,增加幾個注釋,結果如下圖(記得修改完后先在手機上運行一下):
這里寫圖片描述

#運行剛剛注釋為small的用例
adb shell am instrument -w -r -e size small com.example.xuzhonghui.runnerdemo.test/android.support.test.runner.AndroidJUnitRunner

#運行剛剛注釋為medium的用例
adb shell am instrument -w -r -e size medium com.example.xuzhonghui.runnerdemo.test/android.support.test.runner.AndroidJUnitRunner

#運行剛剛注釋為large的用例
adb shell am instrument -w -r -e size large com.example.xuzhonghui.runnerdemo.test/android.support.test.runner.AndroidJUnitRunner

修改AndroidStudio中的用例,上一步中的smallText注釋的Import找到注釋方法的編寫,然后根據這個自己來編寫注釋方法,編寫好的方法如下圖:
這里寫圖片描述

 

這里寫圖片描述


編寫好后,按照上一步的方式將注釋加入到用例中,修改好用例后記得先運行一次

#運行指定自定義注釋SmokeAnnotation的用例(這里需要注意的是annotation后面的跟的是自己編寫的注釋的<包名>.<類名>)
adb shell am instrument -w -r  -e annotation com.example.xuzhonghui.runnerdemo.SmokeAnnotation com.example.xuzhonghui.runnerdemo.test/android.support.test.runner.AndroidJUnitRunner

#運行除指定自定義注釋SmokeAnnotation的所有其他用例
adb shell am instrument -w -r  -e notAnnotation com.example.xuzhonghui.runnerdemo.SmokeAnnotation com.example.xuzhonghui.runnerdemo.test/android.support.test.runner.AndroidJUnitRunner

四、Android JUnit Runner參數

主要是用在白盒測試上的,而不是UiAutomator,有興趣可以深入研究下

參數 說明
-e log true 只在日志模式下運行
這個選項將加載和遍歷所有測試的類和方法,但會繞過實際測試執行。用於快速獲取信息要執行的測試的儀器命令
-e coverage true 生成代碼覆蓋率
這需要一個EMMA的構建。默認情況下,代碼覆蓋率結果文件將被保存在/data//coverage.ec文件,除非有coverageFile標志
-e coverageFile 指定代碼覆蓋率文件保存路徑
-e coverageFile /sdcard/myFile.ec
-e listener 指定一個或多個RunListeners觀察測試運行
-e listener com.foo.Listener,com.foo.Listener2
-e timeout_mse 設置超時時間(單位:毫秒)將被應用到每一個測試
-e timeout_mec 5000
-e disableAnlytics true 禁用谷歌分析

 

  • 參數還可以在AndroidMainfest文件中進行指定

如何使用監聽器:

實際使用過程中,只需在AndroidManifect清單文件中加入上面代碼即可,實際使用參考下圖


這里寫圖片描述

 

  • 參數通過shell命令傳入將覆蓋清單指定參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM