通过MonkeyRunner遍历apk文件夹里的apk文件,实现自动安装应用,打开应用,截图,将截图与提前准备好的基线图做对比,对比相似度达到90%时,则对比通过,然后自动卸载应用,进入下一个APK文件的对比流程。当对比失败时,将自动停止测
#!/usr/bin/env monkeyrunner # -*- coding: utf-8 -*- import time import sys import os from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage #设置应用包名和入口Activity名 pakageName = 'com.hujiang.cctalk' componentName = 'com.hujiang.cctalk/.MainActivity' #APP启动时等待时间(秒) startTime = 5 #获取年月日时分秒 now = time.strftime("%Y-%m-%d-%H-%M-%S") #python中获取当前运行的文件的名字 name=sys.argv[0].split("\") filename=name[len(name)-1] #MonkeyRunner下获取运行的文件所在的路径 rootpath = os.path.split(os.path.realpath(sys.argv[0]))[0] #指定位置 dir = rootpath + "/apk/" screenPath = rootpath + "/screenShot/" logpath = rootpath + "/log/" #获取待测APK个数 countPak = len(os.listdir(dir)) #新建一个Log文件 if not os.path.isdir(logpath): os.mkdir(logpath) log = open( logpath + filename[0:-3] + "-log" +now + ".txt" , 'w') #开始连接设备 print("Connecting...") device = MonkeyRunner.waitForConnection() log.write("连接设备... ") #卸载应用 print('Removing...') device.removePackage(pakageName) print ('Remove Successful!') MonkeyRunner.sleep(2) log.write("初始化应用环境... ") countOK = 0 countNO = 0 for i in os.listdir(dir): print('Installing...<%s>'%i) log.write("==========安装应用========== ") path = dir + '//' + i #安装应用 device.installPackage(path) print('Install Successful!') #打开应用 device.startActivity(component=componentName) MonkeyRunner.sleep(startTime) log.write("启动App... ") #截图 result=device.takeSnapshot() print("Take ScreenShot...") #保存截图 result.writeToFile(screenPath + i + '.png','png') #进行图片比较 resultTrue=MonkeyRunner.loadImageFromFile(screenPath + r'basePic.png') print "Pic Comparing..." log.write("对比图片中... ") if(result.sameAs(resultTrue,0.9)): print("%s is OK!"%i) log.write("比较通过!--%s--包可用! "%i) #卸载应用 print('Removing...') log.write("初始化应用环境,移除中... ") device.removePackage(pakageName) print ('Remove Successful!') log.write("==========移除完毕========== ") countOK += 1 MonkeyRunner.sleep(2) else: print("False!Please check %s!"%i) log.write("比较失败!请检查安装包--%s--是否可用! "%i) break log.write("共测试 %s 个包,%d 个通过。"%(countPak,countOK))