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

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Android 程序員必須掌握的三種自動(dòng)化測(cè)試方法

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

前言

在日常的開發(fā)中,尤其是app開發(fā),因?yàn)椴幌駑eb端那樣 出錯(cuò)以后可以熱更新,所以app開發(fā) 一般對(duì)軟件質(zhì)量有更高的要求(你可以想一下 一個(gè)發(fā)出去的版本如果有重大缺陷 需要強(qiáng)制更新新客戶端是多么蛋疼的事情)。所以我們app的開發(fā)者一定要學(xué)會(huì)自己測(cè)試自己的代碼,自己測(cè)試自己的app,不要寄希望于測(cè)試來幫你找bug,絕大多數(shù)隱藏極深的bug 都是開發(fā)自己發(fā)現(xiàn)的。

那么如何測(cè)試自己的app,測(cè)試自己的模塊呢?

1.Monkey

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

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

可以簡(jiǎn)單看一下 這個(gè)命令的用法。看一下help 介紹的參數(shù)說明。

Android 程序員必須掌握的三種自動(dòng)化測(cè)試方法

舉例來說:

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

比如 我現(xiàn)在想看看android 系統(tǒng)自帶的日歷應(yīng)用 在壓力下表現(xiàn)如何。

Android 程序員必須掌握的三種自動(dòng)化測(cè)試方法

你看 這個(gè)地方模擬器自己就開始瘋狂點(diǎn)擊了。當(dāng)然在實(shí)際使用中,我們都是會(huì)把次數(shù)調(diào)到 幾十萬次到幾百萬次,然后下班以后開始跑,第二天來看結(jié)果 看看在哪里出了問題~~。基本上

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

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

2.MonkeyRunner

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

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

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

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

復(fù)制代碼

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 #要測(cè)試的程序的包名

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

13

14 #要啟動(dòng)的第一個(gè)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 #啟動(dòng)應(yīng)用程序

26 device.startActivity(component=initActivityName)

27 #防止啟動(dòng)首頁面 需要時(shí)間過長(zhǎng)

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)

然后運(yùn)行他 看看效果:

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

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

其實(shí)也很簡(jiǎn)單。主要有幾個(gè)方法。

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

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

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

4.比較某個(gè)操作結(jié)束后的 截屏。保存為圖像以后 和正確操作以后的圖像進(jìn)行對(duì)比。

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

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

3.UiAutomator

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

這個(gè)工具我個(gè)人認(rèn)為是所有android 程序員都必須要掌握的,有了這個(gè)強(qiáng)大的工具,我們就可以負(fù)責(zé)任的對(duì)自己的代碼 說 木問題,ok!

此工具 能模擬幾乎所有對(duì)android設(shè)備的操作。

而且代碼也非常簡(jiǎn)單 全部都是java代碼,并且android的api 他還幾乎都能夠使用。簡(jiǎn)直酷到?jīng)]有朋友!比android studio 自帶的ApplicationTestCase 強(qiáng)到不知道哪里去了。

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

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

你只要會(huì)寫UiAutomator testcase,就意味著你的代碼 幾乎是永遠(yuǎn)不會(huì)出錯(cuò)噠~~

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

首先 給出gradle里的改動(dòng):

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 //這個(gè)地方要注意了 studio自帶的里面版本號(hào)一般都比較高,如果出錯(cuò)的話 你要手動(dòng)把這個(gè)版本號(hào)調(diào)低一點(diǎn)

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

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

30 //對(duì)這個(gè)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 }

復(fù)制代碼

然后變更一個(gè)conifg

Android 程序員必須掌握的三種自動(dòng)化測(cè)試方法

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

Android 程序員必須掌握的三種自動(dòng)化測(cè)試方法

好,然后我們來假設(shè)一個(gè)場(chǎng)景,假設(shè)我們現(xiàn)在要做的功能是 有一個(gè)界面,界面上有2個(gè)輸入框,你在這2個(gè)輸入框里輸入數(shù)字以后,點(diǎn)擊計(jì)算按鈕

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

(假設(shè)我們現(xiàn)在的android代碼里這個(gè)計(jì)算的代碼是有錯(cuò)誤的)

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

你看 這里 我故意加了一個(gè)1.

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

Android 程序員必須掌握的三種自動(dòng)化測(cè)試方法

然后看一下這個(gè)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 行 其實(shí)就是用這個(gè)框架提供的功能來直接啟動(dòng)你的app.

20 //這里其實(shí)主要就是要找到你的app那個(gè)textview 然后點(diǎn)擊他 具體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行 就很簡(jiǎn)單了,無非就是找到界面上的元素。

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動(dòng)畫能顯示的更清楚罷了,一般我們自己寫的時(shí)候?yàn)榱擞美俣瓤煲稽c(diǎn) 是不會(huì)加sleep的

34 //某些特殊場(chǎng)景除外

35 et1.setText(“12”);

36 sleep(3000);

37 et2.setText(“21”);

38 sleep(3000);

39 bt1.click();

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

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

42

43 }

44 }

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

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

Android 程序員必須掌握的三種自動(dòng)化測(cè)試方法

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 自動(dòng)化測(cè)試

    關(guān)注

    0

    文章

    229

    瀏覽量

    27237
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3966

    瀏覽量

    129639
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    矢量信號(hào)發(fā)生器在工業(yè)自動(dòng)化測(cè)試中的應(yīng)用場(chǎng)景

    隨著工業(yè)自動(dòng)化技術(shù)的飛速發(fā)展,對(duì)測(cè)試設(shè)備的要求也日益提高。矢量信號(hào)發(fā)生器作為一先進(jìn)的測(cè)試設(shè)備,憑借其強(qiáng)大的信號(hào)調(diào)制能力和廣泛的頻率覆蓋范圍,在工業(yè)
    的頭像 發(fā)表于 03-26 14:10 ?261次閱讀

    通用自動(dòng)化測(cè)試軟件 - TAE

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

    串口屏自動(dòng)化測(cè)試

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

    TMS320C6000程序員指南

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

    android手機(jī)上emulate應(yīng)用程序方法

    Android手機(jī)上模擬(emulate)應(yīng)用程序方法通常涉及到使用Android模擬器(Emulator)或類似的工具來模擬Android
    的頭像 發(fā)表于 12-05 15:33 ?1084次閱讀

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

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

    Linux驅(qū)動(dòng)程序程序員指南

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

    AI編程工具會(huì)不會(huì)搶程序員飯碗

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

    探索Playwright:前端自動(dòng)化測(cè)試的新紀(jì)元

    作者:京東保險(xiǎn) 張新磊 背景 在前端開發(fā)中,自動(dòng)化測(cè)試是確保軟件質(zhì)量和用戶體驗(yàn)的關(guān)鍵環(huán)節(jié)。隨著Web應(yīng)用的復(fù)雜性不斷增加,手動(dòng)測(cè)試已經(jīng)無法滿足快速迭代和持續(xù)交付的需求。自動(dòng)化
    的頭像 發(fā)表于 10-22 14:27 ?615次閱讀

    光纖測(cè)試方法有哪三種

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

    開關(guān)電源自動(dòng)化測(cè)試設(shè)備:如何實(shí)現(xiàn)自動(dòng)化測(cè)試

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

    OTA自動(dòng)化測(cè)試解決方案——實(shí)車級(jí)OTA測(cè)試系統(tǒng)PAVELINK.OTABOX

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

    程序員節(jié)視頻創(chuàng)意大賽,用串口屏贏取千元大獎(jiǎng)

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

    程序員節(jié)視頻創(chuàng)意盛宴,邀您共襄盛舉!

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

    機(jī)械自動(dòng)化自動(dòng)化的一

    引言 自動(dòng)化技術(shù)是指利用控制裝置對(duì)生產(chǎn)過程進(jìn)行控制,以實(shí)現(xiàn)生產(chǎn)過程的自動(dòng)化。機(jī)械自動(dòng)化自動(dòng)化技術(shù)的一,它主要涉及到使用機(jī)械設(shè)備和控制系統(tǒng)
    的頭像 發(fā)表于 07-01 09:32 ?2368次閱讀
    主站蜘蛛池模板: 苦瓜se影院在线视频网站 | 一级特黄aaa免费 | 狠狠se| 国产午夜视频高清 | 日本黄色大片在线观看 | 免费亚洲成人 | 精品国产理论在线观看不卡 | 亚洲一区二区影院 | 国产一区二区三区乱码 | 男人在线视频 | 国产精品香蕉在线一区 | avt天堂网| 婷婷久| bt磁力在线搜索 | 亚洲码在线 | 天堂网在线播放 | 久久人人做人人玩人精品 | 国产美女视频一区二区三区 | 欧美爽妇| 正在播放羽月希与黑人bd在线 | 天天操天天干天天透 | 国产亚洲欧美日本一二三本道 | 午夜一级 | 长腿丝袜美女被啪啪 | 1024免费看片 | 手机毛片在线 | 中日韩一级片 | 综合久久99 | 一级做a爰片久久毛片免费 一级做a爰片久久毛片免费看 | 神马影视午夜 | 亚洲天天操| 狠狠色噜噜狠狠狠狠97影音先锋 | 亚洲美女激情视频 | 色多多网址 | 一级网站片 | 人人上人人干 | 亚洲成在人线影视天堂网 | 五月天婷婷在线观看 | 免费一级大毛片a一观看不卡 | 女攻各种play男受h | 黄色录像欧美 |