免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2336 | 回复: 1
打印 上一主题 下一主题

关于使用Monkey运行脚本测试 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-23 03:03 |只看该作者 |倒序浏览

转自:http://www.iandroid.cn/bbs/android-9397-1-1.html

 

一、在虚拟机上运行 monkey

      1 、在 pc Linux )上运行模拟器,两种方法

l         可以通过 eclipse 运行 emulator ,具体方法略。

l         可以通过命令行 : root@lenovo-desktop:~# emulator -avd android2.2

      2 、进入 adb shell 模式,如下:

              root@lenovo-desktop:~# adb shell

#

      3 、运行 monkey 工具开启专用端口

# monkey --port 1080 -v -v

:Monkey: seed=0 count=1000

:IncludeCategory: android.intent.category.LAUNCHER

:IncludeCategory: android.intent.category.MONKEY

… …

注:执行完 monkey 命令后可以使用 netstat 查看端口是否开启,下面红色部分是我们要关注的地方。

              # netstat

Proto Recv-Q Send-Q Local Address          Foreign Address        State

tcp        0      0 127.0.0.1:5037         0.0.0.0:*              LISTEN

tcp        0      0 0.0.0.0:5555           0.0.0.0:*               LISTEN

tcp        0      0 127.0.0.1:1080         0.0.0.0:*              LISTEN

tcp    0       0 10.0.2.15:5555         10.0.2.2:43064         ESTABLISHED

udp        0      0 0.0.0.0:55433          0.0.0.0:*

udp        0      0 0.0.0.0:52470          0.0.0.0:*

#

      4 、在 pc 端开启转发端口

              root@lenovo-desktop:~# adb forward tcp:1080 tcp:1080

       注:执行完 adb forward 后,同样可以使用 netstat 命令查看端口是否启用,命令如下:

              root@lenovo-desktop:~# netstat -an | grep 1080

root@lenovo-desktop:~#

root@lenovo-desktop:~# adb forward tcp:1080 tcp:1080

root@lenovo-desktop:~# netstat -an | grep 1080

tcp        0      0 127.0.0.1:1080          0.0.0.0:*               LISTEN

root@lenovo-desktop:~#

      5 、使用 telnet 工具连接 android

              root@lenovo-desktop:~# telnet 127.0.0.1 1080

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

 

出现上面的提示,没有异常退出的话,说明连接成功,这时候就可以参照 example_script.txt 脚步里面的内容输入键值了。

root@lenovo-desktop:~# telnet 127.0.0.1 1080

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

 

key down 3

OK

 

key up 3

OK

注: key down 3 key up 3 ,是用户输入的键值, ok 是返回值,如果看到 ok 字样的返回值,说明发的键值为有效值,否则,为无效值!

 

此时你会想到,如果必须这样一次一次的输入没个键值的话,那还有啥自动化测试的意义呢,还不如一个一个的去按呢,事实上是可以通过管道一次把所有命令传入 monkey 的。

      6 、一次性输入 example_script.txt 脚步里面的所有内容,命令如下:

              root@lenovo-desktop:~# cat example_script.txt | telnet 127.0.0.1 1080

       这时,你就可以在你执行 # monkey --port 1080 -v –v 命令的窗口看到打印的一系列 Events 消息:

              …

              ……

              :Sending Pointer ACTION_DOWN x=160.0 y=200.0

:Sending Pointer ACTION_UP x=160.0 y=200.0

Sleeping for 1000 milliseconds

:Sending Pointer ACTION_DOWN x=300.0 y=450.0

:Sending Pointer ACTION_UP x=300.0 y=450.0

Sleeping for 1000 milliseconds

:Sending Pointer ACTION_DOWN x=300.0 y=450.0

:Sending Pointer ACTION_UP x=300.0 y=450.0

Sleeping for 1000 milliseconds

:Sending Pointer ACTION_DOWN x=300.0 y=450.0

:Sending Pointer ACTION_UP x=300.0 y=450.0

Sleeping for 1000 milliseconds

:SendKey (ACTION_DOWN): 20    // KEYCODE_DPAD_DOWN

:SendKey (ACTION_UP): 20    // KEYCODE_DPAD_DOWN

:SendKey (ACTION_DOWN): 20    // KEYCODE_DPAD_DOWN

:SendKey (ACTION_UP): 20    // KEYCODE_DPAD_DOWN

:SendKey (ACTION_DOWN): 23    // KEYCODE_DPAD_CENTER

:SendKey (ACTION_UP): 23    // KEYCODE_DPAD_CENTER

:SendKey (ACTION_DOWN): 30    // KEYCODE_B

:SendKey (ACTION_UP): 30    // KEYCODE_B

:SendKey (ACTION_DOWN): 37    // KEYCODE_I

:SendKey (ACTION_UP): 37    // KEYCODE_I

:SendKey (ACTION_DOWN): 40    // KEYCODE_L

:SendKey (ACTION_UP): 40    // KEYCODE_L

:SendKey (ACTION_DOWN): 40    // KEYCODE_L

:SendKey (ACTION_UP): 40    // KEYCODE_L

:SendKey (ACTION_DOWN): 20    // KEYCODE_DPAD_DOWN

:SendKey (ACTION_UP): 20    // KEYCODE_DPAD_DOWN

:SendKey (ACTION_DOWN): 30    // KEYCODE_B

:SendKey (ACTION_UP): 30    // KEYCODE_B

:SendKey (ACTION_DOWN): 37    // KEYCODE_I

:SendKey (ACTION_UP): 37    // KEYCODE_I

:SendKey (ACTION_DOWN): 40    // KEYCODE_L

:SendKey (ACTION_UP): 40    // KEYCODE_L

:SendKey (ACTION_DOWN): 40    // KEYCODE_L

:SendKey (ACTION_UP): 40    // KEYCODE_L

:Sending Pointer ACTION_DOWN x=300.0 y=450.0

:Sending Pointer ACTION_UP x=300.0 y=450.0

Events injected: 34

:Dropped: keys=0 pointers=0 trackballs=0 flips=0

## Network stats: elapsed time=18299ms (18299ms mobile, 0ms wifi, 0ms not connected)

 

注:你发现没?以上显示的内容呢,正是 examp_script.txt 的内容。

      7 、在 pc(windows ) 上运行 monkey 测试工具

备注:这个 example_script.txt 也完全可以在 windows 机器上运行,运行方法和步骤完全同上,所用到的系统命令也几乎一样。

 

二、在真实设备上运行 monkey

1 、连接设备

使用 usb 线或其他方式如串口连通设备和 pc ,使之能够相互通讯即可,验证方法参照命令 netstat

2 、如何测试

剩下的测试方法参照楼上的虚拟机方法即可。

 

三、总结

       example_script.txt 例子非常简单,但是要真正的把它拿到自动化测试当中来,还需要花费很大的力气,其中的 events ,不泛是例子中的几个简单的 events ,而是还可以实现很多功能的,具体的 events 用法可参考 monkey 的源码 .

       路还是很长滴

 

四、小小的实例 (example_script.txt)

       # Touch the android

touch down 160 200

touch up 160 200

sleep 1000

 

# Hit Next

touch down 300 450

touch up 300 450

sleep 1000

 

# Hit Next

touch down 300 450

touch up 300 450

sleep 1000

 

# Hit Next

touch down 300 450

touch up 300 450

sleep 1000

 

# Go down and select the account username

key down dpad_down

key up dpad_down

key down dpad_down

key up dpad_down

key down dpad_center

key up dpad_center

 

# account name: bill

key down b

key up b

key down i

key up i

key down l

key up l

key down l

key up l

 

# Go down to the password field

key down dpad_down

key up dpad_down

 

# password: bill

key down b

key up b

key down i

key up i

key down l

key up l

key down l

key up l

 

# Select next

touch down 300 450

touch up 300 450

 

# quit

quit

五、附录:

以下内容为 android 系统中的 keycode 值:

KEYCODE_UNKNOWN=0;

KEYCODE_SOFT_LEFT=1;

KEYCODE_SOFT_RIGHT=2;

KEYCODE_HOME=3;

KEYCODE_BACK=4;

KEYCODE_CALL=5;

KEYCODE_ENDCALL=6;

KEYCODE_0=7;

KEYCODE_1=8;

KEYCODE_2=9;

KEYCODE_3=10;

KEYCODE_4=11;

KEYCODE_5=12;

KEYCODE_6=13;

KEYCODE_7=14;

KEYCODE_8=15;

KEYCODE_9=16;

KEYCODE_STAR=17;

KEYCODE_POUND=18;

KEYCODE_DPAD_UP=19;

KEYCODE_DPAD_DOWN=20;

KEYCODE_DPAD_LEFT=21;

KEYCODE_DPAD_RIGHT=22;

KEYCODE_DPAD_CENTER=23;

KEYCODE_VOLUME_UP=24;

KEYCODE_VOLUME_DOWN=25;

KEYCODE_POWER=26;

KEYCODE_CAMERA=27;

KEYCODE_CLEAR=28;

KEYCODE_A=29;

KEYCODE_B=30;

KEYCODE_C=31;

KEYCODE_D=32;

KEYCODE_E=33;

KEYCODE_F=34;

KEYCODE_G=35;

KEYCODE_H=36;

KEYCODE_I=37;

KEYCODE_J=38;

KEYCODE_K=39;

KEYCODE_L=40;

KEYCODE_M=41;

KEYCODE_N=42;

KEYCODE_O=43;

KEYCODE_P=44;

KEYCODE_Q=45;

KEYCODE_R=46;

KEYCODE_S=47;

KEYCODE_T=48;

KEYCODE_U=49;

KEYCODE_V=50;

KEYCODE_W=51;

KEYCODE_X=52;

KEYCODE_Y=53;

KEYCODE_Z=54;

KEYCODE_COMMA=55;

KEYCODE_PERIOD=56;

KEYCODE_ALT_LEFT=57;

KEYCODE_ALT_RIGHT=58;

KEYCODE_SHIFT_LEFT=59;

KEYCODE_SHIFT_RIGHT=60;

KEYCODE_TAB=61;

KEYCODE_SPACE=62;

KEYCODE_SYM=63;

KEYCODE_EXPLORER=64;

KEYCODE_ENVELOPE=65;

KEYCODE_ENTER=66;

KEYCODE_DEL=67;

KEYCODE_GRAVE=68;

KEYCODE_MINUS=69;

KEYCODE_EQUALS=70;

KEYCODE_LEFT_BRACKET=71;

KEYCODE_RIGHT_BRACKET=72;

KEYCODE_BACKSLASH=73;

KEYCODE_SEMICOLON=74;

KEYCODE_APOSTROPHE=75;

KEYCODE_SLASH=76;

KEYCODE_AT=77;

KEYCODE_NUM=78;

KEYCODE_HEADSETHOOK=79;

KEYCODE_FOCUS=80;//*Camera*focus

KEYCODE_PLUS=81;

KEYCODE_MENU=82;

KEYCODE_NOTIFICATION=83;

KEYCODE_SEARCH=84;

KEYCODE_MEDIA_PLAY_PAUSE=85;

KEYCODE_MEDIA_STOP=86;

KEYCODE_MEDIA_NEXT=87;

KEYCODE_MEDIA_PREVIOUS=88;

KEYCODE_MEDIA_REWIND=89;

KEYCODE_MEDIA_FAST_FORWARD=90;

KEYCODE_MUTE=91;

 

 

论坛徽章:
0
2 [报告]
发表于 2014-02-12 16:44 |只看该作者
您好!我按照您说的:
第1步,adb shell monkey --port 1080
但这个不会自动跑,需要我在设备上点击,才会出现log.同时,我也不知道怎么退出。
如果我用Ctrl+C后,再查看:netstat会出现你提的信息
但是
第2步,adb forward tcp:1080 tcp:1080 也可以出现你提的信息
第3步,通过你提供的例子,我输入后,会出现:
Connection closed by foreign host.
请问题 这是什么问题?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP