python monkey_wxPython制作跑monkey工具(python3)

#!/usr/bin/env python

importwximportosimportsysimporttimefrom threading importThread#执行adb命令函数#使用到的线程:RunMonkeyThread(),KillMonkeyThread(),ExportLogThread()

defexcuOrder(orderName):

c=os.system(orderName)print(c)returnc#将指定内容写入指定文件(写入monkey日志报错信息)#使用到的函数:findException()

defwriteFile(FileName, content):

FName= open(FileName, 'a')

FName.write(content)

FName.close()#查找指定文件里指定字符串的个数,并输出字符串所在行的内容#使用到的线程:ExportLogThread()

deffindException(tfile,sstr):try:

lines=open(tfile,'r').readlines()

flen=len(lines)-1acount=0

fileException= "%s_%s" %(tfile,sstr)

tfileException= "%s.txt" %fileException

writeFile(tfileException,"%s keywords:\n" %fileException)for i inrange(flen):if sstr inlines[i]:

lineException= '\t%s\n'%lines[i]

writeFile(tfileException,lineException)

acount+= 1writeFile(tfileException,"%s frequency:%s" %(fileException,acount))print('Please check Exception keywords in the "%s"\n' %tfileException)exceptException as e:print(e)classRunMonkeyThread(Thread):def __init__(self):#线程实例化是立即启动

Thread.__init__(self)

self.logNameST=logNameST

self.start()defrun(self):print("Start running monkey ...\n")

self.packageName=packageText.GetValue()

self.MonkeyTime=MTText.GetValue()

self.MonkeyCount=MCText.GetValue()

self.strTime= time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))

self.logName= '%s_%s_monkey.log'%(self.packageName,self.strTime)

open(r"logname.txt",'w').write(self.logName)

self.logNameST.SetLabel("%s" %self.logName)

self.orderName1='adb shell "monkey -p %s --throttle %s --ignore-crashes --monitor-native-crashes \

--ignore-security-exceptions --ignore-timeouts --ignore-native-crashes --pct-syskeys\

0 --pct-nav 20 --pct-majornav 20 --pct-touch 40 --pct-appswitch 10 -v -v -v %s\

> /sdcard/%s&"'%(self.packageName,self.MonkeyTime,self.MonkeyCount,self.logName)

excuOrder(self.orderName1)print("monkey finished.\n")classKillMonkeyThread(Thread):def __init__(self):#线程实例化时立即启动

Thread.__init__(self)

self.start()defrun(self):#杀死进程的两种命令

#1. ps|grep monkey |awk '{print $2}' |xargs kill -9

#2. PID=`ps |grep monkey|awk '{print $2}'`;kill -9 $PID;

self.orderName2 = 'adb shell "ps|grep monkey |awk \'{print $2}\' |xargs kill -9"'excuOrder(self.orderName2)

time.sleep(2)print ("Kill monkey success!")classExportLogThread(Thread):def __init__(self):#线程实例化时立即启动

Thread.__init__(self)

self.start()defrun(self):

self.logo= os.path.isfile('logname.txt')

self.LogNameList=[]if(self.logo):

self.Logname_file= open('logname.txt','r')

self.Lognames=self.Logname_file.readlines()

self.Logname_file.close()for self.Logname inself.Lognames:

self.LogNameList= self.Logname.split("_")

self.LogFileName= self.LogNameList[0] + "_" + self.LogNameList[1]

self.orderName4= "adb pull /sdcard/%s ./MonkeyLog_%s/%s" %(self.Logname,self.LogFileName,self.Logname)

excuOrder(self.orderName4)

time.sleep(5)print (u"Pull %s success!" %self.Logname)

findException("./MonkeyLog_%s/%s" % (self.LogFileName,self.Logname) ,"CRASH")

findException("./MonkeyLog_%s/%s" % (self.LogFileName,self.Logname) ,"Exception")

self.orderName5= "adb pull /data/anr/traces.txt ./MonkeyLog_%s/traces.txt" %self.LogFileName

excuOrder(self.orderName5)print("Export Log Complete.")else:print ("logname.txt is not exist!")classInsertFrame(wx.Frame):def __init__(self,parent,id):

wx.Frame.__init__(self,parent,id,title="Run monkey",

pos=wx.DefaultPosition,

size=wx.DefaultSize,style=wx.DEFAULT_FRAME_STYLE,

name="frame")

panel= wx.Panel(self,-1) #创建画板

#应用包名

PackageLabel = wx.StaticText(panel, -1, "package name:")globalpackageText

packageText= wx.TextCtrl(panel, -1, "",

size=(260,-1))

packageText.SetInsertionPoint(0)#monkey事件之间的间隔时间(ms)

MTLabel = wx.StaticText(panel, -1, "Monkey time:")globalMTText

MTText= wx.TextCtrl(panel, -1, "",

size=(260,-1))#monkey事件总次数

MCLabel = wx.StaticText(panel, -1, "Monkey count:")globalMCText

MCText= wx.TextCtrl(panel, -1, "",

size=(260,-1))globalbutton1#点击按钮运行monkey

button1 = wx.Button(panel,label="Run Monkey") #将按钮添加到画板

#杀死monkey

button2 = wx.Button(panel,label="Kill Monkey") #将按钮添加到画板

#导出日志

button3 = wx.Button(panel,label="Export Log") #将按钮添加到画板

#日志名字:

MonkeyLogName = wx.StaticText(panel, -1, "Monkey logName:")globallogNameST

logNameST= wx.TextCtrl(panel,-1,"",

size=(260,-1))#绑定按钮的单击事件

self.Bind(wx.EVT_BUTTON, self.runMonkey, button1)

self.Bind(wx.EVT_BUTTON, self.killMonkey, button2)

self.Bind(wx.EVT_BUTTON, self.exportLog, button3)#绑定窗口的关闭事件

self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)

sizer= wx.FlexGridSizer(cols=2, hgap=6, vgap=6)

sizer.AddMany([PackageLabel,packageText,MTLabel,MTText,MCLabel,MCText,MonkeyLogName,logNameST,button1,button2,button3])

panel.SetSizer(sizer)defrunMonkey(self, event):

RunMonkeyThread()defkillMonkey(self,event):

KillMonkeyThread()defexportLog(self,event):

ExportLogThread()defOnCloseMe(self, event):

self.Close(True)defOnCloseWindow(self,event):

self.Destroy()classApp(wx.App):def __init__(self,redirect=True, filename=None):

wx.App.__init__(self,redirect,filename)defOnInit(self):print("Program Startup:")

self.frame= InsertFrame(parent=None,id=-1) #创建框架

self.frame.Show()

self.SetTopWindow(self.frame)print(sys.stderr) #输出到stderr

returnTruedefOnExit(self):print("Program running complete.")returnTrueif __name__=="__main__":

app= App(redirect=True) #1.文本重定向从这开始

app.MainLoop()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值