Android自动化测试之Monkeyrunner从零开始(二)
(楼主原创敲字也8容易,如蒙转载,烦请注明出处和作者,谢谢!)
时间过得真快,一晃离第一篇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
补充:移动开发 , Android ,