热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

androidmonkey工具,Android自动化测试入门工具Monkey

前面的内容请参见Android应用自动化测试-提纲。这篇起,我们来介绍Android自动化测试,首先我们要看到是一个基本工具,也是在实际项

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

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

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

它的命令格式是:

adb shell monkey [options]

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

21dc57a17789但我们如果看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

## 完成测试



推荐阅读
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 在开发app时,使用了butterknife后,在androidStudio打包apk时可能会遇到报错。为了解决这个问题,可以通过打开proguard-rules.pro文件进行代码混淆来解决。本文介绍了具体的混淆代码和方法。 ... [详细]
author-avatar
luomo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有