Chinaunix首页 | 论坛 | 博客
  • 博客访问: 914956
  • 博文数量: 75
  • 博客积分: 6236
  • 博客等级: 准将
  • 技术积分: 726
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-03 14:43
文章分类

全部博文(75)

文章存档

2019年(1)

2018年(6)

2017年(4)

2015年(1)

2014年(9)

2013年(1)

2012年(3)

2011年(9)

2010年(3)

2009年(2)

2008年(4)

2007年(24)

2006年(8)

我的朋友

分类: 嵌入式

2011-09-22 16:02:52

转自:

 

monkey

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

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

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

      、进入 adb shell 模式,如下:

              root@lenovo-desktop:~# adb shell

#

      、运行 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:*

#

      、在 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:~#

      、使用 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 的。

      、一次性输入 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 的内容。

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

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

 

monkey

、连接设备

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

、如何测试

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

 

       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;

 

 

阅读(2171) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~