版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011436666/article/details/53998332

在之前的文章Android自动化测试之Monkey中我们了解过了Monkey的4大类命令和基本使用,当我们运行Monkey之后,我们会发现它的日志输出是很有规律的,因此很有必要对Monkey事件及其输出日志做一个了解。

1、Monkey事件

Monkey事件是用来模拟用户的常规操作的,对手机进行稳定性测试,主要可以分为11大类事件。

注意:以下的pct前面是两个连在一起的中划线- -,网页上显示在了一起。

1、触摸事件

是指在屏幕的点击事件,按下并抬起的操作,由一个ACTION_DOWN–>一个ACTION_UP组成。可通过–pct-touch参数来配置此事件的比例,我们可以从运行Monkey后输出的log看到:

:Sending Touch (ACTION_DOWN): 0:(657.0,287.0)
:Sending Touch (ACTION_UP): 0:(662.1641,290.94638)

2、手势事件

在屏幕的某处按下、随机滑动、抬起的事件,由一个ACTION_DOWN–>多个ACTION_MOVE–>一个ACTION_UP组成。实际上是一个直线滑动操作。可通过–pct-motion来配置其百分比。

:Sending Touch (ACTION_DOWN): 0:(111.0,898.0)
:Sending Touch (ACTION_MOVE): 0:(107.93105,888.1464)
:Sending Touch (ACTION_MOVE): 0:(106.85465,885.9339)
:Sending Touch (ACTION_MOVE): 0:(104.74859,881.0618)
:Sending Touch (ACTION_MOVE): 0:(103.88795,880.0649)
:Sending Touch (ACTION_MOVE): 0:(103.34122,874.6459)
:Sending Touch (ACTION_UP): 0:(102.85543,864.8377)

3、二指缩放事件

此事件是指双指在屏幕同时按下,并滑动,最后在抬起,最常用的如图库中查看图片时的双指缩放操作。由一个ACTION_DOWN&ACTION_POINTER_DOWN–>多个ACTION_MOVE–>一个ACTION_UP&ACTION_POINTER_UP组成。可通过–pct-pinchzoom参数来配置此事件的百分比。

:Sending Touch (ACTION_DOWN): 0:(501.0,466.0)
:Sending Touch (ACTION_POINTER_DOWN 1): 0:(496.17197,465.6653) 1:(217.0,144.0)
:Sending Touch (ACTION_MOVE): 0:(495.73535,463.35156) 1:(209.00148,146.82776)
:Sending Touch (ACTION_MOVE): 0:(485.36288,461.93683) 1:(203.72124,151.1682)
:Sending Touch (ACTION_MOVE): 0:(471.66867,459.6027) 1:(186.45467,155.50856)
:Sending Touch (ACTION_POINTER_UP 1): 0:(443.38687,451.881) 1:(143.06265,161.267)
:Sending Touch (ACTION_UP): 0:(438.07867,448.4626)

4、轨迹事件

轨迹球在现在的手机上已经没有了,但我们仍可以用此事件来模拟曲线滑动操作。通过–pct-trackball参数来配置其事件百分比。

:Sending Trackball (ACTION_MOVE): 0:(0.0,-1.0)
:Sending Trackball (ACTION_MOVE): 0:(-3.0,3.0)
:Sending Trackball (ACTION_MOVE): 0:(-3.0,0.0)

5、屏幕旋转事件

模拟手机的横竖屏操作,可通过–pct-rotation参数来配置其比例。由一个rotation事件组成,degree表示的是旋转方向,顺时针方向,0表示90度的方向,1-180度、2-270度方向、3-360度方向。

:Sending rotation degree=0, persist=false
:Sending rotation degree=3, persist=true

6、基本导航事件

基本导航事件是指上下左右按键的操作,在几年前的智能机上很常见,现在很少见了。由一个Key的ACTION_DOWN和ACTION_UP组成。可以用–pct-nav参数来配置其百分比。

:Sending Key (ACTION_DOWN): 19    // KEYCODE_DPAD_UP
:Sending Key (ACTION_UP): 19 // KEYCODE_DPAD_UP
:Sending Key (ACTION_DOWN): 20 // KEYCODE_DPAD_DOWN
:Sending Key (ACTION_UP): 20 // KEYCODE_DPAD_DOWN
:Sending Key (ACTION_DOWN): 21 // KEYCODE_DPAD_LEFT
:Sending Key (ACTION_UP): 21 // KEYCODE_DPAD_LEFT
:Sending Key (ACTION_DOWN): 22 // KEYCODE_DPAD_RIGHT
:Sending Key (ACTION_UP): 22 // KEYCODE_DPAD_RIGHT

7、主要导航事件

和基本导航事件不同的是,主要导航事件通常会导致UI界面发生变化,如5键按钮中的中间件、Back Key、Menu Key等。通过–pct-majornav来配置其百分比。

:Sending Key (ACTION_DOWN): 23    // KEYCODE_DPAD_CENTER
:Sending Key (ACTION_UP): 23 // KEYCODE_DPAD_CENTER

8、系统按键事件

系统保留的按键,如Home键、音量键等。可通过–pct-syskeys参数来配置其百分比。

:Sending Key (ACTION_DOWN): 3    // KEYCODE_HOME
:Sending Key (ACTION_UP): 3 // KEYCODE_HOME
:Sending Key (ACTION_DOWN): 24 // KEYCODE_VOLUME_UP
:Sending Key (ACTION_UP): 24 // KEYCODE_VOLUME_UP

我们很容易发现几种按键事件都是通过Sending Key这个“方法”来发送的, 在其后加上ACTION和Key_Code即可

9、启动Activity事件

在手机上启动一个Activity的操作,在随机的时间间隔内Monkey将执行一个startActivity方法,最大限度上覆盖被测包中的全部Activity。可通过–pct-appswitch参数来配置其事件百分比。

:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.youdao.dict/.activity.LaunchActivity;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.youdao.dict/.activity.LaunchActivity } in package com.youdao.dict

10、键盘事件

主要是一些与键盘有关的操作,比图点击输入框键盘弹起、点击其他区域收起键盘灯。可通过–pct-flip参数来配置其事件百分比。

:Sending Flip keyboardOpen=false

11、其他类型事件

包括上面10种事件以外的其他所有事件,如具体的数字、字母按键等。现在的手机很少带有全键盘,所以用的并不多。通过–pct-anyevent参数来配置其百分比。

:Sending Key (ACTION_DOWN): 201    // KEYCODE_BUTTON_14
:Sending Key (ACTION_UP): 201 // KEYCODE_BUTTON_14
:Sending Key (ACTION_DOWN): 51 // KEYCODE_W
:Sending Key (ACTION_UP): 51 // KEYCODE_W

2、Monkey日志分析

之前的文章提到过,保存日志的方式有三种:

  1. 保存在PC中: adb shell monkey [options] < count> > d:\monkey.txt

  2. 保存在手机中:

    • adb shell
    • monkey [options] < count> > /sdcard/monkey.txt
  3. 运行日志和异常日志分开存放: monkey [options] < count> 1>/sdcard/monkey.txt 2>/sdcard/error.txt

通过分析Monkey运行时输出的日志可以知道其一般分为4类信息,测试命令、伪随机事件、异常信息、Monkey执行结果信息。

1、测试命令信息

当前所执行命令的各种参数信息,包括种子、事件数量、应用列表、各事件的百分比等等。部分代码清单如下:

//测试命令信息
//种子值和执行事件数量
:Monkey: seed=1234567 count=1000
//允许的应用列表
:AllowPackage: fm.qingting.qtradio
:AllowPackage: com.youdao.dict
:AllowPackage: me.ele
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Selecting main activities from category android.intent.category.LAUNCHER
// + Using main activity com.youdao.dict.activity.LaunchActivity (from package com.youdao.dict)
// + Using main activity me.ele.Launcher (from package me.ele)
// + Using main activity fm.qingting.qtradio.WelcomeActivity (from package fm.qingting.qtradio)
// Selecting main activities from category android.intent.category.MONKEY
// Seeded: 1234567
//各事件的百分比
// Event percentages:
// 0: 15.0%
// 1: 10.0%
// 2: 2.0%
// 3: 15.0%
// 4: -0.0%
// 5: 25.0%
// 6: 15.0%
// 7: 2.0%
// 8: 2.0%
// 9: 1.0%
// 10: 13.0%

2、伪随机事件流信息

Monkey开始执行测试后,会顺序的输出执行的事件流信息,即本篇开始的讲到的11大事件。部分代码清单如下:

//执行的事件流信息
//启动APP事件
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.youdao.dict/.activity.LaunchActivity;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.youdao.dict/.activity.LaunchActivity } in package com.youdao.dict
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.youdao.dict/.activity.LaunchActivity } in package com.youdao.dict
//延时
Sleeping for 200 milliseconds
//导航按键事件
:Sending Key (ACTION_DOWN): 22 // KEYCODE_DPAD_RIGHT
//还有其他各种事件
...

3、异常信息

在此,举一个native crash的例子给大家看看,部分代码如下。当然,还有应用层面的Crash、ANR等各种异常信息。

//发生Crash的应用包名和pid
// CRASH: fm.qingting.qtradio (pid 20487)
//Crash的简要信息
// Short Msg: Native crash
//Crash的详细信息
// Long Msg: Native crash: Aborted
//机型和系统信息
// Build Label: Xiaomi/dior/dior:4.4.4/KTU84P/6.12.29:user/release-keys
// Build Changelist: 6.12.29
// Build Time: 1482861145000
// *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
// Build fingerprint: 'Xiaomi/dior/dior:4.4.4/KTU84P/6.12.29:user/release-keys'
// Revision: '0'
// pid: 20487, tid: 20487, name: ingting.qtradio >>> fm.qingting.qtradio <<<
//Crash的详细日志
// signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
// r0 00000000 r1 00005007 r2 00000006 r3 00000000
// r4 00000006 r5 0000000b r6 00005007 r7 0000010c
// r8 60350e98 r9 577a6508 sl 57734830 fp 577a6378
// ip 40160398 sp beda6828 lr 401251d1 pc 4013412c cpsr 00030010
// d0 732e6b69766c6164 d1 614e2e6d65747379
...

4、Monkey执行结果信息

执行成功时的结果信息:

Events injected: 1000
:Sending rotation degree=0, persist=false
:Dropped: keys=2 pointers=85 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=79214ms (0ms mobile, 0ms wifi, 79214ms not connected)
// Monkey finished

执行失败时的结果信息:

//显示Monkey执行失败
** Monkey aborted due to error.
//执行的事件数量
Events injected: 730
//旋转角度为0
:Sending rotation degree=0, persist=false
//丢失的事件数量
:Dropped: keys=0 pointers=1 trackballs=0 flips=0 rotations=0
//网络状况
## Network stats: elapsed time=45652ms (0ms mobile, 0ms wifi, 45652ms not connected)
//提示在执行到730个事件时出现Crash,及使用的seed
** System appears to have crashed at event 730 of 1000 using seed 1234567

3、使用adb命令,获取更多信息

很多时候,测试除了想知道执行过程是否有异常,还需要获取执行过程中的一些详细数据和性能信息,这时候monkey自带的log就不能满足我们的要求了。我们可以使用一些adb命令来获取更多的信息,比如:

  • 获取logcat日志信息:

    • adb shell logcat -v time > log.txt
  • 获取内存信息:
    • adb shell dumpsys meminfo <进程名>
  • 获取CPU消耗信息:
    • adb shell top -n 1 | find “进程名”
  • 获取电量信息:
    • adb shell dumpsys battery
  • 获取GPU信息:
    • adb shell dumpsys grcxinfo <进程名>
  • 获取流量信息:
    • adb shell cat/proc/uid_stat/< app uid>/tcp_rcv

如何得到app uid?可分为以下两步:

  1. 查看被测app的进程ID(pid)
    adb shell ps | grep <被测应用名>
  2. 查看用户ID(uid)
    adb shell cat /proc/$pid/status

通过以上对Monkey事件的解释和执行日志的分析,想必我们已经可以流畅的使用Monkey来进行测试了。但是仍然有很多的限制,比如无法截图、在测试的过程中如何确保网络一直在连接状态等等。这些较为深入的问题就需要我们阅读其源码并进行一些定制了。

Android自动化测试之Monkey 转自:LupuX的更多相关文章

  1. Android自动化测试之Monkey

    本来是做Web后端的,来公司实习变成微信小程序前端了,到这周变成Android APP测试人员了,也是微醺啊. 由于对手工测试终究是有些抵触,所有昨天小试了一下不用写代码的自动化压力测试,在此记下我的 ...

  2. Android自动化测试之Monkey Test 安装(二)

    因为Monkey Test是在eclipse上执行的,所以玩monkey test的时候要先配置安卓开发环境 一.Android开发环境搭建指南 1.安装JDK JDK下载链接:http://www. ...

  3. Android自动化测试之Monkey Test(一)

    Monkey是什么 Monkey是可以运行在模拟器里或实际设备中的程序.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试.   Monkey简 ...

  4. Android自动化测试之Monkey工具

    前言:Android自动化测试工具.方法和框架,包括android测试框架.CTS.Monkey.Monkeyrunner.benchmark.test tool等. 一. 什么是MonkeyMonk ...

  5. Android自动化测试之Monkeyrunner学习笔记(一)

    Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...

  6. [转] Android自动化测试之使用java调用monkeyrunner(五)

    Android自动化测试之使用java调用monkeyrunner 众所周知,一般情况下我们使用android中的monkeyrunner进行自动化测试时,使用的是python语言来写测试脚本.不过, ...

  7. Android自动化测试之环境搭建

    Android自动化测试之环境搭建 一.Android-sdk介绍 SDK(Software development kit)软件开发工具包.被软件开发工程师用于为特定的软件包.软件框架.硬件平台. ...

  8. Android自动化测试之MonkeyRunner录制和回放脚本

    Android自动化测试之MonkeyRunner录制和回放脚本(十一) 分类: 自动化测试 Android自动化 2013-02-22 10:57 7346人阅读 评论(2) 收藏 举报 andro ...

  9. 2、Android自动测试之Monkey工具

    Android自动测试之Monkey工具 APP测试工作中经常会听到领导说,APP压力测试做了吗?刚入行时,不知道什么是 APP压力测试,找了半天没找到自己想要的.过了几年,回头想这个问题,发现牵扯了 ...

随机推荐

  1. 训练集,验证集,测试集(以及为什么要使用验证集?)(Training Set, Validation Set, Test Set)

    对于训练集,验证集,测试集的概念,很多人都搞不清楚.网上的文章也是鱼龙混杂,因此,现在来把这方面的知识梳理一遍.让我们先来看一下模型验证(评估)的几种方式. 在机器学习中,当我们把模型训练出来以后,该 ...

  2. Zotero使用教程(2)-数据备份

    小书匠 这篇文章的目标是让你无论是 换系统,重新安装zotero等都可以还原回你的文献库,而且整个过程基本是自动完成的. 这部分解决下面的两种情况: 1.zotero有自己既定的一套存储方式,不是一般 ...

  3. SQL基础-汇总统计及GROUP BY

    一.汇总统计 1.聚集函数 COUNT() 计算总数 SUM() 求和 MAX() 最大值 MIN() 最小值 AVG() 平均值 2.聚集函数使用 总共有多少名学生? SELECT COUNT(*) ...

  4. 2016级android在线测试15-图像 camera2

    有趣有内涵的文章第一时间送达! 喝酒I创作I分享 生活中总有些东西值得分享 @醉翁猫咪 1. ImageView类用于显示各种图像,例如:图标.图片,下面对于ImageView类加载图片方法的描述错误 ...

  5. Stringbuilde方法的用法以及其作用

    Stringbuilde的方法有以下几种(常用的):(java中的语法) 在程序开发过程中,我们常常碰到字符串连接的情况,方便和直接的方式是通过"+"符号来实现,但是这种方式达到目 ...

  6. 第06组 Alpha冲刺(4/6)

    队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 主要完成了用户联系模块的接口设计 完善后端的信息处理 GitHub签入记录 接下来的计划 ...

  7. mysql查询、子查询、连接查询

    mysql查询.子查询.连接查询 一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.gr ...

  8. CentOS7.4安装ipython

    摘自:https://www.jianshu.com/p/aa93a0341c82 使用pip3安装ipython及其依赖包:pip3 install ipython在 .bashrc文件中添加环境变 ...

  9. 使用协方差矩阵的特征向量PCA来处理数据降维

    取2维特征,方便图形展示 import matplotlib.pyplot as plt from sklearn.decomposition import PCA from sklearn.data ...

  10. Docker容器(六)——创建docker私有化仓库

    docker私有化仓库是为了节约带宽(外网速度慢或者干脆不能连外网),以及自己定制系统. (1).环境 youxi1 192.168.5.101 docker私有化仓库 youxi2 192.168. ...