日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android测试篇(四)android专项测试之压力测试

發布時間:2024/3/13 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android测试篇(四)android专项测试之压力测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

抄襲文章來源:Android App專項測試-壓力測試篇

小伙伴們大家好,今天主要分享的主題是Android App專項測試。如何進行Android App專項測試壓力測試呢?我們主要通過Android平臺的一門工具Monkey。在學習本門課程之前,如果你具有一定的Shell基礎,將很有助于理解。

本次課程大綱主要分為3個部分:

第一部分 背景

探討兩個問題:

  • 為什么要開展壓力測試?
  • 什么時候開展壓力測試?
  • 第二部分 理論

  • 手工測試場景
  • 自動測試場景
  • Monkey工具
  • ADB命令
  • Monkey Script
  • MonkeyRunner
  • 壓力測試結果
    • 什么是Crash?
    • 什么是ANR?

    第三部分 實踐

  • 一個APP的壓測實踐
  • Monkey高級參數的應用
  • CRASH結果析取
  • ANR結果析取
  • Monkey Script實例
  • MonkeyRunner實例
  • 第一部分 背景

    1. 為什么要開展壓力測試?

    • 提高產品穩定性
    • 提高產品的留存率

    2.什么時候開展壓力測試?

    • 首輪功能測試通過后
    • 下班后的夜間進行

    第二部分 理論

    手工測試場景

    自動化測試場景

    圖解:

    就拿查找實現自動化的話,對于手機來說它會:

    • TouchInput(收集點擊事件)–>KeyEvent(它會收到你點擊鍵盤各種Key的事件)–>TouchSearch(收到你點擊按鈕的Touch事件)

    然后就會返回一個聯系人列表可以添加了:

    • TouchSearch(收到你點擊按鈕的Touch事件)–>TouchName(對于手機來說同樣收到一個Touch事件)

    聊天嘛,你收到的也是一個Touch事件,因為你要點擊用戶頭像,所以

    • TouchName(對于手機來說同樣收到一個Touch事件)–>TouchFriend–>TouchKey(接著會受到你輸入的各種文字)

    軟硬工具簡介

    Monkey

    Monkey在哪?

    在手機系統里,為了與它進行通訊,我們需要借助一個工具ADB

    ADB
    ADB是什么

    這里需要借助一部 手機 和一臺 WIndows電腦 ,通過USB鏈接,此時我們還需要建立一個軟的連接,這個連接全程就是Android Debug Bridge,也就是Android調試橋。

    Monkey Script

    MonkeyRunner

    Monkey和MonkeyRunner區別:

    MonkeyRunner APIs

    MonkeyRunner 測試類型

    壓力測試結果

    我們需要注意的兩個地方:CrashANR

    Crash

    相對于我們app來說就像是戰斗機的起火爆炸

    ANR

    Application Not Responding,如下圖:

    第三部分 實踐

    1.準備測試環境:

    • 準備Android SDK環境
    • 準備Python環境

    對于環境配置這里不做過多講解

    2.一個APP的壓測實踐

    壓測實踐Step1:

    • 開發人員選項中,將USB調試勾選上

      壓測實踐Step2:

    確認手機和電腦已經連接成功,多種方式,這了介紹命令行模式
    cmd窗口輸入adb devices


    如果cmd輸入adb提示“不是內部或外部命令”:

    在環境變量下配置adb地址即可


    adb全稱:android調試橋(android debug bridge),我們一般連接手機都是下載該連接橋才可以和AS代碼進行真機調試

    壓測實踐step3:

    • 安裝測試app:adb install 路徑/xx.apk

    壓測實踐setp4:

    • 發送測試指令:adb shell monkey 1000

    輸出結果如下:



    什么時候會出現兩行ActivityResuming的信息:當一個app從前臺調入后天,又從后臺調入前臺就會出現這么一個信息。

    Event injected:700 表示我們輸入的隨機測試1000個事件,他只完成了700個,并且出現了相應的報錯。如果這個數字與我們輸入的數字相等,表示沒有異常。如果改數字小于我們輸入的數字,則表示有異常出現

    java.lang.SecurityException: You need MANAGE_USERS permission to: check if specified user a managed profile outside your profile group

    這里不具體討論該bug,這邊采用隨機1000個時間爆出來的bug

    壓測實踐step5:

    • 獲取程序包名:adb shell “logcat | grep START”,還有一種方法,cmd命令中先:adb shell,然后:logcat | grep START

    |表示前一個命令的輸出作為下一個命令的輸入 grep START表示抓取日志中包含有START標簽的日志進行輸入。

    這里我們需要關注cmp= 后面的內容,在/之前的是app包名,/之后當前Activity類名

    壓測實踐step6:

    • 給指定的包打壓力: adb shell monkey -p [packagename] [次數,例如1000],如 adb shell monkey -p com.gxgroup.xx1000

      慢慢解決吧,操!!!

    Monkey高級參數的應用

    1.throttle參數

    • 指定實踐之間的間隔: adb shell monkey --throttle,例如 adb shell monkey -p com.gxgroup.pkpt --throttle 1000 10

    2.seed參數

    • 隨機生成數的seed值:adb shell monkey -s <event_count> ,例如:adb shell monkey -p com.gxgroup.pkpt -s 100 50,在重復執行一遍命令就可以復現上一條命令執行的結果,這里seed次數100和執行次數50,保持遇上一條命令數目相同遍復現上一次結果(這里說的不好理解,往下看,后面有針對性描述)

    3.觸摸事件

    • 設定觸摸事件的百分比 : adb shell --pct-touch,意思就是monkey所有操作中點擊事件占多大比例。例如 : adb shell monkey -v -p com.android.calculator2 --pct-touch 100 100. ‘-v’參數表示列出所有操作詳情。如下圖,執行的操作,其中Action_down和Action_up是一個點擊事件,成對出現。

      4.動作事件
      設置動作事件百分比 : adb shell monkey --pct-motion ,這個百分比和你其他事件之和要等于100。如果不等于100,它就會把剩余的比例隨機操作。例如 : adb shell monkey -v -p com.android.calculator2 --pct-touch 50 --pct-motion 30 100,執行后各事件百分比如下:

      5.軌跡球事件

    • 設定軌跡球事件的百分比 : adb shell monkey --pct-trackball 目前沒實踐過,我也不知道干啥的

    6.基本導航事件

    • 設定基本導航事件的百分比,輸入設備的上下左右 : adb shell monkey --pct-nav 目前沒實踐過,我也不知道干啥的

    7.主要導航事件

    • 設定主要導航事件的百分比,兼容中間鍵,返回鍵,菜單按鍵 : adb shell monkey --pct-majornav

    8.系統導航事件

    與手機硬件相關的

    • 設定系統導航事件的百分比,HOME,BACK,撥號及音量鍵 : adb shell monkey --pct-syskeys

    9.啟動Activity事件

    • 設定啟動Activity的事件百分比 : adb shell monkey --pct-appswitch,假設我們指定了30%,有4個Activity,它就會有30%部分在4個Activity里進行切換

    10.不常用事件

    • 設定系統導航事件的百分比,HOME,BACK,撥號及音量鍵 : adb shell monkey --pct-anyevent

    11.崩潰事件
    Crash

    • 忽略崩潰和異常 : adb shell monkey --ignore-crashes,monkey在遇到崩潰時會繼續跑,直到遇見的崩潰數等于我們的設定數值。

    12.超時事件

    ANR

    • 忽略超時事件 : adb shell monkey --ignore-timeouts,monkey在遇到超時事件會繼續跑,直到遇見的超時數等于我們的設定數值。

    CRASH結果析取

    實踐過程:

    • 安裝可以引起Crash的App
    • 執行App的壓力命令
    • 析取Crash的Exception信息

    注意:在cmd命令控制臺輸出的信息中CRASH: 后面的內容可以復制出來交給開發人員進行解決,在輸出信息末尾會有一個seed的值,拷貝這個值并在命令中加上[-s seed值]便可復現上一次的測試。如果在測試過程中忽略了crash而繼續執行則無法獲取到seed值。

    ANR異常測試結果析取

    實踐過程:

    • 安裝可以引起ANR的app
    • 執行app的壓力命令
    • 析取ANR的Exception信息

    注意:在cmd命令控制臺輸出的信息中NOT RESPONDING:后面會開始輸出ANR錯誤的類名位置,后面會緊跟當時手機系統的一些信息,如cpu,內存以及其他的一系列的異常信息,全部打印了出來。當出現這種異常信息我們可以將這些信息發送給開發人員debug進行處理。

    手動點擊獲得ANR異常,查看日志方法:

    在cmd命令控制臺,依次輸入如下命令

    • adb shell
    • cd /data/anr/
    • ls (會有一個traces.txt)
    • more traces.txt

    經歷以上操作就可以把異常信息再控制臺中輸出了,我們可以把這些異常信息復制下來交由開發人員去分析。

    Monkey Script

    • 執行Monkey腳本命令 : adb shell monkey -f

    1.DispatchTrackball命令(軌跡球事件)

    可以幫我們完成點擊操作

    DispatchTrackball(long downtime,long eventide,int action,folat x,float y,float pressure,float size,int metstate,float xprecision,float yprecision,int device,int edgeflags)
    downtime : 記錄鍵最初被按下的時間
    eventide : 事件發生的時間
    action : 具體的操作過程
    x,y : 坐標點
    pressure : 壓力的大小,范圍是0-1
    size : 觸摸的一個即使值,范圍是0-1
    metstate : 當前按下met鍵的標識
    xprecision : x坐標的精確值
    yprecision : y坐標的精確值
    device : 事件的來源,事件的來源是0-x,0表示不來自物理設備
    edgeflags : 表示超出屏幕范圍
    action 0代表按下,1代表抬起,x和y代表坐標點

    2.DispatchPointer命令(點擊事件)

    DispatchPointer(long downtime,long eventide,int action,folat x,float y,float pressure,float size,int metstate,float xprecision,float yprecision,int device,int edgeflags)
    downtime : 記錄鍵最初被按下的時間
    eventide : 事件發生的時間
    action : 具體的操作過程
    x,y : 坐標點
    pressure : 壓力的大小,范圍是0-1
    size : 觸摸的一個即使值,范圍是0-1
    metstate : 當前按下met鍵的標識
    xprecision : x坐標的精確值
    yprecision : y坐標的精確值
    device : 事件的來源,事件的來源是0-x,0表示不來自物理設備
    edgeflags : 表示超出屏幕范圍
    action 0代表按下,1代表抬起,x和y代表坐標點

    3.DispatchString命令(輸入字符串事件)

    DispatchString(String text)

    4.LuanchActivity命令(啟動應用)

    LuanchActivity(Package,Activity)

    5.UserWait命令(等待事件)

    UserWait(1000) , 傳入毫秒數

    6.DespatchPress命令(按下鍵值)

    DespatchPress(int keycode) , #keycode 66 返回鍵

    Monkey Script 實踐

    缺點:執行腳本過程中無法實現截屏操作

    腳本后綴名.script


    1.啟動app
    2.點擊輸入框
    3.輸入查詢詞
    4.點擊鍵盤上的回車
    5.點擊搜索按鈕
    6.等待結果出現
    7.點擊clear按鈕

    范例腳本:

    解釋:

    在獲取點擊坐標點時我們需要用到android_sdk里面tools文件夾下的一個uiautomatorviewer的一個工具
    使用:cmd命令進入到tools文件夾下,然后輸入 ./uiautomatorviewer

    uiautomatorviewer界面:
    左上角兩個手機圖標是獲取當前Android設備的界面

    右下角bounds兩個坐標點表示控件的左上角和右下角的坐標點。

    腳本使用首先要從電腦push到手機中,命令如下:

    adb shell ***.script /data/local/tmp/

    此時繼續執行腳本命令:
    monkey -f ***.script < event-count>
    而此時回車并不能啟動起我們指定的Activity而是超級用戶,這里尋找原因就是我們的LaunchActivity()命令行有問題

    之所以出現這個問題是因為在app的AndroidManifest.xml里面activity標簽沒有 android:exported=“true” 這一行代碼,這樣外部就無法調用起Activity。

    在一系列修改完成之后,在腳本里還需要在LaunchActivity()里將后面的Activity加上完整路徑,包名+類名,這樣才能正確啟動

    MonkeyRunner

    1.MonkeyRunner API-alert(警告框)

    void alert(String message,String title,String okTitle)

    這里的腳本是一個python腳本,后綴名為.py

    第一行表示是用Python編寫的
    第二行表示編碼格式
    第三行表示需要導入我們測試的模塊
    第四行表示執行alert命令

    執行命令:

    monkeyrunner ****.py

    monkeyrunner 在android-sdk/tools下面

    2.MonkeyRunner API-waitForConnection

    等待設備連接,如果有多個device id,則需要指明具體哪個設備

    waitForConnection(float timeout,String deviceId) , timeout單位為秒

    3.MonkeyRunner API-drag

    拖動

    drag(tuple start,tuple end, float duration ,integer steps) , timeout單位為秒
    start : 起始點
    end : 目標點
    duration : 手勢持續時間
    steps : 插值點的個數,默認為10

    4.MonkeyRunner API-press

    按鍵

    press(String keycode,dictionary type) ,keycode 名:DOWN,UP,DOWN_AND_UP

    5.MonkeyRunner API-startActivity

    啟動應用

    startActivity(package+’/’+activity)

    6.MonkeyRunner API-touch

    點擊

    touch(integer x,integer y,integer type)
    x,y : 坐標值
    type : DOWN,UP,DOWN_AND_UP

    7.MonkeyRunner API-type

    輸入

    type(String text)

    8.MonkeyRunner API-takeSnapshot

    截屏

    MonkeyImage takeSnapshot(),會返回MonkeyImage 類型數據

    9.MonkeyRunner API-sameAs

    圖像對比

    boolean sameAs(MonkeyImage other,float percent)

    10.MonkeyRunner API-writeToFile

    保存圖像

    void writeToFile(String path,String format)
    path : 保存路徑
    format : 保存格式,如.jpg,.png,.jpeg

    MonkeyRunner實踐


    壓力測試至此就告一段落了,本文是通過視頻來實時做的文章筆記,想要看原視頻的鏈接點這里

    總結

    以上壓力測試后面的涉及到代碼的基本上我也是直接拷貝過來的,也不打算去實踐,如果有興趣的可以去認真看看,這里更偏重于針對測試人員

    總結

    以上是生活随笔為你收集整理的android测试篇(四)android专项测试之压力测试的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。