Android自动化测试之Monkeyrunner从零开始(二)

发表于:2011-8-12 10:24

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:qingchunjun    来源:51Testing软件测试博客

  时间过得真快,一晃离第一篇Monkeyrunner的日志已经快三个月了。虽然在这段时间里没怎么研究Monkeyrunner,但看到众多致力于Monkeyrunner的小盆友们对此话题如此沉醉,忍不住冲动再次提笔,想把自己知道一些东西跟大家再做一些分享,毕竟网上对此工具的资料少之又少,任何可用的一点资料可能对于有些童鞋来说都是一点点希望之光,呵呵。当然,我也希望自己的拙作能够起到抛砖引玉的效果,大家共同进步!

  好了,闲话少说,今天我们讨论点什么呢?其实想想自己对Monkeyrunner的了解也不太深入,实在找不到太多东西给大家分享,那就还是从上一篇帖子中一些回复提到的问题说起吧。很多童鞋都问我,网上有没有什么比较好的Monkeyrunner的教程?我的回答是:没有。至少我找了很久都没有找到比较好的。信不信由你,反正我是信了幸好,毛主席早就告诉我们:自己动手,丰衣足食,网上没有,自己研究呗。其实Monkeyrunner自身是带有帮助手册的,里面有所有API的说明,可以输出为HTML或者TXT格式的文档。这对于我们学习来说,已经足够了。可是,这个帮助文档在哪呢?根据Android developer网站上的说明,我们可以用这个命令来生成API reference手册:

monkeyrunner<format>help.py<outfile>

  其中,format可以是HTML和TXT。outfile就是咱们输出文档的路径。OK,说做咱就做,比如我们运行 monkeyrunner html help.py "mrapi.html",回车。咦,报错了?Can't open sepcified script. 不对啊,这照着做也出错,这不坑die吗?是的,这次google似乎是估计留了个陷阱在这。在monkeyrunner的路径里面确实找不到help.py这个文件,不报错那就是SDK有错了。那该肿么办呢?我们可以看看monkeyrunner的源码,在Monkeyrunner.java中,可以看到静态的help方法可以生成所有帮助的字符串,那么可不可以利用这个方法来生成API帮助文档呢?实践证明是可以的。代码很简单,如下:

  from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice

  content = MonkeyRunner.help("text");

  f = open('help.txt', 'w');

  f.write(content);

  f.close();

  如果要生成html的话,替换第二行的参数为html,并将第三行的help.txt改为html即可。完毕后,我们可以保存为help.py文件(为方便起见我们最好将该文件放到monkeyrunner.bat同一目录)。然后我们直接运行 monkeyrunner help.py,等待2,3秒钟,OK,运行完毕,help.txt是不是已经在你眼前了?呵呵,好好看看吧,所有API函数都在里面了。其实大家如果不想生成文档,想看在线的,也是可以的,android developer上都有,个人所爱吧。

  另外还有一个问题是,有童鞋使用MonkeyImage的sameAs方法老是出错,我自己试了试,确实要出错,错误提示是:不能将IChimpImage对象转换为IMonkeyImage对象时要出错。再次查看源码,MonkeyImage.java中的sameAs函数有这么一个注释:// TODO: check if thisconversion works

  IChimpImage ther = (IChimpImage) otherObject.__tojava__(IChimpImage.class);

  看来明显google的工程师还没有验证过这个转换的正确性,并且很杯具地失败了。哎,真是天意弄人。幸好,有万能的python在,我们还是有办法滴。建议大家使用python的PIL库进行图片比较,一样可以达到非常好的效果并且要稳定很多。

  还有一个常见的问题是模拟按键时的press方法,比如我们要模拟按一下向下键,本来可以这样写:device.press('KEYCODE_DPAD_DOWN', 'DOWN_AND_UP')但大家会发现要报错,并且是很奇怪的错: TypeError: press: The 3rd argument is required. 咋会这样呢?再看看MonkeyDevice的源码,原来DOWN_AND_UP是MonkeyDevice的静态字符串成员,应该是可以直接调用的。我们再换成 device.press('KEYCODE_DPAD_DOWN', MonkeyDevice.DOWN_AND_UP)

  这下终于OK了,呵呵。

  还有一个常见的问题是,能否将monkeyrunner集成到eclipse中?答案是看你使用什么平台。如果是linux环境下,那没问题,完全可以,具体操作可以看看国外有个高手写的博客,需翻墙:http://dtmilano.blogspot.com/2011/03/using-android-monkeyrunner-from-eclipse.html但如果你是用的window环境,那情况似乎就没有那么乐观了。因为google没有提供在windows环境下用于eclipse的monkeyrunner解释器,所以...基本上是8可能配置的,除非哪个高手将这个解释器做出来,呵呵。还是辛苦点,手写吧,也有利于真正锻炼大家的编程能力。

  Monkeyrunner是基于python的脚本自动化工具,虽然有一定的局限性,不过使用起来确实入门门槛较低,大家看看帮助,自己利用ApiDemos的example做例子多练练,应该还是可以很快入门的。

  今天就先写到这里,大家在实际使用过程中有问题可以留言一起讨论讨论,共同进步!

版权声明:本文出自 qingchunjun 的51Testing软件测试博客:http://www.51testing.com/?22381

原创作品,转载时请务必以超链接形式标明本文原始出处、作者信息和本声明,否则将追究法律责任。

相关链接:

Android自动化测试之Monkeyrunner从零开始

《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • carywang
    2013-11-25 18:01:51

    用sdk\build-tools下的aapt工具来查看
    希望能帮到您

  • 祁晓晓
    2011-11-16 16:46:12

    大神,我想请教下文章中的:
    启动其中的任意activity了,只要传入package和activity名称即可。命令如下:
    device.startActivity(component = "com.example.android.apis/com.example.android.apis.ApiDemos")
    我想启动我自己安装的apk的话怎么知道package和activity名称?
    不胜感激~~~~~~~~~~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号