我不能保证我在这里写下的每一句话都正确,但写在这里的每一句话都包含着我的思考和总结。是对也好,是错也好,希望大家看完后有自己的思考,那就说明您没有白看,我没有白写。探索测试的深度,享受测试的乐趣。

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

上一篇 / 下一篇  2011-08-06 22:24:18 / 个人分类:自动化杂谈

(楼主原创敲字也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做例子多练练,应该还是可以很快入门的。

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

 


TAG: Android Monkeyrunner 自动化

audio0325的个人空间 引用 删除 audio0325   /   2013-08-19 23:47:47
大神,有两个问题想问下,一个是关于运行时传入参数的问题monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>    <program_options>这个参数该如何在我写的py文件里设置呢?可能比较白这个问题;
然后第二个问题就是我用python的第三方库xlwt,import 还是提示没有这个mode 这是为什么啊?求解
audio0325的个人空间 引用 删除 audio0325   /   2013-08-19 23:47:36
5
木沙的个人空间 引用 删除 木沙   /   2012-07-26 16:06:47
5
我的测试人生 引用 删除 qingchunjun   /   2012-06-08 17:20:07
原帖由yellowfish222于2012-06-07 10:45:47发表
monkeyrunner脚本执行失败了怎么继续执行下面的语句

这种情况通常可以通过错误处理来实现,try/catch/finally,并自己定义错误的log,以便事后去检查
引用 删除 yellowfish222   /   2012-06-07 10:45:47
monkeyrunner脚本执行失败了怎么继续执行下面的语句
我的测试人生 引用 删除 qingchunjun   /   2011-09-25 19:08:57
原帖由wingfred于2011-09-15 13:23:47发表
我想请教一下,用Python的PIL库去比对的话,是否只能比对全部?是否有跟原本sameAs同样可以比对多少perc.

PIL库貌似没有直接通过百分比来衡量pass或fail的函数,但我曾经看到有人用python实现一个算法来实现这个功能。建议你google下。
gqy0923的个人空间 引用 删除 gqy0923   /   2011-09-22 08:47:03
5
家有宝贝 引用 删除 msangel   /   2011-09-21 17:15:48
5
wingfred的个人空间 引用 删除 wingfred   /   2011-09-15 13:23:47
我想请教一下,用Python的PIL库去比对的话,是否只能比对全部?是否有跟原本sameAs同样可以比对多少percent相同然后判定pass或是Fail呢?
我的测试人生 引用 删除 qingchunjun   /   2011-08-11 22:42:01
原帖由xiaonian于2011-08-11 18:25:02发表
我可以Import Image和ImageChops,但是在执行difference的时候,报错了:File "D:\Android\android.

这个是PIL常见的一个错误,答案请参阅:http://www.pythonware.com/products/pil/faq.htm
xiaonian的个人空间 引用 删除 xiaonian   /   2011-08-11 18:25:02
我可以Import Image和ImageChops,但是在执行difference的时候,报错了:File "D:\Android\android-sdk-windows\tools\test11.py", line 7, in <module>
    ImageChops.difference(im1, im2)
  File "C:\Python26\Lib\site-packages\PIL\ImageChops.py", line 121, in differenc
e
    image1.load()
  File "C:\Python26\Lib\site-packages\PIL\ImageFile.py", line 164, in load
    self.load_prepare()
  File "C:\Python26\Lib\site-packages\PIL\PngImagePlugin.py", line 381, in load_
prepare
    ImageFile.ImageFile.load_prepare(self)
  File "C:\Python26\Lib\site-packages\PIL\ImageFile.py", line 231, in load_prepa
re
    self.im = Image.core.new(self.mode, self.size)
  File "C:\Python26\Lib\site-packages\PIL\Image.py", line 37, in __getattr__
    raise ImportError("The _imaging C module is not installed")
ImportError: The _imaging C module is not installed
xiaonian的个人空间 引用 删除 xiaonian   /   2011-08-11 18:22:32
5
我的测试人生 引用 删除 qingchunjun   /   2011-08-11 08:20:32
小小地更正一下,如果sys.path.append('C:\\Python25\\Lib\\site-packages\\PIL')这句指定了到PIL这个module的名称,则接下来在import的时候就不能加from PIL了,只能直接import Image。如果sys.path.append('C:\\Python25\\Lib\\site-packages')未指定到PIL,则必须用from PIL import Image来导入。
我的测试人生 引用 删除 qingchunjun   /   2011-08-10 23:52:43
原帖由xiaonian于2011-08-08 18:32:50发表
提示我没有PIL这个module

我自己亲自试了,也查了下相关的资料。在PIL已经正确安装的前提下,在monkeyrunner中提示不能找到PIL库的原因应该是monkeyrunner先在当前路径下寻找这个库,然后在sys.path下去寻找。然后PIL并没有自动在sys.path下去写入路径,所以需要你用代码手工加上(假设我的PIL安装在C:\Python25\Lib\site-packages\PIL):
在你的monkeyrunner要运行的py文件中import Image之前,写下
import sys
sys.path.append('C:\\Python25\\Lib\\site-packages\\PIL')
这句完后你就可以写from PIL import Image了,运行后一切OK,问题解决。
我的测试人生 引用 删除 qingchunjun   /   2011-08-08 23:26:19
原帖由xiaonian于2011-08-08 18:32:50发表
提示我没有PIL这个module

你去PIL的网站http://www.pythonware.com/products/pil/下载你的python版本对应的PIL库的版本,最新版本是1.1.7.安装好之后,再import进来,应该是OK的。
xiaonian的个人空间 引用 删除 xiaonian   /   2011-08-08 18:32:50
提示我没有PIL这个module
xiaonian的个人空间 引用 删除 xiaonian   /   2011-08-08 18:31:58
我用python的PIL库进行图片比较, 可是在monkeyrunner环境下执行from PIL import image 和from PIL import imageChops 都提示我没有module这个模块呀
 

评分:0

我来说两句

qingchunjun

qingchunjun

十年软件测试经验,三年测试项目和团队管理经验,非典型性程序员。注重测试理论体系的研究和测试实际项目的结合。目前专注于移动平台自动化测试项目经验探索和自动化测试平台建设。同时也对python和android较感兴趣,希望和大家一起交流学习。新浪微博@pure0927

日历

« 2021-09-18  
   1234
567891011
12131415161718
19202122232425
2627282930  

数据统计

  • 访问量: 228568
  • 日志数: 16
  • 建立时间: 2011-01-05
  • 更新时间: 2015-01-07

RSS订阅

Open Toolbar