增强型MonkeyRunner 脚本计划
来源:互联网 发布:linux和windows哪个好 编辑:程序博客网 时间:2024/06/01 13:57
- Posts - 95, Articles - 0, Comments - 591
- Cnblogs
- Dashboard
- Login
youxiachaiLUA?PYTHON?R?JAVA?C/C++?JAVASCRIPT?PHP?
增强型MonkeyRunner 脚本计划
2011-11-25 10:02 by youxiachai, 15602 阅读, 15 评论, 收藏, 编辑最近,做android项目测试,测试一个应用程序在多个设备中分辨率是否合适,麻烦得要命,不停的截图比较,前一段时间,研究了一下monkeyrunner ,决定通宵写一个实用性强的monkeyrunner来方便测试使用
前一段时间写的monkeyrunner资料
http://www.cnblogs.com/youxilua/archive/2011/11/12/2246576.html
功能说明:
- 可以自动安装apk到android模拟器或者android实机
- 可以截取设定好activity运行在android模拟器或者android实机上的效果图
- 截图根据设备名和截取时间保存
- 能够自动设别所有运行中的android模拟器或者android实机
- 能够自动安装在特定文件夹下所有的apk文件到android模拟器或者实机
功能实现:
环境配置:
- 设置好android /tootls 和 android /platform-tools 目录的到环境变量中,确保adb命令能够在cmd下正常运行
脚本编写:
该功能需要创建以下几个文件
componentName.txt
使用约定
每一行为需要运行的activity的完整名字
例如:
kg.tom/.HandlerThreadActivity
kg.monkey/.MonkeyActivity
takeSnap.bat
1234567@
echo
off
rem 获取当前运行设备
adb devices > devices.txt
rem 获取APK文件
dir
apk
/B
> apk.txt
rem 运行monkeyrunner 脚本
monkeyrunner work.py
xxxx
核心运行脚本:
1#导入我们需要用到的包和类并且起别名
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071#导入我们需要用到的包和类并且起别名
import
sys,time,datetime
from
com.android.monkeyrunner
import
MonkeyRunner as mr
from
com.android.monkeyrunner
import
MonkeyDevice as md
from
com.android.monkeyrunner
import
MonkeyImage as mi
deviceslist
=
[]
devices
=
[]
snapshot
=
[]
templist
=
[]
f
=
open
(
"devices.txt"
)
while
True
:
line
=
f.readline()
if
line:
templist.append(line.strip())
else
:
break
;
f.close()
templist.pop()
for
i
in
range
(
len
(templist)):
deviceslist.append(templist[i].split(
'\t'
))
fc
=
open
(
"componentName.txt"
)
complist
=
[]
while
True
:
comp
=
fc.readline()
if
comp:
complist.append(comp.strip())
else
:
break
;
fc.close()
fp
=
open
(
"apk.txt"
)
apklist
=
[]
while
True
:
apk
=
fp.readline()
if
apk:
apklist.append(apk.strip())
else
:
break
;
'apk list :'
apklist
'start componentName list :'
complist
'devices list:'
deviceslist
for
i
in
range
(
1
,
len
(deviceslist)):
'current devices:'
deviceslist[i]
devices.append(mr.waitForConnection(
1.0
,deviceslist[i][
0
]))
#安装apk文件
for
j
in
range
(
len
(apklist)):
devices[i
-
1
].installPackage(
'apk/'
+
apklist[j])
#启动activity
for
k
in
range
(
len
(complist)):
'current start activity:'
complist[k]
devices[i
-
1
].startActivity(component
=
complist[k])
#设置延时秒数
mr.sleep(
5.0
)
#----------------
#这里可进行一定的UI操作
#----------------
#mr.sleep(3.0)
#进行截图
snapshot.append(devices[i
-
1
].takeSnapshot())
'end snapshot'
#创建时间字符串
t
=
time.strftime(
"%Y-%m-%d-%X"
,time.localtime())
t
=
t.replace(
":"
,
"-"
)
#保存截图
package
=
complist[k].replace(
'/.'
,
'.'
)
snapshot[
0
].writeToFile(
'takeSnapshot/'
+
deviceslist[i][
0
]
+
'-'
+
t
+
'-'
+
package
+
'.png'
,
'png'
);
snapshot.pop()
1由于之前毫无编写python的经验,只能写成这样了,欢迎高手补充!!!!!!
使用:
把tools文件夹里面的全部文件,同样放在android sdk tools 文件夹下即可,运行takeSnap.bat就可以获取到多个设备运行时的截图了,这个期间…你可以选择去泡一杯咖啡…耗时情况…看你要测试几个设备,还有如何测试了……
效果图:
三个虚拟机,在一台实机,测试两个apk在这些设备的运行境况
以下为全部截图文件:
以后可能会更新的部分和改善的地方
1,支持从外部读取monkeyrunner 脚本进行多设备运行…其实..现在这个也可以…只是没写上
2,同一样设备的截图放置在一样设备名的文件,(这个…其实补充起来也很快…不过,要做完善就要判断设备名与创建文件名是否合法等等,不过…我感觉,将所有截图放到一个文件夹下更方便用来比较,就没写了,有兴趣的自行补充…同时,也顺便贴到这里来吧…)
3,由于,本人的脚步编写功底实在是烂,不知道如何在运行环境中设置环境变量,就不得已要在android sdk tools目录 下运行,如果,觉得这个脚步还可以,希望帮忙完善,能够达到在任意目录下…
4,当设备是离线状态无法判断,不过,在以上的脚本中已经实现了获取设备的状态,只是,很少,碰到就懒得补充了….
5,如果,出现无法连接设备…那么请再运行一遍…如果…还不行…就重启吧…这跟脚本没关系吧…貌似…就是有这种问题…
6,最后,附上下载地址:
http://www.kuaipan.cn/file/id_2622545685699681.html
作者:游戏阿柴
出处:http://www.cnblogs.com/youxilua
本文采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
微博联系:新浪微博
用支付宝赞助博主:http://me.alipay.com/youxilua
» 下一篇:android Handler 机制研究学习笔记
· Google量子计算梦:10年后机器学习全部量子化
· 统计机构:Win10已成为世界第二大操作系统
· 携程去哪儿霸王条款被上海消保委点名批评
· 解密非凡的蚁群算法
· Space X宣布再次推迟猎鹰9号发射时间
» 更多新闻...
· Linux概念架构的理解
· 从涂鸦到发布——理解API的设计过程
· 好的架构是进化来的,不是设计来的
· 被误解的MVC和被神化的MVVM
- 增强型MonkeyRunner 脚本计划
- monkeyrunner 录制脚本
- MonkeyRunner脚本编写
- Monkeyrunner 录制脚本&回放
- monkeyrunner写阴阳师脚本
- monkeyrunner脚本编写
- Monkeyrunner 脚本使用
- monkeyrunner脚本实践
- Android MonkeyRunner脚本编写技巧
- 使用java编写monkeyrunner脚本
- Python脚本运行MonkeyRunner命令
- 维护计划增强
- 【MonkeyRunner】eclipse中编写monkeyrunner脚本环境搭建
- monkeyrunner自动化测试工具--脚本模板及MonkeyRunner常用事件
- 用eclipse调试monkeyrunner的脚本
- MonkeyRunner_用eclipse调试monkeyrunner的脚本
- monkeyRunner的录制和播放脚本
- 根据控件id实现的monkeyrunner脚本
- HAOI2015
- 2015年12月21日,第一个项目彻底收工
- vtkImagePlaneWidget单次交互引发两次EndInteractionEvent
- erlang中的spawn函数
- 111
- 增强型MonkeyRunner 脚本计划
- Longest Common Prefix
- NowCoder猜想
- Android 5.0及更高系统使用AIDL的问题
- 跨平台CMake的编写
- Hadoop Ls命令增加显示条数限制参数
- Java NIO 系列教程
- 人脉是如何积聚的
- C++ 大规模程序设计 之 包
#1楼 龙灬龙 2012-05-18 14:59
#2楼[楼主] youxiachai 2012-05-18 22:12
例子里面不是已经实现了吗?
#3楼 玉玺 2012-06-26 15:53
使用约定
每一行为需要运行的activity的完整名字
例如:
kg.tom/.HandlerThreadActivity
kg.monkey/.MonkeyActivity
高手能解释下“使用约定
每一行为需要运行的activity的完整名字”吗?怎么获得activity的完整名字呢?不懂开发,菜鸟,多谢了!
#4楼[楼主] youxiachai 2012-06-26 15:59
这不是有规律的嘛..
kg.tom->是你的应用的顶级包名
/.HandlerThreadActivity 这个为了运行的activity
斜杆是作为,项目包名的分隔符,可以组合也可以完整的一个名字是
kg.tom/kg.tom.HandlerThreadActivity
#5楼 yinhe625 2012-08-30 16:30
#6楼 jyzhai_cnblogs 2013-01-10 19:02
zhaijiayu2007@sina.com
#7楼 狂拽酷 2014-07-02 15:08
#8楼 狂拽酷 2014-07-08 11:38
#9楼[楼主] youxiachai 2014-07-08 11:40
其实现在 testin 这样的真机测试服务...也支持脚本测试了...没必要再去折腾这个了吧??
这文是我 3年前写的..3年后看来..android官方对这个工具的支持其实并没有那么好...
#10楼 狂拽酷 2014-07-31 15:19
主要是最近公司让学习自动化测试方面的知识,我也是比较迷茫,不知道该如何入手。最近稍微学习了一下monkeyrunner的使用,但是感觉遇到好些问题,比如有的apk利用monkeyrunner无法安装到手机,老是报错说error during sync:local path doesn't exist。想向您请教一下,如果做安卓自动化测试,有些哪些方向可以选择呢?谢谢了!
#11楼[楼主] youxiachai 2014-07-31 15:21
testin 现在支持脚本测试了.....要做大的话...还是找一些服务商吧..
这文章都写了好几年了...还能有人回复..
#12楼 狂拽酷 2014-07-31 16:17
就是想自己开发一些小工具,但是现在比较迷茫,没有一个明确的方向,没有明确的要做的东西。
#13楼 chenTears 2015-10-14 11:27
#14楼[楼主] youxiachai 2015-10-14 11:34
4 年前的坑...我原作者都没备份了..
#15楼 chenTears 2015-10-14 13:29
啊啊啊啊啊啊~~~ 眼泪哗哗的啊~ 哈哈哈 不过还是谢谢哈~