色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

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

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

前言

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

那么如何測試自己的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.登錄成功以后你這個頁面肯定是要跳轉到主界面的對吧,你就用腳本執行下shell命令 看看主頁面 是否在棧的最上方?(前面我的activity 啟動模式那篇博客里講過這個命令的)

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

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

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

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

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

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 //要等到新的窗口出來才繼續往下走

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,看看模擬器會發生什么?

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

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

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

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

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

    關注

    0

    文章

    217

    瀏覽量

    27036
  • Android
    +關注

    關注

    12

    文章

    3949

    瀏覽量

    128492
收藏 人收藏

    評論

    相關推薦

    通用自動化測試軟件 - TAE

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

    串口屏自動化測試

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

    TMS320C6000程序員指南

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

    機械革命發布CODE AI程序員

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

    Linux驅動程序程序員指南

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

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

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

    光纖測試方法有哪三種

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

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

    開關電源自動化測試設備是將測試軟件和測試硬件集成在一個電源測試柜中的ate自動測試設備,其
    的頭像 發表于 08-30 18:19 ?1484次閱讀
    開關電源<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自動化測試系統的落
    的頭像 發表于 07-11 08:26 ?840次閱讀
    OTA<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>解決方案——實車級OTA<b class='flag-5'>測試</b>系統PAVELINK.OTABOX

    程序員節視頻創意大賽,用串口屏贏取千元大獎

    10月24日,程序員專屬的節日里,我們盛大開啟“程序員節視頻創意大賽”特別活動!這不僅是一場視覺的盛宴,更是智慧與創意的璀璨碰撞。我們誠摯邀請每一位程序員及編程愛好者,拿起你的鏡頭,記錄下那些平凡日子中的不凡瞬間,讓編程的魅力與
    的頭像 發表于 07-08 10:38 ?72次閱讀
    <b class='flag-5'>程序員</b>節視頻創意大賽,用串口屏贏取千元大獎

    程序員節視頻創意盛宴,邀您共襄盛舉!

    10月24日,程序員專屬的節日里,我們盛大開啟“程序員節視頻創意大賽”特別活動!這不僅是一場視覺的盛宴,更是智慧與創意的璀璨碰撞。我們誠摯邀請每一位程序員及編程愛好者,拿起你的鏡頭,記錄下那些平凡日子中的不凡瞬間,讓編程的魅力與
    的頭像 發表于 07-04 09:00 ?67次閱讀
    <b class='flag-5'>程序員</b>節視頻創意盛宴,邀您共襄盛舉!

    機械自動化自動化的一

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

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

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

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

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

    鴻蒙OS開發實戰:【自動化測試框架】使用指南

    為支撐HarmonyOS操作系統的自動化測試活動開展,我們提供了支持JS/TS語言的單元及UI測試框架,支持開發者針對應用接口進行單元測試,并且可基于UI操作進行UI
    的頭像 發表于 04-08 14:49 ?1681次閱讀
    鴻蒙OS開發實戰:【<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>框架】使用指南
    主站蜘蛛池模板: 果冻传媒9CM在线观看 | 欧美做真爱欧免费看 | 亚洲国产成人一区二区在线 | 国产精品第1页在线观看 | 日韩hd高清xxxⅹ | 青青草原国产 | 久久精品一区 | 吃春药后的女教师 | 国产伊人久久 | 亚洲欧美激情精品一区二区 | 牛牛在线精品视频(正) | 国产性夜夜春夜夜爽1A片 | 久久久国产精品免费A片蜜臀 | 久久re热在线视频精69 | 长篇高h肉爽文丝袜 | 国产不卡无码高清视频 | 久久精品视频3 | 纵欲(高H)| 国产呦精品一区二区三区网站 | 久久不射视频 | 日韩成人黄色 | 欧美亚洲高清国产 | 在线日本高清日本免费 | 老师破女学生特级毛片 | 校花被扒衣吸乳羞羞漫画 | 久久久黄色大片 | 亚洲欧美日韩高清中文在线 | 果冻传媒剧情在线观看 | 国产精品成人免费视频99 | 久久久免费热线精品频 | 久久日本片精品AAAAA国产 | 暖暖的高清视频在线观看免费中文 | 日日操夜夜操狠狠操 | 99久久亚洲 | 精品国产原创在线观看视频 | 精品综合久久久久久8888 | 国产午夜精品自在自线之la | 精品99久久久久成人网站 | 亚洲欧洲精品A片久久99 | 欧美日韩在线亚洲一 | 久草在线福利视频在线播放 |