使用MonkeyTest對Android用戶端進行壓力測試 自動化代碼

來源:互聯網
上載者:User

標籤:crash   包名   逾時   ctr   單位   utf-8   工具   import   錯誤   

1、monkey命令簡介

Monkey是Android中的一個命令列工具,可以運行在模擬器裡或實際裝置中。它向系統發送偽隨機的使用者事件流(如按鍵輸入、觸控螢幕輸入、手勢輸入等),實現對正在開發的應用程式進行壓力測試。

先來看一條monkey命令

adb shell monkey -p ctrip.android.view --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 100000>e:\monkeylog\monkeyScreenLog.log

這條monkey命令是指:在ctrip.android.view中產生10萬次偽隨機操作(包括觸摸、按鍵、手勢等),每次間隔500ms。

2、monkey命令參數說明

-s
    偽隨機數產生器的 seed 值。

    樣本: -s 600(如果用相同的seed值再次運行monkey,它將產生相同的事件序列。)
--throttle
    在事件之間插入固定延遲。

    樣本: --throttle 500(毫秒)
-p
    如果用此參數指定了一個或幾個包,Monkey將只允許系統啟動這些包裡的Activity。 如果你的應用程式還需要訪問其它包裡的Activity(如選擇取一個連絡人),那些包也需要在此 同時指定。如果不指定任何包,Monkey將允許系統啟動全部包裡的Activity。要指定多個 包,需要使用多個 -p選項,每個-p選項只能用於一個包。

    樣本:-p ctrip.android.view
--kill-process-after-error 
    通常,當Monkey由於一個錯誤而停止時,出錯的應用程式將繼續處於運行狀態。當設定了此選項時,將會通知系 統停止發生錯誤的進程。注意,正常的(成功的)結束,並沒有停止啟動的進程,裝置只是在結束事件之 後,簡單地保持在最後的狀態。
--ignore-timeouts 
    通常,當應用程式發生任何逾時錯誤(如“Application Not Responding”對 話框)時,Monkey將停止運行。如果設定此選項,Monkey將繼 續向系統發送事件,直到計數完成。
--ignore-security-exceptions 
    通常,當應用程式發生許可錯誤(如啟動一個需要某些許可的Activity)時,Monkey將 停止運行。如果設定了此選項,Monkey將繼續向系統發送事件,直到計數完成。
 -v 
    命令列的每一個 -v 將增加反饋資訊的層級。 3個-v代表最詳細的記錄層級。

    樣本:-v -v -v 100(數字100: 表示測試事件數目)。

詳情請參考:monkey命令參數 

3、自動化執行個體
 1 #coding=utf-8 2  3 ‘‘‘ 4 Create on 2014-12-24 5 python 2.7 for window 6 @auther: tangdongchu 7 ‘‘‘ 8 import os 9 import sys10 import time11 12 class monkeyTest():13     14     def __init__(self):15         """ init """16             17     #monkey命令,packageName包名,interval間隔時間單位ms ,frequency執行次數18     def monkeyApp(self,packageName,interval,frequency):19         try:20             os.popen("adb shell monkey -p %s --throttle %s --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v %s >e:\monkeylog\monkeyScreenLog.log" % (packageName, interval, frequency),‘r‘)21         except Exception,e:22             print e23 24     #匯出日誌25     def copyErrorLog(self):26         try:27             anr = "E:\\monkeylog\\anr"28             if not os.path.isdir(anr):29                 os.makedirs(anr)30             dontpanic = "E:\\monkeylog\\dontpanic"31             if not os.path.isdir(dontpanic):32                 os.makedirs(dontpanic)33             tombstones = "E:\\monkeylog\\tombstones"34             if not os.path.isdir(tombstones):35                 os.makedirs(tombstones)              36             bugreports = "E:\\monkeylog\\bugreports"37             if not os.path.isdir(bugreports):38                 os.makedirs(bugreports)                                            39             os.popen("adb pull /data/anr  E://monkeylog//anr",‘r‘)40             os.popen("adb pull /data/dontpanic  E://monkeylog//dontpanic",‘r‘)41             os.popen("adb pull /data/tombstones  E://monkeylog//tombstones",‘r‘)42             os.popen("adb pull /data/data/com.android.shell/files/bugreports  E://monkeylog//bugreports",‘r‘)43         except Exception,e:44             print e            45            46 def main():47     print """"""48     49     50 if __name__=="__main__":51     52     packageName = ‘ctrip.android.view‘  53     myApp = monkeyTest()   54     myApp.monkeyApp(packageName,500,100)55     #判斷是否執行完成,執行完成後匯出日誌56     for i in range(1, 1000000):57         monkeylog = open(‘E:\monkeylog\monkeyScreenLog.log‘)58         try:59             temp = monkeylog.read( )60         finally:61             monkeylog.close( )62         if temp.count(‘Monkey finished‘)>0:63             myApp.copyErrorLog()64             break65         else:66             time.sleep(2)

以上做到了自動執行monkey命令,並在monkey執行完成後將日誌匯出到PC以供分析。

4、如何通過日誌定位問題

Android平台應用程式可能產生以下四種Crash:

    App層

    1、Force Close Crash
    2、ANR Crash

    Native層

    3、Tombstone Crash(Native Crash)

    Kernel層

    4、Kernel Panic

主要Log檔案說明

anr目錄:從手機/data/anr匯出的日誌,儲存發生anr crash 時的相關資訊;

dontpanic目錄:從手機/data/dontpanic/匯出的日誌,儲存發生Kernel Panic時的相關資訊;

Tombstone目錄:從手機/data/tombstones/匯出的日誌,儲存發生Tombstone Crash時的錯誤資訊;

dropbox目錄:從手機/data/tombstones/匯出的日誌,經過dropbox服務截取的部分tombstones錯誤資訊;

bugreports.log:從手機data/data/com.android.shell/files/bugreports匯出的日誌,儲存發生異常時的相關係統資訊,也可以通過adb shell bugreport命令提取;

MonkeyScreenLog.Log:儲存Monkey測試過程、應用程式層錯誤資訊,發生Native Crash時,在此檔案也會有記錄;

LOG分析方法

1、在MonkeyScreen.Log記錄檔搜尋關鍵詞“Fatal”、“Crash”、“ANR”定位到發生Crash的詳細堆棧資訊,通過上下文初步判斷髮生問題的時間,進程pid等

2、檢查dropbox目錄下是否有相關crash日誌資訊,主要關注是否有以下4類crash錯誤資訊:data_app_wtf,data_app_anr,data_app_crash,system_server_watchdog

LOG分析樣本

使用MonkeyTest對Android用戶端進行壓力測試 自動化代碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.