增强型MonkeyRunner 脚本计划

来源:互联网 发布:linux和windows哪个好 编辑:程序博客网 时间:2024/06/01 13:57
分享到...
复制网址邮件QQ空间新浪微博腾讯微博微信人人网易信网易微博搜狐微博QQ好友开心网飞信豆瓣一键分享查看更多(122)
这是什么工具?
JiaThis
代码改变世界
  • Posts - 95, Articles - 0, Comments - 591 
  • Cnblogs 
  • Dashboard 
  • Login

增强型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

功能说明:

  1. 可以自动安装apk到android模拟器或者android实机
  2. 可以截取设定好activity运行在android模拟器或者android实机上的效果图
  3. 截图根据设备名和截取时间保存
  4. 能够自动设别所有运行中的android模拟器或者android实机
  5. 能够自动安装在特定文件夹下所有的apk文件到android模拟器或者实机

功能实现:

环境配置:

  • 设置好android /tootls 和 android /platform-tools 目录的到环境变量中,确保adb命令能够在cmd下正常运行

脚本编写:

该功能需要创建以下几个文件

300x110_MarkMan

componentName.txt

使用约定

每一行为需要运行的activity的完整名字

例如:

kg.tom/.HandlerThreadActivity 
kg.monkey/.MonkeyActivity

 

 

takeSnap.bat
1
2
3
4
5
6
7
@echo off
rem 获取当前运行设备
adb devices > devices.txt
rem 获取APK文件
dir apk/B > apk.txt
rem 运行monkeyrunner 脚本
monkeyrunner work.py

xxxx

核心运行脚本:

1
#导入我们需要用到的包和类并且起别名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#导入我们需要用到的包和类并且起别名
import sys,time,datetime
from com.android.monkeyrunnerimport MonkeyRunner as mr
from com.android.monkeyrunnerimport MonkeyDevice as md
from com.android.monkeyrunnerimport 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 iin 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;
print 'apk list :'
print apklist
print 'start componentName list :'
print complist
print 'devices list:'
print deviceslist
for iin range(1,len(deviceslist)):
    print 'current devices:'
    print deviceslist[i]
    devices.append(mr.waitForConnection(1.0,deviceslist[i][0]))
    #安装apk文件
    for jin range(len(apklist)):
        devices[i-1].installPackage('apk/'+apklist[j])
    #启动activity
    for kin range(len(complist)):
        print 'current start activity:'
        print complist[k]
        devices[i-1].startActivity(component=complist[k])
        #设置延时秒数
        mr.sleep(5.0)
        #----------------
        #这里可进行一定的UI操作
        #----------------
        #mr.sleep(3.0)
        #进行截图
        snapshot.append(devices[i-1].takeSnapshot())
        print '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在这些设备的运行境况

image

以下为全部截图文件:

image

 

 

以后可能会更新的部分和改善的地方

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

youxiachai
关注 - 24
粉丝 - 212
+加关注
0
0
(请您对文章做出评价)
« 上一篇:Eclipse SVN 下 小图标详解!!!
» 下一篇:android Handler 机制研究学习笔记
ADD YOUR COMMENT

  1. #1楼 龙灬龙  2012-05-18 14:59
    楼主,能教下截图并用当前时间命名保存的方法吗?谢谢
    支持(0)反对(0)
  2. #2楼[楼主] youxiachai  2012-05-18 22:12
    @龙灬龙
    例子里面不是已经实现了吗?
    支持(0)反对(0)
  3. #3楼 玉玺  2012-06-26 15:53
    componentName.txt
    使用约定
    每一行为需要运行的activity的完整名字
    例如:
    kg.tom/.HandlerThreadActivity 
    kg.monkey/.MonkeyActivity
    高手能解释下“使用约定
    每一行为需要运行的activity的完整名字”吗?怎么获得activity的完整名字呢?不懂开发,菜鸟,多谢了!
    支持(0)反对(0)
  4. #4楼[楼主] youxiachai  2012-06-26 15:59
    @玉玺
    这不是有规律的嘛..
    kg.tom->是你的应用的顶级包名


    /.HandlerThreadActivity 这个为了运行的activity

    斜杆是作为,项目包名的分隔符,可以组合也可以完整的一个名字是
    kg.tom/kg.tom.HandlerThreadActivity
    支持(0)反对(0)
  5. #5楼 yinhe625  2012-08-30 16:30
    楼主,我下载了你的文件来测试,还是不能在多台设备上安装apk阿,只能在最先连接的那台设备上装,请问这是为什么呢?感谢Q414602238
    支持(1)反对(0)
  6. #6楼 jyzhai_cnblogs  2013-01-10 19:02
    文件下不了了,哪位好心人能邮件给下不?万分感谢!
    zhaijiayu2007@sina.com
    支持(0)反对(0)
  7. #7楼 狂拽酷  2014-07-02 15:08
    请问lz你在当前路径下能运行吗?貌似只能把脚本文件放到monkeyrunner的路径下面或者脚本名用全路径!如果我的那些脚本跟文件放在桌面上的一个文件里面,那么我该怎么运行呢?
    支持(0)反对(0)
  8. #8楼 狂拽酷  2014-07-08 11:38
    5楼说的问题我也遇到了,只能连接第一台模拟器,后面的都连接不上了。
    支持(0)反对(0)
  9. #9楼[楼主] youxiachai  2014-07-08 11:40
    @狂拽酷

    其实现在 testin 这样的真机测试服务...也支持脚本测试了...没必要再去折腾这个了吧??

    这文是我 3年前写的..3年后看来..android官方对这个工具的支持其实并没有那么好...
    支持(0)反对(0)
  10. #10楼 狂拽酷  2014-07-31 15:19
    @youxiachai
    主要是最近公司让学习自动化测试方面的知识,我也是比较迷茫,不知道该如何入手。最近稍微学习了一下monkeyrunner的使用,但是感觉遇到好些问题,比如有的apk利用monkeyrunner无法安装到手机,老是报错说error during sync:local path doesn't exist。想向您请教一下,如果做安卓自动化测试,有些哪些方向可以选择呢?谢谢了!
    支持(0)反对(0)
  11. #11楼[楼主] youxiachai  2014-07-31 15:21
    @狂拽酷
    testin 现在支持脚本测试了.....要做大的话...还是找一些服务商吧..

    这文章都写了好几年了...还能有人回复..
    支持(0)反对(0)
  12. #12楼 狂拽酷  2014-07-31 16:17
    @youxiachai
    就是想自己开发一些小工具,但是现在比较迷茫,没有一个明确的方向,没有明确的要做的东西。
    支持(0)反对(0)
  13. #13楼 chenTears  2015-10-14 11:27
    下载链接打不开,提示说在维护,还有哪能下载,@youxiachai
    支持(0)反对(0)
  14. #14楼[楼主] youxiachai  2015-10-14 11:34
    @chenTears
    4 年前的坑...我原作者都没备份了..
    支持(0)反对(0)
  15. #15楼 chenTears  2015-10-14 13:29
    @youxiachai
    啊啊啊啊啊啊~~~ 眼泪哗哗的啊~ 哈哈哈 不过还是谢谢哈~
    支持(0)反对(0)
刷新评论刷新页面返回顶部
最新IT新闻:
· Google量子计算梦:10年后机器学习全部量子化
· 统计机构:Win10已成为世界第二大操作系统
· 携程去哪儿霸王条款被上海消保委点名批评
· 解密非凡的蚁群算法
· Space X宣布再次推迟猎鹰9号发射时间
» 更多新闻...
最新知识库文章:
· 软件开发的核心
· Linux概念架构的理解
· 从涂鸦到发布——理解API的设计过程
· 好的架构是进化来的,不是设计来的
· 被误解的MVC和被神化的MVVM
» 更多知识库文章...
0 0