摘要:開始的開始最近在做上的自動化測試,從最初的第三方自動化測試框架到后來的,再到最終完成答疑君客戶端一些核心流程的自動化測試,期間也是經(jīng)歷了各種大大小小的坑。
開始的開始
最近在做Android上的自動化測試,從最初的第三方自動化測試框架appium到后來的Android Support Testing Library,再到最終完成答疑君Android客戶端一些核心流程的自動化測試,期間也是經(jīng)歷了各種大大小小的坑。這個系列的文章也是想通過描述整個探索道路來記錄一下整個Android自動化測試的入門過程,同時也采用了我自己所喜歡的step by step的模式來介紹整個流程,以便大家可以很快地操作起來。
但是,在開始的開始,我認(rèn)為每一種語言或者特性可能在不同的環(huán)境中都有不同的實現(xiàn)方式,所以有必要在此貼上我的一些開發(fā)環(huán)境以作參考:
IDE: Android Studio
Android SDK: API Level 23
gradle version: 2.8
build tool version: 23.0.2
測試環(huán)境:真機(jī)(Nexus 6 with Android 6.0.1; MIUI phones若干)
曾經(jīng)和gemini聊到機(jī)器人統(tǒng)治地球的問題(這好像是異教徒們的愿景orz...),后來想了想自動化測試這個東西其實也是,讓機(jī)器去模仿人的行為,讓它自己去統(tǒng)治整個測試工作。既然是去模仿人的行為,那實際上也應(yīng)該認(rèn)為機(jī)器只能理解人所能理解的東西。比方說,當(dāng)我去人為地做一些測試的時候,我所期待的只是UI上的變化可以符合我的預(yù)期,至于它背后的數(shù)據(jù)是怎樣的實際上我并不care。因此,在做自動化測試時我個人有個最基本的思路:
把自己當(dāng)成用戶,只關(guān)注我能看到的東西。Start from Gradle
好了!終于可以開始了!既然是采用Gradle進(jìn)行Android工程的構(gòu)建,那自然是少不了Gradle的配置啦!根據(jù)Gradle官方文檔的說明,我們首先需要在我們工程的build.gradle中添加如下配置:
android { defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } }
這里實際上只做了一件事情,就是為我們的工程指定一個TestInstrumentationRunner,TestInstrumentationRunner是用來跑我們所寫的所有的測試用例的。當(dāng)我們采用test的模式來構(gòu)建工程時,這個Runner便會自動為我們執(zhí)行所有的的測試用例,并且返回相應(yīng)的測試結(jié)果。
另外,我們還需要在build.gradle中增加instrumentation testing所需要的依賴:
dependencies { androidTestCompile "com.android.support:support-annotations:23.1.1" androidTestCompile "com.android.support.test:runner:0.4.1" androidTestCompile "com.android.support.test:rules:0.4.1" }Where am I?
好了!我們現(xiàn)在有工具來跑測試了,接下來只要添加我們的測試用例了!于是問題來了,我們應(yīng)該在哪里添加測試用例呢?
如果你在Android Studio中新建一個工程,會發(fā)現(xiàn)在src目錄下,和main平行的還有一個androidTest目錄。一般而言,我們將工程代碼放在src/main/java目錄下,將與之相關(guān)的測試代碼放在src/androidTest/java目錄下。如下所示:
src/ androidTest/java ----這里存放instrumentation test相關(guān)的代碼 main/java ----這里存放工程代碼
同時,為了讓工程更容易維護(hù),建議將相應(yīng)Class的測試代碼放到相同名稱的包下面,比如,在Package-name下面有一個Class A:
src/main/java/package-name/A.java
那么,建議將A的測試類放到androidTest下面對應(yīng)的路徑下:
src/androidTest/java/package-name/ATest.java可以Say Hello了!
好了!我要開始變身了!下面我們要向testing的世界say hello了!
我在package-name/module/main包下面有一個AppStartActivity,作為答疑君的啟動頁。在這個啟動頁上會顯示一段文字,我希望通過自動化測試來確認(rèn)這個文字確實顯示在了屏幕上。
于是,我應(yīng)該在androidTest/package-name/module/main下面創(chuàng)建一個AppStartActivityTest類,鍵入如下代碼:
package im.dayi.app.student.module.main; import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; import android.test.ActivityInstrumentationTestCase2; import android.widget.TextView; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; /** * Test for AppStartActivity * Created by Anchorer on 2016/1/13. */ @RunWith(AndroidJUnit4.class) public class AppStartActivityTest extends ActivityInstrumentationTestCase2{ private AppStartActivity mActivity; private TextView mContentView; public AppStartActivityTest() { // 所有的ActivityInstrumentationTestCase2子類都需要調(diào)用該父類的super(String)構(gòu)造方法 super(AppStartActivity.class); } @Before public void setUp() throws Exception { super.setUp(); // @Before注解表示在執(zhí)行所有的testCase之前要做的事情 injectInstrumentation(InstrumentationRegistry.getInstrumentation()); // getActivity()方法會在開始所有的testCase之前啟動相應(yīng)的Activity mActivity = getActivity(); // findViewById()很熟悉吧?找到我要測試的控件 mContentView = (TextView) mActivity.findViewById(R.id.welcome_content); } @Test public void testPreconditions() { // @Test注解表示一個測試用例方法 assertNotNull("AppStartActivity is null", mActivity); } @Test public void testContentDisplayed() { // 這里就是我們測試的目標(biāo),判斷目標(biāo)控件的text不為空 String content = mContentView.getText().toString(); assertNotNull("AppStartActivity Content is Null", content); } }
相關(guān)代碼的說明請見注釋。
接下來,我要開始跑這個測試用例了。首先,打開Android Studio的Build variants窗口,將Test Artifact設(shè)為Android Instrumentation Tests,然后Synchronize一下工程,會看到androidTest路徑下的背景顏色變成了綠色。
此時,在AppStartActivityTest.java點擊菜單,選擇Run "AppStartActivityTest...",就可以從控制臺看到測試已經(jīng)在跑了:
從控制臺的日志來看,整個測試過程初期,會向測試設(shè)備安裝兩個APK:APP APK和test APK。整個測試結(jié)束之后,會看到測試結(jié)果:
以上測試結(jié)果說明,所有test case全部測試通過。
好了!這就是整個自動化測試的大體流程了!接下來我已經(jīng)迫不及待地想要把Android強(qiáng)大的自動化測試提供的特性分享出來了!!
附錄Android自動化測試-從入門到入門(1) Hello Testing!
Android自動化測試-從入門到入門(2) Testing APIs
Android自動化測試-從入門到入門(3) Espresso入門
Android自動化測試-從入門到入門(4) uiautomatorviewer
Android自動化測試-從入門到入門(5) AdapterView的測試
Android自動化測試-從入門到入門(6) 會玩的Espresso
Android自動化測試-從入門到入門(7) UI Automator
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65387.html
摘要:標(biāo)識一個測試方法。附錄自動化測試從入門到入門自動化測試從入門到入門自動化測試從入門到入門入門自動化測試從入門到入門自動化測試從入門到入門的測試自動化測試從入門到入門會玩的自動化測試從入門到入門 根據(jù)該系列文章的第一篇:Hello Testing,大家已經(jīng)對整個自動化測試運(yùn)行流程有了一個基本的了解,接下來我們該集中精力關(guān)注具體的腳本實現(xiàn)了!在具體實現(xiàn)之前,我們先來了解一下Android提...
摘要:附錄自動化測試從入門到入門自動化測試從入門到入門自動化測試從入門到入門入門自動化測試從入門到入門自動化測試從入門到入門的測試自動化測試從入門到入門會玩的自動化測試從入門到入門 之前的文章中,我們介紹了Android自動化測試的一些背景,以及Espresso的基本應(yīng)用。除了之前介紹過的Espresso的相關(guān)用法,Espresso還提供了一些其他的用法,可以讓我們在不同場景下靈活使用。這篇...
閱讀 806·2021-09-22 16:01
閱讀 2099·2021-08-20 09:37
閱讀 1702·2019-08-30 15:54
閱讀 1700·2019-08-30 15:44
閱讀 847·2019-08-28 18:23
閱讀 3024·2019-08-26 12:17
閱讀 1026·2019-08-26 11:56
閱讀 1548·2019-08-23 16:20