真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Monkey自動化測試工具-創(chuàng)新互聯(lián)

概述

Monkey是Android中的一個命令行工具,可以運行在模擬器里或?qū)嶋H設(shè)備中。它向系統(tǒng)發(fā)送偽隨機的用戶事件流(如按鍵輸入、觸摸屏輸入、手勢輸入等),實現(xiàn)對正在開發(fā)的應(yīng)用程序進行壓力測試。Monkey測試是一種為了測試軟件的穩(wěn)定性、健壯性的快速有效的方法。Monkey自動化測試工具是可視化操作的便利方式工具,提高使用性和效率。

創(chuàng)新互聯(lián)自2013年起,先為沈陽等服務(wù)建站,沈陽等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為沈陽企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

設(shè)置monkey種子數(shù),延遲,執(zhí)行次數(shù)

-s 種子數(shù)作用:偽隨機數(shù)生成器的seed值。如果用相同的seed值再次運行monkey,將生成相同的事件序列。

--throttle 延遲作用:在事件之間插入固定的時間(毫秒)延遲,你可以使用這個設(shè)置來減緩Monkey的運行速度,如果你不指定這個參數(shù),則事件之間將沒有延遲,事件將以最快的速度生成。

-v 日志輸出等級作用:命令行上的每一個-v都將增加反饋信息的詳細級別。
簡單(默認),除了啟動、測試完成和最終結(jié)果外只提供較少的信息。
中等,提供了較為詳細的測試信息,如逐個發(fā)送到Activity的事件信息。
復雜,提供了更多的設(shè)置信息,如測試中選中或未選中的Activity信息。

--ignore-crashes作用:通常,應(yīng)用發(fā)生崩潰或異常時Monkey會停止運行。如果設(shè)置此項,Monkey將繼續(xù)發(fā)送事件給系統(tǒng),直到事件計數(shù)完成。

--ignore-security-exception?作用:通常,當程序發(fā)生許可錯誤(例如啟動一些需要許可的Activity)導致的異常時,Monkey將停止運行。設(shè)置此項,Monkey將繼續(xù)發(fā)送事件給系統(tǒng),直到事件計數(shù)完成。

Monkey自動化測試工具

讀取程序包,選擇需要測試的包名

-p 程序包作用:如果你指定一個或多個包,Monkey將只允許訪問這些包中的Activity。如果你的應(yīng)用程序需要訪問這些包(如選擇聯(lián)系人)以外的Activity,你需要指定這些包。如果你不指定任何包,Monkey將允許系統(tǒng)啟動所有包的Activity。指定多個包,使用多個-p,一個-p后面接一個包名。

點擊讀取程序包通過讀取data/data目錄下獲取所有的程序包名稱,首先需要將手機連接到PC,測試連接是否正常,可在cmd里輸入adb devices來進行驗證;因測試多針對一個特定的APP包,所以需要知道需要測試包的包名;也可以通過?adb shell pm list packages ?列出所有包名來進行查找通過全部選擇快速選取所有的應(yīng)用包,通過全部取消取消已選項。

Monkey自動化測試工具

查看log,生成Monkey log。

Monkey開始,通過adb連接手機,并運行l(wèi)ogcat,生成logcat到指定目錄。

一鍵monkey可以自動生成默認參數(shù),直接開始monkey測試。

Monkey自動化測試工具

Monkey的可視化界面是通過python 內(nèi)置的wx模塊來實現(xiàn),可以快速構(gòu)建UI界面。

軟件主界面的控件排布代碼:

1.????? MyFrame是整個窗體的主入口,通過實例化wx.Frame來顯示窗口

class MyFrame(wx.Frame):

//設(shè)置默認delay時間值

delayDefault = "2"

//設(shè)置默認種子數(shù)

seedDefault = "5000000"

//設(shè)置默認執(zhí)行次數(shù)

executionFrequencyDefault = "60000000"

logDir = "./"

def __init__(self):

//執(zhí)行方式定義

excuteMode = ["忽略程序崩潰",

?? "忽略程序無響應(yīng)",

?? "忽略安全異常",

?? "出錯中斷程序",

?? "本地代碼導致的崩潰",

?? "默認"

?? ]

//日志輸出等級區(qū)分

logMode = ["簡單","普通","詳細"]

executionModeDefault = excuteMode[0]

?? //初始化菜單按鈕

menuBar = wx.MenuBar()

menu1 = wx.Menu("")

menuBar.Append(menu1, "File")

self.SetMenuBar(menuBar)

//初始化標簽欄

wx.StaticText(panel, -1, "種子數(shù):", pos=(xPos, yPos))

self.seedCtrl = wx.TextCtrl(panel, -1, "", pos=(xPos1, yPos))

//綁定點擊事件

self.seedCtrl.Bind(wx.EVT_KILL_FOCUS, self.OnAction)

self.seedCtrl.SetFocus()

//初始化標簽欄

wx.StaticText(panel, -1, "執(zhí)行次數(shù):", pos=(xPos, yPos+yDelta))

//設(shè)置窗口位置

self.excuteNumCtrl = wx.TextCtrl(panel, -1, "", pos=(xPos1, yPos+yDelta))

//初始化標簽欄

wx.StaticText(panel, -1, "延時:", pos=(xPos, yPos+2*yDelta))

self.delayNumCtrl = wx.TextCtrl(panel, -1, "", pos=(xPos1, yPos+2*yDelta))

//初始化標簽欄???????

wx.StaticText(panel, -1, "執(zhí)行方式:", pos=(xPos, yPos+3*yDelta))

?? //設(shè)置窗口位置

self.excuteModeCtrl = wx.ComboBox(panel, -1, "", (xPos1,yPos+3*yDelta), choices=excuteMode,style=wx.CB_DROPDOWN)

//設(shè)置初始化checklistbox,下拉菜單

self.checkListBox = wx.CheckListBox(panel, -1, (xPos, yPos+4*yDelta ), (400, 350), [])

wx.StaticText(panel, -1, "日志輸出等級:", pos=(xPos, yPoslayout-yDelta))

self.logModeCtrl = wx.ComboBox(panel, -1, "", (xPos1,yPoslayout-yDelta), choices=logMode,style=wx.CB_DROPDOWN)

//初始化按鈕,讀取程序包按鈕綁定readButton事件

self.readButton = wx.Button(panel, -1, "讀取程序包", pos=(xPos, yPoslayout))

self.Bind(wx.EVT_BUTTON, self.OnReadClick, self.readButton)

??self.readButton.SetDefault()

//初始化默認參數(shù)按鈕,綁定defaultButton事件

self.defaultButton = wx.Button(panel, -1, "默認參數(shù)", pos=(xPos, yPoslayout+yDelta))

self.Bind(wx.EVT_BUTTON, self.OnResetClick, self.defaultButton)

self.defaultButton.SetDefault()

//初始化一鍵monkey按鈕,按鈕綁定quick事件

self.quickButton = wx.Button(panel, -1, "一鍵Monkey", pos=(xPos+120, yPoslayout+yDelta))

self.Bind(wx.EVT_BUTTON, self.OnQuickStartClick, self.quickButton)

self.quickButton.SetDefault()

2.????? 生成log代碼:

//生成log函數(shù)

def OnBuildLog(self,event):

os.chdir(self.logDir)??

//通過日期創(chuàng)建唯一標識文件名稱

date = time.strftime('%Y-%m-%d-%H-%M',time.localtime(time.time()))

dir_m = "Monkey_Log_"+date.replace("-","")

dir0 = "sdcard0_log"

創(chuàng)建目標文件目錄

if (os.path.exists(dir_m+"/"+dir0)):

print "already exists"

else:

os.system("mkdir -p "+dir_m+"/"+dir0)

os.chdir(dir_m)

//通過adb命令導出log文件到目標文件夾中

os.system("adb pull /storage/sdcard0/log/ "+dir0)

//查找異常log文件

self.BuildFatalLog(os.getcwd())

//遍歷所有的log文件函數(shù)

def ListFiles(self,path):

//遍歷文件件

for root,dirs,files in os.walk(path):

log_f = ""

for f in files:

if(f.find("main") == 0):

?? log_f = f.strip()

?? //切換到目標目錄

?? os.chdir(root)

?? //通過grep 命令查找所有的異常文件

?? if (log_f != ""):

grep_cmd="grep-Eni-B2-A20'FATAL|error|exception|system.err|androidruntime' "+log_f+" > "+log_f+"_fatal.log"

???????????os.system(grep_cmd)

//查找異常文件函數(shù)

def BuildFatalLog(self,path):

self.ListFiles(path)

3.????? 讀取程序包代碼分析:

//讀取程序包函數(shù)聲明

def OnReadClick(self, event):

//清空控件內(nèi)容

self.checkListBox.Clear()

//通過讀取手機data/data目錄來確認所有的包名

os.system("adb shell ls data/data > ~/log.log")

//解析log.log文件

home = os.path.expanduser('~')

f = open(home+"/log.log", 'r')

line = f.readline()

while line:

line = f.readline()

if (line != ""):

print "===="+line

//將解析的包名,添加包名checkbox中顯示

self.checkListBox.Append(line)

f.close()

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


分享文章:Monkey自動化測試工具-創(chuàng)新互聯(lián)
分享URL:http://weahome.cn/article/hjppj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部