日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

lhl545545 ? 來源:電子發(fā)燒友網(wǎng) ? 2018-02-06 16:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

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

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

1.Monkey

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

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

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

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

舉例來說:

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

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

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

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

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

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

2.MonkeyRunner

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

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

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

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

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

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 #啟動應(yīng)用程序

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)

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

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

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

其實(shí)也很簡單。主要有幾個方法。

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

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

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

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

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

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

3.UiAutomator

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

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

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

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

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

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

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

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

首先 給出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自帶的里面版本號一般都比較高,如果出錯的話 你要手動把這個版本號調(diào)低一點(diǎn)

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 }

復(fù)制代碼

然后變更一個conifg

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

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

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

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

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

(假設(shè)我們現(xiàn)在的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 行 其實(shí)就是用這個框架提供的功能來直接啟動你的app.

20 //這里其實(shí)主要就是要找到你的app那個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行 就很簡單了,無非就是找到界面上的元素。

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

34 //某些特殊場景除外

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我們的這個defaluttest,看看模擬器會發(fā)生什么?

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

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

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

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

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

    關(guān)注

    0

    文章

    273

    瀏覽量

    27849
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    4035

    瀏覽量

    134552
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

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

    通用自動化測試系統(tǒng):FCT、ATE、ICT、PCBA功能測試

    在現(xiàn)代制造業(yè)中,自動化測試已經(jīng)成為提高生產(chǎn)效率、降低錯誤率、提升產(chǎn)品質(zhì)量的關(guān)鍵環(huán)節(jié)。尤其是在電子產(chǎn)品的測試過程中,F(xiàn)CT(功能測試)、ATE(自動測
    發(fā)表于 04-13 14:54

    電測行業(yè)中都有哪些射頻器件自動化測試軟件?

    ",已成為射頻產(chǎn)線和大規(guī)模研發(fā)驗(yàn)證的標(biāo)配。本文系統(tǒng)梳理當(dāng)前主流射頻自動化測試軟件方案,并重點(diǎn)解析新興平臺的技術(shù)價值。 ? ?一、射頻測試自動化面臨的真實(shí)挑戰(zhàn) 射頻器件
    的頭像 發(fā)表于 03-31 17:44 ?1351次閱讀
    電測行業(yè)中都有哪些射頻器件<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>軟件?

    ATE測試是什么?電源企業(yè)為什么必須自動化測試?

    在電源行業(yè)快速發(fā)展的年代,產(chǎn)品質(zhì)量、生產(chǎn)效率與成本控制成為企業(yè)競爭的關(guān)鍵。很多電源廠家都在關(guān)注ATE 測試,但不少人仍不清楚 ATE測試是什么,也不明白自動化測試對于電源生產(chǎn)的重要意義
    的頭像 發(fā)表于 03-24 14:37 ?362次閱讀
    ATE<b class='flag-5'>測試</b>是什么?電源企業(yè)為什么<b class='flag-5'>必須</b>上<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>?

    要學(xué)好PLC,這10電氣元件必須了解

    在工業(yè)自動化領(lǐng)域,PLC(可編程邏輯控制器)作為控制系統(tǒng)的核心,其穩(wěn)定運(yùn)行離不開各類電氣元件的協(xié)同配合。想要真正掌握PLC技術(shù),必須深入理解與之相關(guān)的關(guān)鍵電氣元件。以下是10與PLC
    的頭像 發(fā)表于 03-12 17:08 ?775次閱讀

    自動化測試的「千里眼」:當(dāng)RTSM遠(yuǎn)程控制遇上自動化測試效率直接拉滿!

    自動化痛點(diǎn)】自動化測試的“黑箱困境”:你真的敢說“完全放心”? 凌晨2點(diǎn),測試工程師小李盯著電腦屏幕上的自動化腳本進(jìn)度條——第17步卡住了
    的頭像 發(fā)表于 12-11 11:26 ?507次閱讀
    <b class='flag-5'>自動化</b><b class='flag-5'>測試</b>的「千里眼」:當(dāng)RTSM遠(yuǎn)程控制遇上<b class='flag-5'>自動化</b>,<b class='flag-5'>測試</b>效率直接拉滿!

    程序員最常見謊言

    了。 28我已經(jīng)測試過了,這個功能沒問題,可以上線了。 29別擔(dān)心,這個問題很快就能解決。 30代碼快寫完了,已經(jīng)完成 90% 了 。 希望大家對程序員多一些容忍以及諒解! 各位程序員你們都被我說中了哪些?說說你們的觀點(diǎn)
    發(fā)表于 12-10 08:24

    CI/CT自動化測試解決方案

    北匯信息可以提供Jenkins、Gitlab Runner CI和自研平臺等的CI/CT整體解決方案,通過CI/CT自動化測試執(zhí)行、測試策略定制、測試任務(wù)
    的頭像 發(fā)表于 11-12 16:01 ?1626次閱讀
    CI/CT<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>解決方案

    測試小白3分鐘上手,零代碼自動化測試平臺,15分鐘搭建自動化測試方案

    還在為不懂代碼、搭建測試方案耗時久而發(fā)愁?ATECLOUD 零代碼自動化測試平臺,專為自動化測試量身打造,小白3 分鐘就能輕松上手,15 分
    的頭像 發(fā)表于 09-22 17:52 ?1057次閱讀
    <b class='flag-5'>測試</b>小白3分鐘上手,零代碼<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>平臺,15分鐘搭建<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>方案

    同惠LCR測試儀如何實(shí)現(xiàn)高效批量自動化測量

    在電子元器件生產(chǎn)與品質(zhì)檢測中,同惠LCR測試儀憑借高精度與穩(wěn)定性備受青睞。為提升批量測試效率,降低人力成本,通過軟硬件協(xié)同優(yōu)化可實(shí)現(xiàn)高效自動化測量,以下是具體方法: ? 一、硬件準(zhǔn)備與
    的頭像 發(fā)表于 09-17 16:26 ?682次閱讀
    同惠LCR<b class='flag-5'>測試</b>儀如何實(shí)現(xiàn)高效批量<b class='flag-5'>自動化</b>測量

    電源模塊的短路保護(hù)如何通過自動化測試軟件完成測試

    在當(dāng)今電力電子領(lǐng)域,電源模塊的可靠性至關(guān)重要,短路保護(hù)作為其關(guān)鍵特性,需通過精確的自動化測試軟件進(jìn)行驗(yàn)證。本文將整理如何借助自動化測試軟件ATECLOUD完成電源模塊短路保護(hù)的
    的頭像 發(fā)表于 09-03 19:10 ?1046次閱讀
    電源模塊的短路保護(hù)如何通過<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>軟件完成<b class='flag-5'>測試</b>

    如何用Renix實(shí)現(xiàn)網(wǎng)絡(luò)測試自動化: 從配置分離到多廠商設(shè)備支持

    文章主要介紹如何使用Renix高層封裝API編寫自動化腳本的基礎(chǔ)知識和技巧。只要您熟悉測試流程,不需要很強(qiáng)的代碼能力就可以順利編寫自動化測試。 本教程將以實(shí)踐為導(dǎo)向,引導(dǎo)您逐步
    的頭像 發(fā)表于 08-27 15:21 ?799次閱讀
    如何用Renix實(shí)現(xiàn)網(wǎng)絡(luò)<b class='flag-5'>測試</b><b class='flag-5'>自動化</b>: 從配置分離到多廠商設(shè)備支持

    除了LabVIEW還有哪些自動化測試的軟件?

    ,它們在各自擅長的領(lǐng)域中有著獨(dú)特的優(yōu)勢特點(diǎn)。 labview Intouch,一工業(yè)自動化組態(tài)軟件。由 Wonderware 公司開發(fā)。 InTouch HMI 軟件用于可視和控制工業(yè)生產(chǎn)過程。它為工程師提供了一
    的頭像 發(fā)表于 07-30 17:18 ?1266次閱讀
    除了LabVIEW還有哪些<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>的軟件?

    自動化測試平臺中TestCenter和ATECLOUD有哪些差異?

    TestCenter和ATECLOUD雖然都是自動化測試平臺,但兩者在試用領(lǐng)域、技術(shù)架構(gòu)、功能特性等方面具有很大的差異性,兩者的面向客戶也有所不同。本文將簡單分析兩個平臺的特點(diǎn)和差異
    的頭像 發(fā)表于 07-25 09:54 ?891次閱讀
    <b class='flag-5'>自動化</b><b class='flag-5'>測試</b>平臺中TestCenter和ATECLOUD有哪些差異?

    自動化測試平臺ATECLOUD推出AI算法功能

    作為納米軟件自主研發(fā)的自動化測試平臺,ATECLOUD 始終致力于為用戶提供高效優(yōu)質(zhì)的測試解決方案。面對5G、AI等前沿技術(shù)的迭代發(fā)展,平臺深度融合新技術(shù)持續(xù)升級測試能力,最新推出的A
    的頭像 發(fā)表于 07-22 16:10 ?1032次閱讀
    <b class='flag-5'>自動化</b><b class='flag-5'>測試</b>平臺ATECLOUD推出AI算法功能

    UTP系統(tǒng)通過ModBus協(xié)議對溫度傳感器的自動化測試介紹

    一、UTP系統(tǒng)簡介 宏控UTP協(xié)同自動化測試系統(tǒng)(簡稱UTP測試系統(tǒng))是一款通用的自動化測試系統(tǒng),支持對總線通信(如串口、CAN、以太網(wǎng)等)
    的頭像 發(fā)表于 06-07 15:12 ?991次閱讀
    UTP系統(tǒng)通過ModBus協(xié)議對溫度傳感器的<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>介紹
    甘孜| 肥西县| 南涧| 香港 | 兴安县| 磴口县| 新兴县| 西和县| 呼图壁县| 交口县| 延寿县| 滕州市| 隆林| 佛坪县| 河源市| 若尔盖县| 栾川县| 黄山市| 瑞安市| 榆社县| 滦南县| 河东区| 龙山县| 尼勒克县| 茶陵县| 百色市| 阿克陶县| 郯城县| 庆安县| 昌乐县| 奉节县| 浪卡子县| 汶川县| 义乌市| 黄山市| 威信县| 灵寿县| 大连市| 当雄县| 二连浩特市| 多伦县|