Python+Monkey实现App的Monkey测试
目标:
使用monkey对当前windows电脑连接的一个或者多个手机设备,完成对某个app的monkey测试,输出monkey日志以及monkey脚本。
思路:
1.通过terminal交互控制台,获取测试的app以及可以测试的设备。
2.将获取的参数和固定的monkey脚本1结合,创建测试目录、测试脚本。
3.执行脚本,同时输出结果,完成测试。
具体实现:
1.terminal的交互
def GetDeviceAndPackage(self):
"""获取当前连接的设备信息"""
# 具有清屏功能
os.system("cls")
# 执行系统命令并返回执行后的结果
rt = os.popen('adb devices').readlines()
n = len(rt) - 2
print("当前已连接待测手机数为:" + str(n))
print("monkey测试即将开始......")
self.count = input("请输入你要进行的monkey测试次数:")
self.testmodel = input("请输入你是要进行单次测试还是多次连续测试,请输入(1-代表单次测试,2-代表多次连续测试):")
ds = []
for i in range(n):
nPos = rt[i + 1].index("\t")
ds.append(rt[i + 1][:nPos])
self.dev = ds[i]
# 获取系统版本
cmd_s = 'adb -s {} shell getprop ro.build.version.release'.format(self.dev)
release = os.popen(cmd_s).readline().replace('\n', '')
# 获取手机型号
cmd_s = 'adb -s {} shell getprop ro.product.model'.format(self.dev)
self.model = os.popen(cmd_s).readline().replace('\n', '')
# 手机厂商
cmd_s = 'adb -s {} shell getprop ro.product.brand'.format(self.dev)
brand = os.popen(cmd_s).readline().replace('\n', '')
# 查找测试的app
cmd_s = 'adb -s {} shell pm list packages | find "{}"'.format(self.dev, self.app_name)
self.packagename = os.popen(cmd_s).readline().replace('\n', '')
if self.packagename is None:
# 手机未安装
print(' {} is not installed in {}.'.format(self.app_name, self.model))
break
else:
self.packagename = self.packagename.split(':')[-1]
print(self.packagename)
2.完成测试目录、测试脚本的创建
def CreateMonkeyFile(self):
"""生成monkey脚本"""
# 测试记录存放位置
filedir = os.path.exists(self.path)
if filedir:
# print ("File Exist!")
pass
else:
os.mkdir(self.path)
self.path_app = self.path + '\\' + self.app_name
filedir = os.path.exists(self.path_app)
if filedir:
# print("File Exist!")
pass
else:
os.mkdir(self.path_app)
# 按设备ID生成日志目录文件夹
path_device = self.path_app + '\\' + self.app_name + '-' + self.model
devicedir = os.path.exists(path_device)
if devicedir:
# print ("File exist!")
pass
else:
os.mkdir(path_device)
file_cmd = self.path_app + '\\' + self.model + '-logcat' + '.cmd'
wl = open(file_cmd, 'w')
wl.write(
'adb -s ' + self.dev + ' logcat -v time *:W > ' + path_device + '\\logcat_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.txt\n')
wl.close()
# monkey脚本文件
file_cmd = self.path_app + '\\' + self.model + '.cmd'
# 通用monkey命令
# 指定系统事件百分比
syskeys = 0
# 调整触摸事件的百分比
touch = 50
# 调整动作事件的百分比
motion = 40
# 指定Activity启动的百分比
appswitch = 0
# 指定其他事件的百分比
anyevent = 5
# 导航事件 up/down/left/right的百分比
nav = 5
# 在事件之间插入特定的延时时间
throttle = 300
cmd_s = 'adb -s {} shell monkey -p {} --monitor-native-crashes --ignore-crashes --pct-syskeys {} --pct-touch {} --pct-appswitch {} --pct-anyevent {} --pct-nav {} --pct-motion {} --throttle {} -s %random% -v {} > {}\\monkey_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.txt\n'.format(
self.dev, self.packagename, syskeys, touch, appswitch, anyevent, nav, motion, throttle, self.count,
path_device)
if self.testmodel == '1':
wd = open(file_cmd, 'w')
wd.write(cmd_s)
wd.write('@echo 测试成功完成,请查看日志文件~')
wd.close()
elif self.testmodel == '2':
wd = open(file_cmd, 'w')
wd.write(':loop')
wd.write('\nset /a num+=1')
wd.write('\nif "%num%"=="4" goto end')
wd.write('\n' + cmd_s)
wd.write('@echo 测试成功完成,请查看日志文件~')
wd.write('\nadb -s ' + self.dev + ' shell am force-stop ' + self.packagename)
wd.write('\n@ping -n 15 127.0.0.1 >nul')
wd.write('\ngoto loop')
wd.write('\n:end')
wd.close()
3.测试脚本的执行
def RunMonkey(self):
for file in os.listdir(self.path_app):
if os.path.isfile(os.path.join(self.path_app, file)) == True:
if file.find('.cmd') > 0:
os.system('start ' + os.path.join(self.path_app, '"' + file + '"')) # dos命令中文件名如果有空格,需加上双引号
time.sleep(1)
实现效果:
terminal的交互:
脚本执行:
日志输出:
注:如果有特定的monkey参数要求,可以调节一下设置,实现monkey脚本的变动
# 指定系统事件百分比
syskeys = 0
# 调整触摸事件的百分比
touch = 50
# 调整动作事件的百分比
motion = 40
# 指定Activity启动的百分比
appswitch = 0
# 指定其他事件的百分比
anyevent = 5
# 导航事件 up/down/left/right的百分比
nav = 5
# 在事件之间插入特定的延时时间
版权声明:本文为qq_17328759原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_17328759/article/details/109612500
金鳞岂是池中物,一遇风云便化龙。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂