2 a455642158 a455642158 于 2013.01.10 15:24 提问

monkeyrunner脚本运行一段时间后,与pc连接会有一些问题导致脚本异常该怎么办

脚本运行一段时间(尽可能长)只要与pc连接出现问题,例如设备offline了,那么monkeyrunner源码里的一些方法的那些异常都会报出来,如果我们的脚本里没有捕获这些异常,那么就会层层抛出直至脚本崩溃。目前还不会捕捉这些异常,希望有人解决过类似问题,帮我一把……谢谢。
目前报过的异常有:TimeoutException、AdbCommandRejectedException、Error sending touch event、Error sending press event等等,感觉都是连接有问题导致这些方法调用不了,抛出了源码里的那些方法对应的异常。
现在就想捕获异常,有异常就重启手机,重启后重新运行脚本,可是reboot重启手机的这个方法也是需要连接有效才能正常使用的,愁死人了。
还有一种情况就是脚本运行了很久后不动了,也没报异常,死活不往下运行了……

1个回答

cytown
cytown   2013.01.10 17:44
已采纳

换手机,不要用一些不稳定的手机。正常手机不会运行monkey的时候突然offline的。

是monkeyrunner,就是模拟真实手机用户点击应用的操作,每个内容到最后一步截图保存,有异常也截图保存,大概每次跑完有上千张图。然后重复……

如果是这样,我就有点明白了,问题可能存在于截图上,截图是很耗费usb带宽的行为,而且截图本身并没有被系统特别严格压力测试过,在同时和mr运行的时候会导致adb的一些冲突,导致timeout或者中断的结果,我建议你这样做,理论上可以解决:
1. 在每次循环运行完成后执行adb kill-service;adb start-service,这样重启adb连接
2. 如果1不管用,就尽量缩减截图的次数,一点点缩减,直到稳定运行

a455642158
a455642158 这个情况脚本不能运行没办法重启手机了,我试了命令行重启adb,进程关掉adb,eclipse重启adb,还不想拔掉数据线,看来是没办法了,这问题弄不了了,去做配置文件了,操作基本上都没问题了……
5 年多之前 回复
a455642158
a455642158 不管重启adb前是什么操作,如果要考虑重启adb之前就不正常了该怎么做呢……?现在还有一个老问题困扰就是脚本停在某一步了,不报错不退出,关了该脚本也不能执行其他脚本(有信息: could not read ok from ADB Server, error = 109, * failed to start daemon *),这是什么情况啊……
5 年多之前 回复
a455642158
a455642158 里面有很多小循环啊,小循环时间不定有几分钟的、几十秒的……直接点就是一个栏目有多个列表,每个列表点击后又有多个内容,对每个内容操作后截图,每个步骤的操作都会判断好多情况导致截一次图要花几分钟。
5 年多之前 回复
cytown
cytown 我是说你一个循环需要多久,难道需要4-5小时????如果那样,你的MR脚本应该缩减。
5 年多之前 回复
a455642158
a455642158 一般能运行四到五个小时,按照比例来看运行一次这还只运行了四分之一,现在是这样异常退出就重启,目前这样做脚本是一直都在跑,还没做好写配置文件接着失败的地方开始……
5 年多之前 回复
cytown
cytown 整个运行需要多久?
5 年多之前 回复
a455642158
a455642158 最外层的大循环就是整个运行,里面的小循环是可以完成的……
5 年多之前 回复
a455642158
a455642158 我这里两部使用的我写的脚本,测试那边用的以前的脚本我知道的他们用了至少3台,长时间的跑都会出现这种异常退出的情况,还没看到处理异常的monkeyrunner脚本,不知道我这样做合不合理啊……
5 年多之前 回复
cytown
cytown 如果你的系统连一次正常循环都不能完成,就只能换系统了。如果可以,就每次循环结束后重启手机。当然如果中间出现exception,当然就是要解决exception,而不是忽略。
5 年多之前 回复
a455642158
a455642158 现在在做用日志保存最后一步,这样重启手机后接着失败的那一步运行,不用重头开始跑,这个做好后,如果实在是检测不到停止不动的状态我就隔几个小时就重启……想法是美好的啊,其中有一个如果失误操作也会导致错误的一直运行下去的情况。
5 年多之前 回复
a455642158
a455642158 有点明白您的意思了,比如最坏情况截一次图我就重启adb,如果这样都出现了异常就没办法了是吧,要是重启adb之前就出现了异常该怎么办呢……?
5 年多之前 回复
a455642158
a455642158 也就是说这个循环没完成就异常了啊……
5 年多之前 回复
a455642158
a455642158 ?不知道什么时候会出现AdbCommandRejectedException啊……
5 年多之前 回复
cytown
cytown 每次循环后执行不会有问题,你的问题是在于并不强制执行,而是出现AdbCommandRejectedException才想起去执行,当然不对了。
5 年多之前 回复
a455642158
a455642158 也就是有时候offline了,执行这些命令adb kill-service;adb start-service或者adb kill-service;adb devices后仍然是offline,没办法只能重启手机或者试试拔掉数据线重新插上看看行不行,目前为止重启手机是一定行的……
5 年多之前 回复
cytown
cytown 每次循环后执行不会有问题,你的问题是在于并不强制执行,而是出现AdbCommandRejectedException才想起去执行,当然不对了。
5 年多之前 回复
a455642158
a455642158 如果是AdbCommandRejectedException异常,执行adb kill-service;adb start-service后,设备连接状态仍然是offline,脚本停止不运行的情况然后关掉该脚本,执行其他脚本也执行不了,只能拔掉数据线重新插上或者关机重启,现在程序不能拔掉数据线了希望能够检测到这种脚本停止不动不运行也不异常退出的情况然后重启手机再运行脚本。现在我已经把整个运行部分都try起来了只要有异常导致脚本退出,都不会导致脚本退出而是做重启手机处理,除非电脑重启了……汗
5 年多之前 回复
cytown
cytown 在每次循环运行完成后执行adb kill-service;adb start-service,这样重启adb连接
5 年多之前 回复
a455642158
a455642158 汗啊,要求是不停的跑,不停的截图,不让脚本退出,现在这种如果有异常要退出脚本的情况可以捕获到然后重启手机这么个笨方法。还有个问题解决不了就是脚本停住不动了,不报错,也不退出运行,关掉后,再执行其他脚本也执行不了,感觉就是被什么堵住了一样,这个目前没有想到怎么检测到,望告知……
5 年多之前 回复
cytown
cytown 你们做MR的目的不就是保证exception出来,然后你们好解决这些问题么?都忽略了MR的意义何在?而且重启的时候出现异常,当然你们要解决这个bug啊,而不是改MR的脚本让应用继续执行。
5 年多之前 回复
a455642158
a455642158 现在基本上解决了 把以前运行的那段放到try里面 有异常脚本也不会异常退出 然后做重启手机处理 但是现在又出现个问题 重启的时候出了异常没捕获 希望能够尽快解决……
5 年多之前 回复
suannai0314
suannai0314 这是回我的?
5 年多之前 回复
a455642158
a455642158 不是一样的提示,异常我在问题里写了一部分:TimeoutException、AdbCommandRejectedException、Error sending touch event、Error sending press event等等。
5 年多之前 回复
a455642158
a455642158 是monkeyrunner,就是模拟真实手机用户点击应用的操作,每个内容到最后一步截图保存,有异常也截图保存,大概每次跑完有上千张图。然后重复……
5 年多之前 回复
cytown
cytown 而如果是monkey runner,你们应该是做了几个脚本,这些脚本应该是有个执行周期的时间长度,并且有测试次数,不可能是无限循环下去跑,首先并不符合任何用户的使用习惯,也不可能真实测试出你们应用的问题,更是完全没必要的浪费时间。最终结果也只是能测试出你们测试手机的稳定性如何,没有其它效果。
5 年多之前 回复
cytown
cytown 是这样的,如果你是monkey test,通常我们测试的是通过的条数,比如10万,100万,会有一个值,如果能跑到这么多并且没有错误就认为通过测试了。
5 年多之前 回复
suannai0314
suannai0314 所有手机都是一样的错误提示?
5 年多之前 回复
a455642158
a455642158 没有,不可能公司那么多手机都是不正常的吧,都是测试部门用的测试手机呢……
5 年多之前 回复
suannai0314
suannai0314 这个问题解决了?可以给他采纳哦~回答旁边有个带圆圈的对号,点击有惊喜~
5 年多之前 回复
a455642158
a455642158 感谢!!!按道理说没有哪部手机可以不停的跑吧,公司的手机都是这样最长跑了一天一夜的,一般也能跑个几个小时就出现和中异常,也不一定是offline哈……现在就是出现异常后,怎样保证脚本能继续运行下去,暂时只想到重启手机再重新跑,还不知道做不做得好呢。
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
MonkeyRunner运行Python脚本遇到的问题
在Python中直接运行脚本,报错:ImportError: No module named 'com'    不能再Python中运行MonkeyRunner脚本,因为Python解析器并不识别MonkeyRunner的api。直接在命令行中运行脚本:monkeyrunnerE:\test.py使用命令行可以运行,但是编写python脚本后,使用monkeyrunner E:\t...
真机上运行monkeyrunner python脚本踩坑系列二
之前搞monkeyrunner的时候,尝试过使用AndroidViewClient,但是一直没配好环境。 这两天有空恰好朋友也在弄,又捡起来。 才发现之前网上查到的用monkeyrunner 跑androidviewclient完全没必要。androidviewclient已经完全独立了,相当于可以python直接运行,它的包里面也有封装得很好的可以直接操作真机的函数。通过文本、id等都可以操
真机上运行monkeyrunner python脚本踩坑系列一
monkeyrunner工具提供了一个API,可以控制Android设备和模拟器。通过monkeyrunner,可以写python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图传送回来。 使用monkeyrunner命令运行脚本时,脚本最好也建在tools目录下。 MonkeyDevice目前操作是根据坐标,EasyMonkeyDevic
MonkeyRunner 录制和播放脚本,及碰到的一些问题整理
MonkeyRunner 录制和播放脚本,及碰到的一些问题整理 自己的SDK位置:比如d:\android_sdk_windows,下文都当做$SDK 1.$SDK\tools下面如果没有monkeyrunner可能是因为SDK版本过低。最好升级到2.3 2.$SDK\tools\lib一定要存在。 3.系统的环境变量里面一定要指向$SDK\tools 4.建议下载eclipse ,
Python脚本运行MonkeyRunner命令
Monkey命令的作用是什么就不解释了,与此有个类似的工具,MonkeyRunner是Android SDK自带的,在Android_sdk\tools目录下.利用该工具可以自己利用Python脚本来编写一些自动化的事情。比如:打开一个APP,并且输入账号,密码登录该APP 一.环境搭建 1.JDK 2.Android SDK 3.Python 二.利用cmd命令直接运行MonkeyRu
执行多个monkeyrunner脚本-批处理
上一篇学习了如何使用monkeyrunner,那么怎么才能让一个脚本执行多次了,反复的执行,上网搜索学习了一下,在此做一个记录。 想想其实想要一个monkeyrunner录制的脚本执行多次,这个和QTP、LR的操作方式有些不同,QTP、LR里其实就是设置参数,但是monkeyrunner不行呀,没有可以设置脚本跑多少遍的地方哟,反正我还没找到。 想要一个monkeyrunner录制的脚本跑多遍
monkeyrunner脚本的编写、运行和常用api简介
新手发一篇关于android 轻量级自动化测试工具monkeyrunner,在公司业余时间老大叫自行研究的成果,周末空闲时间重温并整理出来。希望对我,对大家都有帮助
MonkeyRunner脚本编写
1.      MonkeyRunner使用python脚本语言编写 2.      举例描述一下脚本编写 # -*-coding:utf-8 -*-     (允许注释使用中文,便于添加注释,#号标记此行为注释行) from com.android.monkeyrunner importMonkeyRunner, MonkeyDevice, MonkeyImage (调用MonkeyR
monkeyrunner.bat运行python脚本/命令行
monkeyrunner.bat运行python脚本/命令行   使用命令行和python连接monkeyrunner: 命令行连接monkeyrunner测试: 1.打开android的模拟器,或将android手机连接到电脑 2.运行monkeyrunner.bat,接下来就可以在打开的命令行窗口中输入命令。 导入monkeyrunner使
monkeyrunner详细介绍以及编写简单的python脚本
MonkeyRunner工具是使用Jython(使用Java编程语言实现的Python)写出来的,它提供了多个API,通过monkeyrunner API 可以写一个Python的程序来模拟操作控制Android设备app,测试其稳定性并通过截屏可以方便地记录出现的问题。