在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Android 程序員必須掌握的三種自動化測試方法

lhl545545 ? 來源:電子發(fā)燒友網 ? 2018-02-06 16:05 ? 次閱讀

前言

在日常的開發(fā)中,尤其是app開發(fā),因為不像web端那樣 出錯以后可以熱更新,所以app開發(fā) 一般對軟件質量有更高的要求(你可以想一下 一個發(fā)出去的版本如果有重大缺陷 需要強制更新新客戶端是多么蛋疼的事情)。所以我們app的開發(fā)者一定要學會自己測試自己的代碼,自己測試自己的app,不要寄希望于測試來幫你找bug,絕大多數隱藏極深的bug 都是開發(fā)自己發(fā)現的。

那么如何測試自己的app,測試自己的模塊呢?

1.Monkey

http://developer.android.com/intl/zh-cn/tools/help/monkey.html

這個工具是最簡單的,我主要用他來壓力測試,所謂壓力測試就是 亂點。。。模擬各種各樣奇怪的操作 看你的app能不能抗的住。

可以簡單看一下 這個命令的用法。看一下help 介紹的參數說明。

Android 程序員必須掌握的三種自動化測試方法

舉例來說:

1 android shell monkey -p 你想測試程序的包名 -v 500

比如 我現在想看看android 系統自帶的日歷應用 在壓力下表現如何。

Android 程序員必須掌握的三種自動化測試方法

你看 這個地方模擬器自己就開始瘋狂點擊了。當然在實際使用中,我們都是會把次數調到 幾十萬次到幾百萬次,然后下班以后開始跑,第二天來看結果 看看在哪里出了問題~~。基本上

每日構建完畢以后都會跑一下。Monkey基本上 就是這樣使用的。非常簡單 但是作用也非常有限。不過可以極大幫助你 找出你app的一些隱藏極深的bug。

比如evernote,這個我平常使用的軟件 我自己是沒有碰到過crush的,但是你跑一下monkey,1個多小時 就崩潰了。。。。。所以monkey是提升軟件質量的 好幫手。

2.MonkeyRunner

http://developer.android.com/intl/zh-cn/tools/help/monkeyrunner_concepts.html

這個相對于Monkey 來說 就是真正意義上的 自動化測試工具了。只需要編寫腳本即可完成 我們平時所需要的 大部分 冒煙用例等等。

尤其是在4.x以下的機型里,由于無法使用uiautomator, MonkeyRunner幾乎就是唯一的自動化測試編寫辦法。

下面我舉個例子,比如我們app里最常用的登錄功能,我們就可以編寫一個腳本來完成。

復制代碼

1 # coding=UTF-8

2 from com.android.monkeyrunner import MonkeyRunner as mr

3 from com.android.monkeyrunner import MonkeyDevice as md

4 from com.android.monkeyrunner import MonkeyImage as mi

5 from com.android.monkeyrunner.easy import EasyMonkeyDevice

6 from com.android.monkeyrunner.easy import By

7

8 #定義安裝文件路徑

9 installPackage = ‘C:UsersAdministratorViewPageTestappuildoutputsapkapp-debug.apk’

10

11 #要測試的程序的包名

12 apkPackageName =‘com.example.administrator.viewpagetest’

13

14 #要啟動的第一個activity的名稱

15 initActivityName=apkPackageName+“/com.example.administrator.viewpagetest.MainActivity”

16

17

18 device = mr.waitForConnection()

19

20

21 #安裝apk包

22 device.installPackage(installPackage.decode(‘utf-8’))

23

24

25 #啟動應用程序

26 device.startActivity(component=initActivityName)

27 #防止啟動首頁面 需要時間過長

28 mr.sleep(3)

29

30 easy_device = EasyMonkeyDevice(device)

31

32 mr.sleep(3)

33

34

35

36 easy_device.type(By.id(‘id/username_et’),‘zhangsan’)

37 # 這里的mr靜止 主要用于演示demo上的gif效果

38 mr.sleep(2)

39 easy_device.type(By.id(‘id/password_et’),‘123456’)

40 mr.sleep(2)

41 easy_device.touch(By.id(‘id/submit_bt’),md.DOWN_AND_UP)

然后運行他 看看效果:

你看上面的腳本 完成了 自己安裝apk 輸入用戶名和密碼 并且點擊登錄按鈕的過程。

有人問,你這個模擬登錄的過程是模擬出來了,那我怎么知道 到底登錄成功沒有呢?

其實也很簡單。主要有幾個方法。

1.登錄成功以后你這個頁面肯定是要跳轉到主界面的對吧,你就用腳本執(zhí)行下shell命令 看看主頁面 是否在棧的最上方?(前面我的activity 啟動模式那篇博客里講過這個命令的)

2.你可以在log 里面 打印出登錄成功這個消息 然后用腳本捕捉到這個log 日志 就知道是否登錄成功了。

3.甚至你還可以捕獲界面上某個控件的文字值。

4.比較某個操作結束后的 截屏。保存為圖像以后 和正確操作以后的圖像進行對比。

這里我就不繼續(xù)往下寫這個腳本了。有興趣的同學可以自己嘗試 完成日常工作里的 那些冒煙用例。(意義重大,否則每次發(fā)版本 你的那些用例全部要用手點擊手機完成一遍 那多麻煩!)

此外 我們還可以利用recorder來錄制腳本,然后再反過來用python執(zhí)行這個腳本 來執(zhí)行我們的測試過程。這個方法 我就不做詳細分析了,很簡單。(但是要注意 這個方法 啟動的 捕捉器 在多數情況下都非常卡頓,所以采用率不高。)

3.UiAutomator

http://developer.android.com/intl/zh-cn/tools/testing-support-library/index.html

這個工具我個人認為是所有android 程序員都必須要掌握的,有了這個強大的工具,我們就可以負責任的對自己的代碼 說 木問題,ok!

此工具 能模擬幾乎所有對android設備的操作。

而且代碼也非常簡單 全部都是java代碼,并且android的api 他還幾乎都能夠使用。簡直酷到沒有朋友!比android studio 自帶的ApplicationTestCase 強到不知道哪里去了。

在這之前 你需要對gradle腳本有少許了解。具體可參見我的blog http://www.cnblogs.com/punkisnotdead/p/5029125.html

這個工具的原理實際上和http://www.cnblogs.com/punkisnotdead/p/4885572.html 里面提到的輔助服務是差不多的。都是利用的那個service。

你只要會寫UiAutomator testcase,就意味著你的代碼 幾乎是永遠不會出錯噠~~

好,下面給出一個基本的例子 來讓你明白 為何這個工具這么吊。

首先 給出gradle里的改動:

apply plugin: ‘com.android.application’

2

3 android {

4 compileSdkVersion 23

5 buildToolsVersion “23.0.2”

6

7 defaultConfig {

8 //不要遺漏這句話

9 testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner”

10 applicationId “com.example.administrator.testcaseone”

11 minSdkVersion 18

12 targetSdkVersion 23

13 versionCode 1

14 versionName “1.0”

15 }

16 buildTypes {

17 release {

18 minifyEnabled false

19 proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’

20 }

21 }

22 }

23

24 dependencies {

25 compile fileTree(dir: ‘libs’, include: [‘*.jar’])

26 testCompile ‘junit:junit:4.12’

27 //這個地方要注意了 studio自帶的里面版本號一般都比較高,如果出錯的話 你要手動把這個版本號調低一點

28 compile ‘com.android.support:appcompat-v7:23.0.1’

29 compile ‘com.android.support:design:23.0.1’

30 //對這個androidTestCompile不理解的 可以參考我的博客里講gradle的那篇

31 androidTestCompile ‘com.android.support.test:runner:0.4’

32 androidTestCompile ‘com.android.support.test:rules:0.4’

33 androidTestCompile ‘com.android.support.test.uiautomator:uiautomator-v18:2.1.2’

34 }

復制代碼

然后變更一個conifg

Android 程序員必須掌握的三種自動化測試方法

然后我們就可以在studio里面直接run我們的testcase啦:

Android 程序員必須掌握的三種自動化測試方法

好,然后我們來假設一個場景,假設我們現在要做的功能是 有一個界面,界面上有2個輸入框,你在這2個輸入框里輸入數字以后,點擊計算按鈕

另外一個textview 就會顯示出來 2個數字相加的結果。 那我們的testcase就要來完成 用戶模擬操作的這個過程 并且看看結果是否和我們預想中的相匹配!

(假設我們現在的android代碼里這個計算的代碼是有錯誤的)

1 textView.setText(Integer.parseInt(et1.getText().toString()) + Integer.parseInt(et2.getText().toString()) + 1 + “”);

你看 這里 我故意加了一個1.

然后寫我們的testcase 注意testcase的位置

Android 程序員必須掌握的三種自動化測試方法

然后看一下這個testcase的代碼:

package com.example.administrator.testcaseone;

2

3 import android.support.test.uiautomator.UiAutomatorInstrumentationTestRunner;

4 import android.support.test.uiautomator.UiAutomatorTestCase;

5 import android.support.test.uiautomator.UiDevice;

6 import android.support.test.uiautomator.UiObject;

7 import android.support.test.uiautomator.UiObjectNotFoundException;

8 import android.support.test.uiautomator.UiScrollable;

9 import android.support.test.uiautomator.UiSelector;

10

11 /**

12 * Created by Administrator on 2016/1/5.

13 */

14 public class FirstUiautomatorTest extends UiAutomatorTestCase {

15

16 public void testDemo() throws UiObjectNotFoundException {

17

18 UiDevice.getInstance(getInstrumentation());

19 //19-27 行 其實就是用這個框架提供的功能來直接啟動你的app.

20 //這里其實主要就是要找到你的app那個textview 然后點擊他 具體api自己去慢慢看吧

21 getUiDevice().pressHome();

22 UiScrollable appViews = new UiScrollable(new UiSelector()

23 .scrollable(true));

24 UiObject myApp = appViews.getChildByText(new UiSelector()

25 .className(“android.widget.TextView”), “TestCaseOne”);

26 //要等到新的窗口出來才繼續(xù)往下走

27 myApp.clickAndWaitForNewWindow();

28 //29-32行 就很簡單了,無非就是找到界面上的元素。

29 UiObject et1 = new UiObject(new UiSelector().resourceId(“com.example.administrator.testcaseone:id/et”));

30 UiObject et2 = new UiObject(new UiSelector().resourceId(“com.example.administrator.testcaseone:id/et2”));

31 UiObject bt1 = new UiObject(new UiSelector().resourceId(“com.example.administrator.testcaseone:id/bt1”));

32 UiObject tv1 = new UiObject(new UiSelector().resourceId(“com.example.administrator.testcaseone:id/tv1”));

33 //這里的sleep只是為了gif動畫能顯示的更清楚罷了,一般我們自己寫的時候為了用例速度快一點 是不會加sleep的

34 //某些特殊場景除外

35 et1.setText(“12”);

36 sleep(3000);

37 et2.setText(“21”);

38 sleep(3000);

39 bt1.click();

40 //12和21相加 明顯應該是33,所以判斷下 我們的代碼是否正確

41 assertEquals(33, Integer.parseInt(tv1.getText().toString()));

42

43 }

44 }

然后直接run我們的這個defaluttest,看看模擬器會發(fā)生什么?

自動都幫你模擬了用戶的操作,這個testcase就跑完了,然后看下我們的studio:

Android 程序員必須掌握的三種自動化測試方法

顯然的也報錯了。并且這個工具能自動捕獲ui錯誤哦~~什么anr 之類的 都不在話下。有了他,我們就能為自己寫的代碼負責了,每次發(fā)版本之前 跑跑我們寫好的testcase

基本上就能保證我們app的絕大多數流程是ok的~~所以這個工具一定要掌握!至于他其他好多api 我就不過多介紹了,留給你們自己去探索吧!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 自動化測試
    +關注

    關注

    0

    文章

    215

    瀏覽量

    26966
  • Android
    +關注

    關注

    12

    文章

    3945

    瀏覽量

    127946
收藏 人收藏

    評論

    相關推薦

    通用自動化測試軟件 - TAE

    INTEWORK-TAE(Test Automation Executor) 是一款通用的測試用例自動化執(zhí)行框架,用于汽車電子自動化測試,可支持仿真( MIL/SIL/HIL)、故障注
    的頭像 發(fā)表于 01-02 13:42 ?154次閱讀
    通用<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>軟件 - TAE

    串口屏自動化測試

    嚴謹而高效的自動化測試方案顯得尤為重要。以下是對串口屏自動化測試策略的深度解析,旨在通過高質量的測試設計,嚴格控制產品設計質量,推動產業(yè)升級
    的頭像 發(fā)表于 12-27 17:17 ?1190次閱讀

    TMS320C6000程序員指南

    電子發(fā)燒友網站提供《TMS320C6000程序員指南.pdf》資料免費下載
    發(fā)表于 12-24 17:19 ?0次下載
    TMS320C6000<b class='flag-5'>程序員</b>指南

    機械革命發(fā)布CODE AI程序員

    近日,英特爾新質生產力技術生態(tài)大會在成都舉行,機械革命作為重要參展商帶來了多款明星產品引爆全場!其中更是在AI PC軟件生態(tài)產品發(fā)布分論壇上,Intel、智譜、機械革命方聯合發(fā)布了專為程序員設計的CODE AI程序員本,成為本
    的頭像 發(fā)表于 11-30 10:34 ?538次閱讀

    Linux驅動程序程序員指南

    電子發(fā)燒友網站提供《Linux驅動程序程序員指南.pdf》資料免費下載
    發(fā)表于 11-22 15:53 ?0次下載
    Linux驅動<b class='flag-5'>程序</b><b class='flag-5'>程序員</b>指南

    AI編程工具會不會搶程序員飯碗

    AI編程工具可輔助編程,減少手動編碼,提升效率,對程序員有積極影響也有挑戰(zhàn)。程序員需深化技能、拓寬知識應對。長遠看,AI與人類程序員將共生共榮。
    的頭像 發(fā)表于 11-08 10:17 ?226次閱讀

    光纖測試方法有哪三種

    光纖測試是確保光纖通信系統性能和可靠性的重要環(huán)節(jié)。光纖測試方法多樣,主要包括插入損耗測試、回波損耗測試和光纖端面檢查。以下是對這
    的頭像 發(fā)表于 09-24 09:31 ?1189次閱讀

    開關電源自動化測試設備:如何實現自動化測試

    開關電源自動化測試設備是將測試軟件和測試硬件集成在一個電源測試柜中的ate自動測試設備,其
    的頭像 發(fā)表于 08-30 18:19 ?1390次閱讀
    開關電源<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>設備:如何實現<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>?

    OTA自動化測試解決方案——實車級OTA測試系統PAVELINK.OTABOX

    ,并簡單介紹北匯信息的實車級OTA自動化測試解決方案——PAVELINK.OTABOX。實車級OTA自動化系統目前,OTA自動化測試系統的落
    的頭像 發(fā)表于 07-11 08:26 ?729次閱讀
    OTA<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>解決方案——實車級OTA<b class='flag-5'>測試</b>系統PAVELINK.OTABOX

    機械自動化自動化的一

    引言 自動化技術是指利用控制裝置對生產過程進行控制,以實現生產過程的自動化。機械自動化自動化技術的一,它主要涉及到使用機械設備和控制系統
    的頭像 發(fā)表于 07-01 09:32 ?1905次閱讀

    三種Mock測試方案的應用與實踐總結

    在面向對象程序設計中,模擬對象(英語:mock object,也譯作模仿對象)是以可控的方式模擬真實對象行為的假的對象。程序員通常創(chuàng)造模擬對象來測試其他對象的行為,很類似汽車設計者使用碰撞測試
    的頭像 發(fā)表于 04-28 17:50 ?1601次閱讀
    <b class='flag-5'>三種</b>Mock<b class='flag-5'>測試</b>方案的應用與實踐總結

    納米軟件分享:電源管理芯片自動化測試方案

    在納米軟件與江蘇某科技公司合作的電源管理芯片產線測試項目中,需要完成單入單出、單入雙出、單入出、單入四出系列微模塊的14個項目的自動化測試。該公司之前是手動
    的頭像 發(fā)表于 04-23 13:47 ?561次閱讀
    納米軟件分享:電源管理芯片<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>方案

    鴻蒙OS開發(fā)實戰(zhàn):【自動化測試框架】使用指南

    為支撐HarmonyOS操作系統的自動化測試活動開展,我們提供了支持JS/TS語言的單元及UI測試框架,支持開發(fā)者針對應用接口進行單元測試,并且可基于UI操作進行UI
    的頭像 發(fā)表于 04-08 14:49 ?1547次閱讀
    鴻蒙OS開發(fā)實戰(zhàn):【<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>框架】使用指南

    適者生存,程序員最終會流向哪……

    程序員沒有永遠的護城河!!就目前的互聯網大環(huán)境來看,it行業(yè)已經是……
    的頭像 發(fā)表于 03-11 17:11 ?438次閱讀
    適者生存,<b class='flag-5'>程序員</b>最終會流向哪……

    薪資高、青春飯,是不是程序員=青樓?

    花期太短。技術迭代快,年齡大容易失業(yè)。 就這幾年的互聯網環(huán)境而言,不管是前端、Java、Android開發(fā)等等行業(yè)。已經感受到程序員不是太卷就是工作難找,薪資過低。以前高工現在拿著中低程序員薪資
    發(fā)表于 03-06 21:32
    主站蜘蛛池模板: 一级片在线免费看 | 亚洲精品资源 | 婷婷激情综合五月天 | 久久香蕉国产精品一区二区三 | 看全色黄大色大片免费久久 | 二区久久国产乱子伦免费精品 | 国产成人亚洲日本精品 | 日本黄色免费网址 | 一级特黄aaa大片大全 | 天天操天 | 视频精品一区二区三区 | 久久美女精品国产精品亚洲 | 69天堂| 亚洲福利秒拍一区二区 | 在线观看一二三区 | 在线天堂中文字幕 | 啪啪网站视频 | 欧美人成网站免费大全 | 久久手机免费视频 | 77ee成人| 日本黄色免费看 | 亚洲地址一地址二地址三 | 91久久青草精品38国产 | 亚洲第一香蕉视频 | 老色皮| 2021国产精品| 日本特级淫片免费看 | 人人干天天操 | 不卡一区二区在线观看 | 三级在线观看国产 | 国产午夜精品久久理论片小说 | 色天使色护士 在线视频观看 | 呦交小u女国产秘密入口 | 四虎在线成人免费网站 | 欧美性操| 欧美性一区二区三区五区 | 日本一区二区精品88 | 国产农村一一级特黄毛片 | 色多多18免费观看 | 久久久久国产一级毛片高清片 | 亚洲性一区 |