android monkey 工具,Android自动化测试入门工具-Monkey

前面的内容请参见Android应用自动化测试-提纲。

这篇起,我们来介绍Android自动化测试,首先我们要看到是一个基本工具,也是在实际项目中最经常用到的一个自动化的测试工具-Monkey。

Monkey,顾名思义,也叫猴子测试。一般指无目的地随机测试,就像一个猴子在那乱按乱点。它是Android SDK中自带的一个黑盒自动化测试工具,通过随机触发界面事件来发现应用的问题,一般多用于App的稳定性测试和异常发现。但Monkey工具其实触发的是一个伪随机的事件流,也就是这个事件流并不会完全随机的。

它的命令格式是:

adb shell monkey [options]

官网给出了Monkey测试的主要参数及其用法

但我们如果看Monkey源码的话,会发现并不是所有的参数都在这个表格中给出。

还有一些其他参数如:

-f -- 指定脚本

--port -- 指定连接monkeyserver的端口

pkg-blacklist-file -- 包黑名单,不触发名单中的包

pkg-whitelist-file -- 包白名单,仅触发名单中的包

这里我们来看下常用的几个参数含义:

-h 打印出Monkey的基本使用方法

-v 这是一个重要的参数,monkey通过-v参数来确定执行输出日志的详细程度,支持3级,给出-v -v -v则输出最详细的日志信息。

-s 前面提过,monkey工具是一个伪随机事件流,-s参数则代表执行的事件种子,通过这个事件种子号,我们可以生成同样的一套事件流,在我们发现问题,需要复现时,这个参数就非常重要了。

--throttle 延时参数,单位是毫秒,是执行中每两个事件之间的时间间隔,不知道则默认为0

--pct-touch 指定在当前事件流所有的事件中,触屏事件的占比,其他的pct事件也类似,具体代表的事件可以参见前面的官方说明

-p 通过给定包名指定被测应用

-c 确定一个或多个特定的类别,Monkey就只允许系统去访问这些特定类别下列出的Activity了。若不指定的话,默认访问Intent.CATEGORY_LAUNCHER 或Intent.CATEGORY_MONKEY下的Activity

主要的category:

intent.CATEGORY.ALTERNATIVE

intent.CATEGORY.BROWSABLE

intent.CATEGORY.DEFAULT

intent.CATEGORY.DEVELOPMENT_PREFERENCE

intent.CATEGORY.EMBED

intent.CATEGORY.HOME

intent.CATEGORY.INFO

intent.CATEGORY.LAUNCHER

intent.CATEGORY.MONKEY

intent.CATEGORY.OPENABLE

intent.CATEGORY.PREFERENCE

intent.CATEGORY.SELECTED_ALTERNATIVE

intent.CATEGORY.TAB

--hprof monkey执行过程记录hprof文件,便于使用traceview工具来进一步分析

--ignore-crashes 忽略crash,monkey在执行中,如果发生crash,默认为停止在crash事件发生的地方并退出执行。使用这个参数可以忽略这个crash并继续按设定执行完所有的event。

-f 未在官方文档上列出的参数,但很有用。支持Monkey脚本,后面会专门用一篇说明

--port 未在官方文档上列出,也很有用。是monkey的网络功能,也就是可以使用Monkey的server功能,后面也会专门用一篇说明。

Monkey执行日志解析

下面我们以monkey执行计算器应用的日志说明下Monkey执行日志的含义

adb shell monkey -p com.android.calculator2 -v -v 10

-p参数指定包名,-v -v输出两级日志,10表示触发10个事件

:Monkey: seed=1486970253229 count=10

## 执行Monkey工具,本次执行的种子值是1486970253229,对应的事件数量10次

:AllowPackage: com.android.calculator2

## 指允许包名为com.android.calculator2的应用触发事件

:IncludeCategory: android.intent.category.LAUNCHER

:IncludeCategory: android.intent.category.MONKEY

## 包含默认支持的Category:LAUNCHER、MONKEY

// Selecting main activities from category android.intent.category.LAUNCHER

// + Using main activity com.android.calculator2.Calculator (from package com.android.calculator2)

## 使用默认的LAUCHER Activity:com.android.calculator2.Calculator

// Selecting main activities from category android.intent.category.MONKEY

// Seeded: 1486970253229

## 种子值

// Event percentages:

## 不同事件占比

// 0: 15.0%

## pct-touch,触屏点击事件

// 1: 10.0%

## pct-motion移动事件

// 2: 2.0%

// 3: 15.0%

## pct-trackball轨迹球事件

// 4: -0.0%

## pct majornav主导航事件

// 5: -0.0%

## pct-nav导航事件

// 6: 25.0%

// 7: 15.0%

## pct-syskeys 系统按键事件

// 8: 2.0%

## pct-appswitch应用切换事件

// 9: 2.0%

// 10: 1.0%

## pct-anyevent其他事件

// 11: 13.0%

:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.android.calculator2/.Calculator;end

// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.calculator2/.Calculator } in package com.android.calculator2

Sleeping for 0 milliseconds

##事件间隔0毫秒

:Sending Key (ACTION_DOWN): 20 // KEYCODE_DPAD_DOWN

:Sending Key (ACTION_UP): 20 // KEYCODE_DPAD_DOWN

Sleeping for 0 milliseconds

:Sending Touch (ACTION_DOWN): 0:(409.0,317.0)

:Sending Touch (ACTION_UP): 0:(417.92798,318.7205)

Sleeping for 0 milliseconds

:Sending Key (ACTION_DOWN): 98 // KEYCODE_BUTTON_C

:Sending Key (ACTION_UP): 98 // KEYCODE_BUTTON_C

Sleeping for 0 milliseconds

:Sending Trackball (ACTION_MOVE): 0:(-4.0,-4.0)

:Sending Trackball (ACTION_MOVE): 0:(-5.0,-4.0)

:Sending Trackball (ACTION_MOVE): 0:(1.0,-5.0)

## 触发事件过程....

Events injected: 10

## 触发事件数量10

:Sending rotation degree=0, persist=false

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

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

## 执行时长,以及其中网络(移动网络、wifi网络、未使用网络)的耗时占比

// Monkey finished

## 完成测试

你可能感兴趣的:(android,monkey,工具)