使用MonkeyTest對Android客戶端進展壓力測試


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。

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命令參數 

 

自動化實例

#coding=utf-8

import os
import sys
import time

class monkeyTest():
    
    def __init__(self):
        """ init """
            
    #monkey命令,packageName包名,interval間隔時間單位ms ,frequency執行次數
    def monkeyApp(self,packageName,interval,frequency):
        try:
            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')
       except Exception,e:
           print e

   #導出日志
    def copyErrorLog(self):
        try:
            anr = "E:\\monkeylog\\anr"
            if not os.path.isdir(anr):
                os.makedirs(anr)
            dontpanic = "E:\\monkeylog\\dontpanic"
            if not os.path.isdir(dontpanic):
                os.makedirs(dontpanic)
            tombstones = "E:\\monkeylog\\tombstones"
            if not os.path.isdir(tombstones):
                os.makedirs(tombstones)              
            bugreports = "E:\\monkeylog\\bugreports"
            if not os.path.isdir(bugreports):
                os.makedirs(bugreports)                                            
            os.popen("adb pull /data/anr  E://monkeylog//anr",'r')
            os.popen("adb pull /data/dontpanic  E://monkeylog//dontpanic",'r')
            os.popen("adb pull /data/tombstones  E://monkeylog//tombstones",'r')
            os.popen("adb pull /data/data/com.android.shell/files/bugreports  E://monkeylog//bugreports",'r')
        except Exception,e:
            print e            
           
def main():
    print """"""
    
    
if __name__=="__main__":
    
    packageName = 'ctrip.android.view'  
    myApp = monkeyTest()   
    myApp.monkeyApp(packageName,500,100)
    #判斷是否執行完成,執行完成后導出日志
    for i in range(1, 1000000):
        monkeylog = open('E:\monkeylog\monkeyScreenLog.log')
        try:
            temp = monkeylog.read( )
        finally:
            monkeylog.close( )
        if temp.count('Monkey finished')>0:
            myApp.copyErrorLog()
            break
        else:
            time.sleep(2)

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

 

如何通過日志定位問題

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM