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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android App专项测试-压力测试篇

發布時間:2024/3/13 Android 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android App专项测试-压力测试篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

第一部分 背景

探討兩個問題:

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

第二部分 理論

1.手工測試場景
2.自動測試場景
3.Monkey工具
4.ADB命令
5.Monkey Script
6.MonkeyRunner
7.壓力測試結果

1.什么是Crash?2.什么是ANR?

第三部分 實踐

1.一個APP的壓測實踐
2.Monkey高級參數的應用
3.CRASH結果析取
4.ANR結果析取
5.Monkey Script實例
6.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

MonkeyRunner APIs

MonkeyRunner 測試類型

壓力測試結果

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

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

ANR
Application Not Responding,如下圖:

第三部分 實踐

準備測試環境:

準備Android SDK環境
準備Python環境

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

一個APP的壓測實踐

壓測實踐Step1:

在手機開發者選項中,將USB調試勾上

壓測實踐Step2:

確認手機和電腦已經連接成功
adb devices來確認:cmd窗口輸入adb devices,有以下信息就說明已經建立連接

壓測實踐Step3:

安裝測試app : adb install package.apk

壓測實踐Step4:

發送測試指令 : adb shell monkey 1000

之后會輸出如下類似信息:

什么時候會出現兩行ActivityResuming的信息呢,就是一個app從前臺調入后臺,又從后臺調入前臺就會出現這么一個信息.

Event injected:1000 表示我們輸入的隨機測試1000個事件,它完成的也是1000個事件.如果這里的數字與我們輸入的數字小燈,則表明沒有異常出現.如果有異常出現,則這個數字小于我們輸入的數字.

壓測實踐Step5:

獲取程序包名 : adb logcat | grep START ,
| 表示前一個命令的輸出作為下一個命令的輸入
grep START表示抓取日志中包含有START標簽的日志進行輸出

這里我們主要關注cmp=后面的內容,在/之前的是app的包名,在/后面的是當前Activity的類名.Activity我們暫時不許要太關注,我們只需要關注這個包名。
我們以計算器為例,當我們home返回桌面,點擊進入計算器,cmd就會輸出計算器的一些信息,如:

壓測實踐Step6:

給指定包打壓力 : adb shell monkey -p [packagename] [次數,如1000] ,,如adb shell monkey -p com.android.calculator2 1000,輸出信息如下:

Monkey高級參數的應用

1.throttle參數

指定事件之間的間隔:adb shell monkey --throttle<milliseconds>,例如adb shell monkey -p com.android.calculator2 --throttle 1000 10

2.seed參數

指定隨機生成數的seed值 : adb shell monkey -s<seed> <event-count>,例如 : adb shell monkey -p com.android.calculator2 -s 100 50,在重復執行一遍命令就可以復現上一條命令執行的結果,這里的seed次數100和執行事件數50保持遇上一條命令數目相同便可復現上一次結果。

3.觸摸事件

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

4.動作事件

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

5.軌跡球事件

設定軌跡球事件的百分比 : adb shell monkey --pct-trackball<percent>

6.基本導航事件

設定基本導航事件的百分比,輸入設備的上下左右 : adb shell monkey --pct-nav<percent>

7.主要導航事件

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

8.系統導航事件

與手機硬件相關的

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

9.啟動Activity事件

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

10.不常用事件

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

11.崩潰事件

Crash

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

11.超時事件

ANR

忽略超時事件 : adb shell monkey --ignore-timeouts<event-count>,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 <scriptfile> <event-count>

    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) , 傳入毫秒數

    5.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 App专项测试-压力测试篇的全部內容,希望文章能夠幫你解決所遇到的問題。

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