51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4923|回复: 3
打印 上一主题 下一主题

关于monkey runner连接android模拟器的问题,谢谢

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-7-11 10:05:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在网上看了下使用monkey runner的步骤教程

都极不详细啊,在没人指导的情况下搞了很久还是弄不明白,现在这里求助各位大大,我看的步骤如下

1,安装好eclipse,python,sdk等,这一步没有问题
2,准备好测试例子(应该是需要工程源文件和apk文件吧,按教程,准备好sdk下sample下的ApiDemos;以及生成的ApiDemos.apk)
3,打开模拟器,(我的做法是在eclipse里面,打开ApiDemos这个项目,然后run as in andriod application,那么可以看到模拟器运行以来了)
   现在疑问问题就在这里了,就这样打开模拟器就行了吗,monkey runner怎么知道我打开的这个模拟器就是它要去测试的呢?是不是应该有一步关联之类的操作
4,编写一个py文件,py代码在下面
5,进入命令行,切换到sdk下的tools目录,monkey runnerpy运行那个文件

预期结果是会生成一张截图在当前目录,我也没看到,始终感觉是第三步,连接模拟器的那一步不对,恳求各位大大指点,谢谢



参考的例子教程在下面
运行monkeyrunner

您可以直接使用一个代码文件运行monkeyrunner,抑或在交互式对话中输入monkeyrunner语句。不论使用哪种方式,您都需要调用SDK目录的tools子目录下的monkeyrunner命令。如果您提供一个文件名作为运行参数,则monkeyrunner将视文件内容为Python程序,并加以运行;否则,它将提供一个交互对话环境。

monkeyrunner的命令语法为:

monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>

五、实例

以sample中的ApiDemos为例,先将其生成ApiDemos.apk。

前提:已有device连接

1、 将ApiDemos.apk放在$Android_Root\tools下。

2、 在$Android_Root\tools下新建一个monkeyrunnerprogram.py文件,里面内容为:

1 # Imports the monkeyrunner modules used by this program 2   3  from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage 4  5  # Connects to the current device, returning a MonkeyDevice object 6   7 device = MonkeyRunner.waitForConnection() 8  9  # Installs the Android package. Notice that this method returns a boolean, so you can test10  11  # to see if the installation worked.12  13 device.installPackage('./ApiDemos.apk')14 15 16  # Runs the component17  18 device.startActivity(component='com.example.android.apis/.ApiDemos')19 20 21  # Presses the Menu button22  23 device.press('KEYCODE_MENU','DOWN_AND_UP')24 25 26  # Takes a screenshot27  28 result = device.takeSnapshot()29 30 31  # Writes the screenshot to a file32  33 result.writeToFile('./shot1.png','png')复制代码
注意:SDK上的例子有些错误,不可直接复制,否则执行命令时会发生错误。具体可与我的上面这段代码对照。


3、 打开命令行转到Android_Root\tools目录下运行一下命令:

monkeyrunner monkeyrunnerprogram.py

110307 15:33:19.625:I [main] [com.android.monkeyrunner.MonkeyManager] Monkey Command: wake.

110307 15:33:20.625:I [main] [com.android.monkeyrunner.MonkeyManager] Monkey Command: wake.

110307 15:33:21.625:I [main] [com.android.monkeyrunner.MonkeyManager] Monkey Command: wake.

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice] Error starting command: monkey --port 12345

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]com.android.ddmlib.ShellCommandUnresponsiveException

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:408)

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at com.android.ddmlib.Device.executeShellCommand(Device.java:276)

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at com.android.monkeyrunner.adb.AdbMonkeyDevice$1.run(AdbMonkeyDevice.java:89)

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at java.util.concurrent.Executors$RunnableAdapter.call(UnknownSource)

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at java.util.concurrent.FutureTask.run(Unknown Source)

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at java.util.concurrent.ThreadPoolExecutor$Worker.run(UnknownSource)

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at java.lang.Thread.run(UnknownSource)

110307 15:33:57.437:I [main] [com.android.monkeyrunner.MonkeyManager] Monkey Command: press KEYCODE_MENU.

110307 15:33:59.171:I [main] [com.android.monkeyrunner.MonkeyManager] Monkey Command: quit.

注:里面exception的提示我们可以忽略,因为我们可以看见 Monkey Command: press KEYCODE_MENU已经执行成功。

4、 可以Android_Root\tools下查看生成的shot1.png的截图。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2012-7-11 17:39:56 | 只看该作者
额..没人回答..或者谁有比较详细点的教程呢...谢谢哦~~~~~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2012-7-11 18:00:53 | 只看该作者
1.如果你连接了1个设备,import各个模块之后
device = MonkeyRunner.waitForConnection() #连上设备之后,屏幕会亮一下
2.如果连接了多个设备,可以通过adb devices查看设备的SN
device1 = MonkeyRunner.waitForConnection(5,'SN1') #5代表等待5秒,SN1代表要连的一个设备
device2 = MonkeyRunner.waitForConnection(5,'SN2')
不知道回答的是不是你要的。
建议看看这个http://blog.csdn.net/jiguanghoverli/article/category/1060048
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2012-7-16 11:41:49 | 只看该作者
回复 3# sofall

谢谢,您说得对


现在已经搞明白了,monkeyrunner的例子还是太少了哦
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-22 13:12 , Processed in 0.071521 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表