版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
測(cè)試App2023/9/28152023/9/28AndroidStudio測(cè)試環(huán)境單元測(cè)試目錄CONTENT12自動(dòng)化UI測(cè)試組件測(cè)試34參考教材:《Android應(yīng)用開發(fā)項(xiàng)目化教程》AndroidStudio測(cè)試環(huán)境項(xiàng)目中的測(cè)試新建的Android項(xiàng)目,自動(dòng)生成如下測(cè)試包androidTest是AndroidInstrumentationTests的文件夾運(yùn)行在Android設(shè)備上test是UnitTests的文件夾運(yùn)行在JVM上(不會(huì)訪問Android框架層的API)1AndroidStudio測(cè)試環(huán)境項(xiàng)目中的測(cè)試新建的Android項(xiàng)目,自動(dòng)生成如下測(cè)試包androidTesttest1AndroidStudio測(cè)試環(huán)境項(xiàng)目中的測(cè)試新建的Android項(xiàng)目,自動(dòng)生成如下測(cè)試包1AndroidStudio測(cè)試環(huán)境項(xiàng)目中的測(cè)試app/build.gradletestInstrumentationRunner
把AndroidJUnitRunner設(shè)置成默認(rèn)的testInstrumentationRunnerandroidTestCompile 把Espresso作為UI自動(dòng)化測(cè)試testCompile 把JUnit4作為單元測(cè)試框架1單元測(cè)試本地單元測(cè)試配置測(cè)試環(huán)境目錄module-name/src/test/java依賴2單元測(cè)試本地單元測(cè)試創(chuàng)建本地測(cè)試類JUnit4特點(diǎn)不必繼承junit.framework.TestCase類也不用在測(cè)試方法的前面加上’test’關(guān)鍵字也不用任何junit.framework或junit.extensions包里的類測(cè)試方法必須以@Test注解為開頭2單元測(cè)試本地單元測(cè)試創(chuàng)建本地測(cè)試類2單元測(cè)試本地單元測(cè)試MockAndroid依賴步驟1.在build.gradle文件中引入Mockito庫的依賴。2.在開始定義單元測(cè)試類之前,添加@RunWith(MockitoJUnitRunner.class)的注解。這個(gè)注解告訴Mockito測(cè)試運(yùn)行器,對(duì)該框架的使用是正確的,同時(shí)可以簡(jiǎn)化mock對(duì)象的初始化。3.為了對(duì)有Android依賴的工程創(chuàng)建一個(gè)mock對(duì)象,在字段的定義前面,添加@Mock注解4.為了對(duì)依賴的表現(xiàn)進(jìn)行打樁,可以聲明一個(gè)條件當(dāng)該條件滿足的時(shí)候返回指定的值,通過調(diào)用when()和thenReturn()方法。2單元測(cè)試本地單元測(cè)試MockAndroid依賴2單元測(cè)試本地單元測(cè)試運(yùn)行本地單元測(cè)試步驟1.在工程窗口中,右鍵工程同時(shí)同步工程。2.在工程窗口中,定位到單元測(cè)試類或者方法,然后右鍵它選擇運(yùn)行。運(yùn)行單元測(cè)試目錄下的所有測(cè)試,在目錄上右鍵同時(shí)選擇運(yùn)行測(cè)試。2單元測(cè)試Instrumented單元測(cè)試設(shè)置測(cè)試環(huán)境目錄module-name/src/androidTests/java依賴2單元測(cè)試Instrumented單元測(cè)試創(chuàng)建一個(gè)Instrumented單元測(cè)試類要求instrumented單元測(cè)試類應(yīng)該被寫為一個(gè)JUnit4測(cè)試類。在開始定義測(cè)試類前添加注解:@RunWith(AndroidJUnit4.class)。需要具體聲明AndroidTestingSupportLibrary提供的AndroidJUnitRunner類作為默認(rèn)測(cè)試運(yùn)行器。2單元測(cè)試Instrumented單元測(cè)試創(chuàng)建一個(gè)Instrumented單元測(cè)試類示例2單元測(cè)試Instrumented單元測(cè)試創(chuàng)建一個(gè)測(cè)試套裝特點(diǎn)一個(gè)測(cè)試套裝被包含在一個(gè)測(cè)試包中,和主應(yīng)用的包相似。通常,測(cè)試套裝包的名字一般以.suite擴(kuò)展名結(jié)尾為單元測(cè)試創(chuàng)建測(cè)試套裝時(shí),導(dǎo)入JUnitRunWith和Suite類添加@RunWith(Suite.class)和@Suite.SuitClasses()注解。在@Suite.SuiteClasses()注解中,列出獨(dú)立的測(cè)試類或者測(cè)試套裝作為參數(shù)。2單元測(cè)試Instrumented單元測(cè)試創(chuàng)建一個(gè)測(cè)試套裝示例2單元測(cè)試Instrumented單元測(cè)試運(yùn)行Instrumented單元測(cè)試在工程窗口,定位到instrumented測(cè)試類或者方法,接著右鍵和運(yùn)行它使用Android測(cè)試配置。為了運(yùn)行所有的在instrumented測(cè)試目錄里的測(cè)試,在該目錄上右鍵然后選擇運(yùn)行測(cè)試。2自動(dòng)化UI測(cè)試單個(gè)App的UI測(cè)試EspressoAndroidTestingSupportLibrary提供的Espresso測(cè)試框架,提供了編寫UI測(cè)試的Api,用來模擬和單個(gè)目標(biāo)App的交互。使用Espresso的一個(gè)關(guān)鍵好處是它提供了自動(dòng)的同步測(cè)試動(dòng)作。Espresso可以監(jiān)測(cè)主線程什么時(shí)候是空閑的,所以可以在合適的時(shí)間運(yùn)行測(cè)試命令,來提高測(cè)試的可靠性。Espresso測(cè)試框架基于instrumentationApi并且依靠AndroidJUnitRunner測(cè)試器來工作的。3自動(dòng)化UI測(cè)試單個(gè)App的UI測(cè)試設(shè)置Espresso注意,關(guān)閉一下動(dòng)畫窗口縮放動(dòng)畫過渡縮放動(dòng)畫動(dòng)畫程序時(shí)長(zhǎng)縮放3自動(dòng)化UI測(cè)試單個(gè)App的UI測(cè)試創(chuàng)建一個(gè)Espresso測(cè)試類規(guī)則尋找一個(gè)想測(cè)試的Activity的UI組件,通過調(diào)用onView()方法,或者onData()方法來為AdapterView的控制。模擬和UI組件之間的用戶交互,比如調(diào)用ViewInteraction.perform()或者DataInteraction.perform()方法,同時(shí)將用戶的具體動(dòng)作傳入。為了讓UI組件的多個(gè)操作按照順序執(zhí)行,使用逗號(hào)分隔符在方法參數(shù)里將他們串聯(lián)起來。按需重復(fù)上述動(dòng)作,來模擬用戶和目標(biāo)App的多個(gè)Activity進(jìn)行交互。使用ViewAssertions方法來檢查在進(jìn)行了上述一系列的用戶交互后,UI是否有正確的狀態(tài)或者是表現(xiàn)。3自動(dòng)化UI測(cè)試單個(gè)App的UI測(cè)試創(chuàng)建一個(gè)Espresso測(cè)試類示例3自動(dòng)化UI測(cè)試單個(gè)App的UI測(cè)試創(chuàng)建一個(gè)Espresso測(cè)試類和ActivityTestRule一起使用通過使用ActivityTestRule,測(cè)試框架加載正在測(cè)試中的App的Activity,在每個(gè)被@Test、@Before注解的方法之前,框架負(fù)責(zé)在測(cè)試完成后關(guān)閉這個(gè)Activity和調(diào)用所有被@After注解的方法來運(yùn)行。3自動(dòng)化UI測(cè)試單個(gè)App的UI測(cè)試創(chuàng)建一個(gè)Espresso測(cè)試類和ActivityTestRule一起使用示例3自動(dòng)化UI測(cè)試單個(gè)App的UI測(cè)試創(chuàng)建一個(gè)Espresso測(cè)試類和ActivityInstrumentationTestCase2一起使用在測(cè)試類中注入一個(gè)Instrumentation實(shí)例調(diào)用injectInstrumentation()方法同時(shí)將InstrumentationRegistry.getInstrumentation()的結(jié)果作為參數(shù)傳遞3自動(dòng)化UI測(cè)試單個(gè)App的UI測(cè)試創(chuàng)建一個(gè)Espresso測(cè)試類和ActivityInstrumentationTestCase2一起使用示例3自動(dòng)化UI測(cè)試單個(gè)App的UI測(cè)試創(chuàng)建一個(gè)Espresso測(cè)試類獲取UI組件在Espresso和App交互之前,必須首先具體聲明對(duì)應(yīng)的UI組件或者View。Espresso支持使用Hamcrestmatchers來具體聲明App中的Views和Adapters.調(diào)用onView()方法同時(shí)傳遞一個(gè)view匹配器,他具體聲明了目標(biāo)view。onView()方法返回一個(gè)ViewInteraction對(duì)象,它允許測(cè)試和目標(biāo)View之間的交互。3自動(dòng)化UI測(cè)試單個(gè)App的UI測(cè)試執(zhí)行ActionsViewActions提供的動(dòng)作ViewActions.click():對(duì)一個(gè)View的點(diǎn)擊。ViewActions.typeText():點(diǎn)擊一個(gè)View然后輸入特定的字符串。ViewActions.scrollTo():滾動(dòng)至指定的View。ViewActions.pressKey():執(zhí)行一個(gè)按鍵操作,按照給定的KeyCodeViewActions.clearText():清除目標(biāo)View的Text3自動(dòng)化UI測(cè)試單個(gè)App的UI測(cè)試驗(yàn)證結(jié)果調(diào)用ViewInteraction.check()或者DataInteraction.check()方法來斷言目標(biāo)View的反饋是否和預(yù)期狀態(tài)相匹配。ViewAssertions提供的方法doesNotExist:斷言在當(dāng)前的View層級(jí)中沒有符合標(biāo)準(zhǔn)的View相匹配。matches:斷言指定的View在當(dāng)前View層級(jí)中存在同時(shí)他的狀態(tài)和給定的Hamcrest匹配器相匹配。selectedDescendentsMatch:斷言指定的父View的子View存在,并且他們的狀態(tài)和給定的Hamcrest匹配器相匹配。3自動(dòng)化UI測(cè)試單個(gè)App的UI測(cè)試驗(yàn)證結(jié)果示例3自動(dòng)化UI測(cè)試跨越多個(gè)App進(jìn)行UI測(cè)試設(shè)置UIAutomator添加依賴庫3自動(dòng)化UI測(cè)試跨越多個(gè)App進(jìn)行UI測(cè)試設(shè)置UIAutomatorUiautomatorviewerUiautomatorviewer工具提供了方便的視覺界面來檢查布局層級(jí)和查看UI組件的屬性,他們?cè)谠O(shè)備的前臺(tái)是可見的。借助這些信息可以使用UIAutomator創(chuàng)建更細(xì)膩的測(cè)試。3自動(dòng)化UI測(cè)試跨越多個(gè)App進(jìn)行UI測(cè)試設(shè)置UIAutomator流程加載一個(gè)目標(biāo)APP到物理設(shè)備上。將該設(shè)備連接到開發(fā)機(jī)器上打開一個(gè)終端然后定位到<android-sdk>/tools/目錄下。用命令運(yùn)行該工具
$uiautomatorviewer3自動(dòng)化UI測(cè)試跨越多個(gè)App進(jìn)行UI測(cè)試設(shè)置UIAutomator查看應(yīng)用的UI的特性在uiautomatorviewer界面,點(diǎn)擊設(shè)備截屏按鈕。通過uiautomatorviewrtool懸浮在左面板的快照可以概覽UI組件定義。該組件的特性被列在右面板下方,布局層級(jí)在右面版的上方。選擇性的點(diǎn)擊ToggleNAF節(jié)點(diǎn)按鈕,來查看那些不會(huì)被UIAutomator獲取的UI組件,不過只能獲取這些組件的有限信息。3自動(dòng)化UI測(cè)試跨越多個(gè)App進(jìn)行UI測(cè)試確保Activity可獲得Activity中實(shí)現(xiàn)以下最基本的優(yōu)化來支持UIautomator使用android:contentDescription屬性來給ImageButton、ImageView、CheckBox加標(biāo)簽和其他的用戶界面控制組件。給EditText提供一個(gè)android:hint屬性來代替內(nèi)容描述。將android:hint屬性和任何的圖形icon結(jié)合起來給用戶提供反饋(比如,狀態(tài)信息)使用uiautomatorviewer工具類確保UI組件可以被測(cè)試框架獲取到。也可以測(cè)試應(yīng)用程序通過打開獲取服務(wù)像TalkBack然后通過觸摸來瀏覽,然后嘗試著僅在一個(gè)方向上使用應(yīng)用。3自動(dòng)化UI測(cè)試跨越多個(gè)App進(jìn)行UI測(cè)試創(chuàng)建一個(gè)UIAutomator測(cè)試類規(guī)則獲取UiDevice對(duì)象來訪問想測(cè)試的設(shè)備,通過調(diào)用getInstance()方法然后傳遞一個(gè)Instrumentation對(duì)象參數(shù)進(jìn)入通過調(diào)用findObject()方法,獲取一個(gè)UIObject對(duì)象來訪問在設(shè)備上展示的UI組件。通過調(diào)用UiObject的方法來模擬一個(gè)具體的和UI組件之間的交互。比如,調(diào)用performMultiPointerGesture()來模擬復(fù)雜的觸摸手勢(shì),和setText()來編輯一個(gè)text字段。檢查當(dāng)這些用戶交互執(zhí)行后,UI是否按照期望的狀態(tài)或表現(xiàn)給予了回饋。3自動(dòng)化UI測(cè)試跨越多個(gè)App進(jìn)行UI測(cè)試創(chuàng)建一個(gè)UIAutomator測(cè)試類訪問UI組件UiDevice是最基本的訪問和操作設(shè)備狀態(tài)的方式。在測(cè)試中,可以調(diào)用UiDevice方法來檢查不同的特性,比如當(dāng)前方向或者展示的尺寸。可以使用UiDevice對(duì)象來執(zhí)行設(shè)備級(jí)別的動(dòng)作,比如對(duì)設(shè)備進(jìn)行旋轉(zhuǎn),按壓D-pad硬件按鈕,以及按壓Home和Menu按鈕。最好的做法是從設(shè)備的Home屏開始測(cè)試,在Home屏幕,可以調(diào)用UIAutomatorApi提供的方法來選擇和具體的UI元素進(jìn)行交互。3自動(dòng)化UI測(cè)試跨越多個(gè)App進(jìn)行UI測(cè)試創(chuàng)建一個(gè)UIAutomator測(cè)試類訪問UI組件示例:獲取UiDevice的實(shí)例和模擬按壓Home鍵3自動(dòng)化UI測(cè)試跨越多個(gè)App進(jìn)行UI測(cè)試創(chuàng)建一個(gè)UIAutomator測(cè)試類訪問UI組件示例:創(chuàng)建一個(gè)UiObject實(shí)例3自動(dòng)化UI測(cè)試跨越多個(gè)App進(jìn)行UI測(cè)試創(chuàng)建一個(gè)UIAutomator測(cè)試類聲明一個(gè)selectorUiSelector類:代表了一個(gè)對(duì)當(dāng)前顯示的UI的具體元素的查詢?nèi)绻卸鄠€(gè)匹配元素被找到的話,在布局層級(jí)中第一個(gè)匹配到的元素將被作為一個(gè)UiObject對(duì)象返回。當(dāng)構(gòu)建一個(gè)UiSelector的時(shí)候,可以將多個(gè)屬性串聯(lián)起來,來重新組織一個(gè)查詢。如果沒有找到相匹配的UI元素,將會(huì)拋出一個(gè)UiAutomatorObjectNotFoundException可以將childSelector()方法和UiSelector實(shí)例相互嵌套來使用。3自動(dòng)化UI測(cè)試跨越多個(gè)App進(jìn)行UI測(cè)試創(chuàng)建一個(gè)UIAutomator測(cè)試類聲明一個(gè)selector示例3自動(dòng)化UI測(cè)試跨越多個(gè)App進(jìn)行UI測(cè)試創(chuàng)建一個(gè)UIAutomator測(cè)試類執(zhí)行Actionsclick():點(diǎn)擊UI元素可視區(qū)域的中心dragTo():拖拽這個(gè)對(duì)象至指定的坐標(biāo)setText():在清除完該字段的內(nèi)容后,給該字段設(shè)置內(nèi)容。相反的,clearTextField()方法清除一個(gè)可編輯字段中存在的內(nèi)容。swipeUp():在UiObject對(duì)象上執(zhí)行swipeup動(dòng)作,相似的,swipeDown(),swipeLeft()和swipeRight()方法執(zhí)行相匹配的動(dòng)作。3自動(dòng)化UI測(cè)試跨越多個(gè)App進(jìn)行UI測(cè)試創(chuàng)建一個(gè)UIAutomator測(cè)試類執(zhí)行Actions示例3自動(dòng)化UI測(cè)試跨越多個(gè)App進(jìn)行UI測(cè)試創(chuàng)建一個(gè)UIAutomator測(cè)試類在集合上執(zhí)行操作使用UiCollection類模擬和一個(gè)集合的條目進(jìn)行交互。為了創(chuàng)建一個(gè)UiCollection對(duì)象,具體聲明一個(gè)UiSelector它尋找一個(gè)UI容器或者一個(gè)其它子UI元素的包裝器,比如一個(gè)布局view它包含子UI元素。3自動(dòng)化UI測(cè)試跨越多個(gè)App進(jìn)行UI測(cè)試創(chuàng)建一個(gè)UIAutomator測(cè)試類在集合上執(zhí)行操作示例3自動(dòng)化UI測(cè)試跨越多個(gè)App進(jìn)行UI測(cè)試創(chuàng)建一個(gè)UIAutomator測(cè)試類在可滾動(dòng)的view中執(zhí)行動(dòng)作使用UiScrollable類來模擬水平或者豎直方向上的滾動(dòng)。3自動(dòng)化UI測(cè)試跨越多個(gè)App進(jìn)行UI測(cè)試驗(yàn)證結(jié)果可以使用標(biāo)準(zhǔn)的JUnit斷言方法來測(cè)試App中的UI元素是否返回預(yù)期的結(jié)果3組件測(cè)試Service測(cè)試ServiceTestRuleServiceTestRule類是一個(gè)JUnit4規(guī)則,它在單元測(cè)試方法運(yùn)行之前啟動(dòng)Service,在測(cè)試完成的時(shí)候關(guān)閉Service。通過使用這個(gè)測(cè)試規(guī)則,可以確保在測(cè)試方法運(yùn)行之前Service的連接總是建立的。使用@Rule注解在測(cè)試中來創(chuàng)建ServiceTestRule實(shí)例4組件測(cè)試Service測(cè)試ServiceTestRule示例4組件測(cè)試ContentProvider測(cè)試ProviderTestCase2特點(diǎn)ProviderTestCase2的構(gòu)造方法創(chuàng)建一個(gè)IsolatedContext對(duì)象,他允許文件和數(shù)據(jù)庫的操作,但是斷絕了和Android系統(tǒng)之間其它的交互。文件和數(shù)據(jù)庫的操作他們本身發(fā)生的位置是本地的設(shè)備或者模擬器,并且有一個(gè)特殊的前綴。構(gòu)造方法接著創(chuàng)建一個(gè)MockCotentResolver作為resolve來進(jìn)行測(cè)試。最后,構(gòu)造方法創(chuàng)建一個(gè)Provider的實(shí)例來進(jìn)行測(cè)試。4組件測(cè)試ContentProvider測(cè)試ProviderTestCase2指導(dǎo)方針使用resolver方法來測(cè)試:盡管可以在ProviderTestCase2中實(shí)例化一個(gè)Provider對(duì)象,應(yīng)該經(jīng)常使用合適的URI并借助解析器對(duì)象來進(jìn)行測(cè)試。這樣做來確保測(cè)試Provider通過執(zhí)行相同的交互,一個(gè)普通的應(yīng)用程序?qū)?huì)使用的。4組件測(cè)試ContentProvider測(cè)試Provide
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《翡翠培訓(xùn)資料》課件
- 《證券買賣技巧教案》課件
- 《證券基金銷售培訓(xùn)》課件
- 單位管理制度集粹匯編員工管理篇
- 單位管理制度分享大全【人力資源管理篇】
- 《社區(qū)工作實(shí)務(wù)》課件
- 單位管理制度范例選集【人力資源管理篇】十篇
- 單位管理制度范例合集職工管理十篇
- 單位管理制度呈現(xiàn)合集【人事管理】十篇
- 寒假自習(xí)課 25春初中地理八年級(jí)下冊(cè)人教版教學(xué)課件 第八章 第二節(jié) 干旱的寶地-塔里木盆地 第2課時(shí) 油氣資源的開發(fā)
- 湖南省常德市桃源縣市級(jí)名校2024年中考數(shù)學(xué)模試卷含解析
- 山里的夜(2022年浙江金華中考語文試卷記敘文閱讀題及答案)
- 安全保衛(wèi)工作方案和滅火,應(yīng)急疏散預(yù)案
- DBJ15 31-2016建筑地基基礎(chǔ)設(shè)計(jì)規(guī)范(廣東省標(biāo)準(zhǔn))
- 基于PLC的食品包裝機(jī)控制系統(tǒng)設(shè)計(jì)
- 保密協(xié)議簡(jiǎn)單合同范本
- 機(jī)械設(shè)計(jì)作業(yè)集
- 食品快速檢測(cè)實(shí)驗(yàn)室要求
- 冬季心血管病預(yù)防知識(shí)
- DB36-T 720-2013 汽車加油站防雷裝置檢測(cè)技術(shù)規(guī)范
- 鐵路護(hù)路巡防服務(wù)投標(biāo)方案(技術(shù)方案)
評(píng)論
0/150
提交評(píng)論