摘要:標(biāo)識一個(gè)測試方法。附錄自動(dòng)化測試從入門到入門自動(dòng)化測試從入門到入門自動(dòng)化測試從入門到入門入門自動(dòng)化測試從入門到入門自動(dòng)化測試從入門到入門的測試自動(dòng)化測試從入門到入門會玩的自動(dòng)化測試從入門到入門
根據(jù)該系列文章的第一篇:Hello Testing,大家已經(jīng)對整個(gè)自動(dòng)化測試運(yùn)行流程有了一個(gè)基本的了解,接下來我們該集中精力關(guān)注具體的腳本實(shí)現(xiàn)了!在具體實(shí)現(xiàn)之前,我們先來了解一下Android提供的對于自動(dòng)化測試的一些支持。
AndroidJUnitRunner根據(jù)Android官網(wǎng)的說法,
The AndroidJUnitRunner class is a JUnit test runner that lets you run JUnit 3 or JUnit 4-style test classes on Android devices, including those using the Espresso and UI Automator testing frameworks. The test runner handles loading your test package and the app under test to a device, running your tests, and reporting test results. This class replaces the InstrumentationTestRunner class, which only supports JUnit 3 tests.
AndroidJUnitRunner是一個(gè)可以用來運(yùn)行JUnit 3和JUnit 4樣式的測試類的Test Runner,并且同時(shí)支持Espresso和UI Automator。這是對于之前的InstrumentationTestRunner的一個(gè)升級,如果你去查看Gradle文檔中對于Testing配置的說明,會發(fā)現(xiàn)推薦的Test Runner為InstrumentationTestRunner。InstrumentationTestRunner只支持JUnit 3樣式的測試用例,而我們在寫Android測試用例時(shí)應(yīng)該盡可能使用JUnit 4樣式來實(shí)現(xiàn)。
相對于Junit 3, JUnit 4有如下改進(jìn):
測試類不需要再繼承junit.framework.TestCase類;
測試方法名不再需要以test開頭;
可以使用類似@Test, @Before, @After等注解來管理自己的測試方法;
增加了一些Assert方法;
支持對assert方法的static導(dǎo)入。
下面來看一個(gè)例子。如下的代碼段采用了JUnit 4風(fēng)格進(jìn)行編寫,并且調(diào)用了Espresso的API來進(jìn)行了一些測試:
@RunWith(AndroidJUnit4.class) @LargeTest public class MainActivityInstrumentationTest { @Rule public ActivityTestRule mActivityRule = new ActivityTestRule<>( MainActivity.class); @Test public void sayHello(){ onView(withText("Say hello!")).perform(click()); onView(withId(R.id.textView)).check(matches(withText("Hello, World!"))); } }
從以上代碼可以看到,JUnit 4支持使用如下注解來管理整個(gè)測試用例:
@Before: 標(biāo)識在運(yùn)行測試方法之前運(yùn)行的代碼??梢灾С滞粋€(gè)Class中有多個(gè)@Before,但是這些方法的執(zhí)行順序是隨機(jī)的。該注解替代了JUnit 3中的setUp()方法。
@After: 標(biāo)識在運(yùn)行測試方法結(jié)束之后運(yùn)行的代碼??梢栽谄渲凶鲆恍┽尫刨Y源的操作。該注解替代了JUnit 3中的tearDown()方法。
@Test: 標(biāo)識一個(gè)測試方法。一個(gè)測試類中可以有多個(gè)測試方法,每個(gè)測試方法需要用一個(gè)@Test注解來標(biāo)識。
@Rule: 簡單來說,是為各個(gè)測試方法提供一些支持。具體來說,比如我需要測試一個(gè)Activity,那么我可以在@Rule注解下面采用一個(gè)ActivityTestRule,該類提供了對相應(yīng)Activity的功能測試的支持。該類可以在@Before和@Test標(biāo)識的方法執(zhí)行之前確保將Activity運(yùn)行起來,并且在所有@Test和@After方法執(zhí)行結(jié)束之后將Activity殺死。在整個(gè)測試期間,每個(gè)測試方法都可以直接對相應(yīng)Activity進(jìn)行修改和訪問。
@BeforeClass: 為測試類標(biāo)識一個(gè)static方法,在測試之前只執(zhí)行一次。
@AfterClass: 為測試類標(biāo)識一個(gè)static方法,在所有測試方法結(jié)束之后只執(zhí)行一次。
@Test(timeout=
根據(jù)官方的說法,
Android instrumentation is a set of control methods or hooks in the Android system. These hooks control an Android component independently of its normal lifecycle. They also control how Android loads applications.
Android Instrumentation提供了一些方法,可以用來獨(dú)立地控制某個(gè)組件的生命周期。
一般來說,Android中組件的生命周期是由系統(tǒng)來控制的。比如,我們啟動(dòng)了一個(gè)Activity,那么Activity的生命周期方法會自動(dòng)為我們調(diào)用,Android APIs并沒有提供入口讓我們直接去調(diào)用這些生命周期方法,但是使用Instrumentation就可以做到。
Instrumentation可以將要測試的APP以及其對應(yīng)的test Package加載到同一個(gè)進(jìn)程中。由于我們所要測試的組件和其測試用例都運(yùn)行在同一進(jìn)程,因此我們就可以在我們的測試用例中直接調(diào)用組件的方法,對組件做一系列訪問和修改。
Android Testing Support Library APIsAndroid為自動(dòng)化測試提供了如下的API供我們使用:
AndroidJUnitRunner: 以上已經(jīng)提到;
Espresso: 提供了UI測試的API;
UI Automator: 提供了跨APP UI測試的API。
Espresso和UI Automator會在接下來的文章中詳細(xì)說明。
Assertion在做測試的過程中,我們應(yīng)該如何檢查實(shí)際的結(jié)果符合我們的預(yù)期呢?
這里就要用到了Assertion Classes。Assertion Classes提供了一系列assert方法用來比對我們檢測的數(shù)據(jù)和期望的數(shù)據(jù)是否一致,如果檢測失敗,則會拋出一個(gè)AssertionException異常。
比方說在上一篇文章中貼出來的AppStartActivityTest代碼中,有這么一行:
assertNotNull("AppStartActivity Content is Null", content);
這一行代碼就是檢查content的內(nèi)容不為空。其中第一個(gè)參數(shù)指定了一個(gè)提示文案,第二個(gè)參數(shù)指定了需要測試的字符串。
為了簡化我們的測試代碼,在之后的測試中,我們還會使用到一個(gè)叫做Hamcrest的類庫,用來簡化我們的Assertion過程。這些都將會在接下來的文章中一一介紹。
附錄Android自動(dòng)化測試-從入門到入門(1) Hello Testing!
Android自動(dòng)化測試-從入門到入門(2) Testing APIs
Android自動(dòng)化測試-從入門到入門(3) Espresso入門
Android自動(dòng)化測試-從入門到入門(4) uiautomatorviewer
Android自動(dòng)化測試-從入門到入門(5) AdapterView的測試
Android自動(dòng)化測試-從入門到入門(6) 會玩的Espresso
Android自動(dòng)化測試-從入門到入門(7) UI Automator
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/65384.html
摘要:附錄自動(dòng)化測試從入門到入門自動(dòng)化測試從入門到入門自動(dòng)化測試從入門到入門入門自動(dòng)化測試從入門到入門自動(dòng)化測試從入門到入門的測試自動(dòng)化測試從入門到入門會玩的自動(dòng)化測試從入門到入門 根據(jù)該系列之前的兩篇文章:Hello Testing和Testing APIs,我們已經(jīng)對Android自動(dòng)化測試的整體背景有了一些了解。還記得第一篇文章里我提到過的基本思路么? 把自己當(dāng)成用戶,只關(guān)注我能看到的...
摘要:開始的開始最近在做上的自動(dòng)化測試,從最初的第三方自動(dòng)化測試框架到后來的,再到最終完成答疑君客戶端一些核心流程的自動(dòng)化測試,期間也是經(jīng)歷了各種大大小小的坑。 開始的開始 最近在做Android上的自動(dòng)化測試,從最初的第三方自動(dòng)化測試框架appium到后來的Android Support Testing Library,再到最終完成答疑君Android客戶端一些核心流程的自動(dòng)化測試,期間也...
閱讀 3965·2021-10-08 10:05
閱讀 3034·2021-09-27 13:57
閱讀 2748·2019-08-29 11:32
閱讀 1073·2019-08-28 18:18
閱讀 1369·2019-08-28 18:05
閱讀 2042·2019-08-26 13:39
閱讀 932·2019-08-26 11:37
閱讀 2131·2019-08-26 10:37