小伙伴们大家好,今天主要分享的主题是Android App专项测试。如何进行Android App专项测试压力测试呢?我们主要通过Android平台的一门工具Monkey。在学习本门课程之前,如果你具有一定的Shell基础,将很有助于理解。

本次课程大纲主要分为3个部分:

第一部分 背景

探讨两个问题:

1. 为什么要开展压力测试?
2. 什么时候开展压力测试?

第二部分 理论

1.手工测试场景
2.自动测试场景
3.Monkey工具
4.ADB命令
5.Monkey Script
6.MonkeyRunner
7.压力测试结果

      1.什么是Crash?2.什么是ANR?

第三部分 实践

1.一个APP的压测实践
2.Monkey高级参数的应用
3.CRASH结果析取
4.ANR结果析取
5.Monkey Script实例
6.MonkeyRunner实例

第一部分 背景

1. 为什么要开展压力测试?

    提高产品稳定性提高产品的留存率

2.什么时候开展压力测试?

    首轮功能测试通过后下班后的夜间进行

第二部分 理论

手工测试场景

自动化测试场景

就拿查找实现自动化的话,对于手机来说它会

TouchInput(收集点击事件)–>KeyEvent(它会收到你点击键盘各种Key的事件)–>TouchSearch(收到你点击按钮的Touch事件)

然后就会返回一个联系人列表可以添加了

TouchSearch(收到你点击按钮的Touch事件)–>TouchName(对于手机来说同样收到一个Touch事件)

聊天嘛,你收到的也是一个Touch事件,因为你要点击用户头像,所以

TouchName(对于手机来说同样收到一个Touch事件)–>TouchFriend–>TouchKey(接着会受到你输入的各种文字)

图解:

Monkey

Monkey在哪?

在手机系统里,为了与它进行通讯,我们需要借助一个工具ADB

ADB

ADB是什么

这里需要借助一部 手机 和一台 WIndows电脑 ,通过USB链接,此时我们还需要建立一个软的连接,这个连接全程就是Android Debug Bridge,也就是Android调试桥。

Monkey Script

MonkeyRunner

MonkeyRunner APIs

MonkeyRunner 测试类型

压力测试结果

我们需要注意的两个地方:CrashANR

Crash
相对于我们app来说就像是战斗机的起火爆炸

ANR
Application Not Responding,如下图:

第三部分 实践

准备测试环境:

准备Android SDK环境
准备Python环境

对于环境配置这里不做过多讲解

一个APP的压测实践

压测实践Step1:

在手机开发者选项中,将USB调试勾上

压测实践Step2:

确认手机和电脑已经连接成功
adb devices来确认:cmd窗口输入adb devices,有以下信息就说明已经建立连接

压测实践Step3:

安装测试app : adb install package.apk

压测实践Step4:

发送测试指令 : adb shell monkey 1000

之后会输出如下类似信息:

什么时候会出现两行ActivityResuming的信息呢,就是一个app从前台调入后台,又从后台调入前台就会出现这么一个信息.

Event injected:1000 表示我们输入的随机测试1000个事件,它完成的也是1000个事件.如果这里的数字与我们输入的数字小灯,则表明没有异常出现.如果有异常出现,则这个数字小于我们输入的数字.

压测实践Step5:

获取程序包名 : adb logcat | grep START ,
| 表示前一个命令的输出作为下一个命令的输入
grep START表示抓取日志中包含有START标签的日志进行输出

这里我们主要关注cmp=后面的内容,在/之前的是app的包名,在/后面的是当前Activity的类名.Activity我们暂时不许要太关注,我们只需要关注这个包名。
我们以计算器为例,当我们home返回桌面,点击进入计算器,cmd就会输出计算器的一些信息,如:

压测实践Step6:

给指定包打压力 : adb shell monkey -p [packagename] [次数,如1000] ,,如adb shell monkey -p com.android.calculator2 1000,输出信息如下:

Monkey高级参数的应用

1.throttle参数

指定事件之间的间隔:adb shell monkey --throttle<milliseconds>,例如adb shell monkey -p com.android.calculator2 --throttle 1000 10

2.seed参数

指定随机生成数的seed值 : adb shell monkey -s<seed> <event-count>,例如 : adb shell monkey -p com.android.calculator2 -s 100 50,在重复执行一遍命令就可以复现上一条命令执行的结果,这里的seed次数100和执行事件数50保持遇上一条命令数目相同便可复现上一次结果

3.触摸事件

设定触摸事件的百分比 : adb shell --pct-touch<percent>,意思就是monkey所有操作中点击事件占多大比例。例如 : adb shell monkey -v -p com.android.calculator2 --pct-touch 100 100. ‘-v’参数表示列出所有操作详情。如下图,红色部分就是执行的操作,其中Action_down和Action_up是一个点击事件,成对出现。

4.动作事件

设置动作事件百分比 : adb shell monkey --pct-motion <percent> ,这个百分比和你其他事件之和要等于100。如果不等于100,它就会把剩余的比例随机操作。例如 : adb shell monkey -v -p com.android.calculator2 --pct-touch 50 --pct-motion 30 100,执行后各事件百分比如下:

5.轨迹球事件

设定轨迹球事件的百分比 : adb shell monkey --pct-trackball<percent>

6.基本导航事件

设定基本导航事件的百分比,输入设备的上下左右 : adb shell monkey --pct-nav<percent>

7.主要导航事件

设定主要导航事件的百分比,兼容中间键,返回键,菜单按键 : adb shell monkey --pct-majornav<percent>

8.系统导航事件

与手机硬件相关的

设定系统导航事件的百分比,HOME,BACK,拨号及音量键 : adb shell monkey --pct-syskeys<percent>

9.启动Activity事件

设定启动Activity的事件百分比 : adb shell monkey --pct-appswitch<percent>,假设我们指定了30%,有4个Activity,它就会有30%部分在4个Activity里进行切换

10.不常用事件

设定系统导航事件的百分比,HOME,BACK,拨号及音量键 : adb shell monkey --pct-anyevent<percent>

11.崩溃事件

Crash

忽略崩溃和异常 : adb shell monkey --ignore-crashes<event-count>,monkey在遇到崩溃时会继续跑,直到遇见的崩溃数等于我们的设定数值。

11.超时事件

ANR

忽略超时事件 : adb shell monkey --ignore-timeouts<event-count>,monkey在遇到超时事件会继续跑,直到遇见的超时数等于我们的设定数值。

CRASH结果析取

实践过程:

  1. 安装可以引起Crash的App
  2. 执行App的压力命令
  3. 析取Crash的Exception信息

    注意:在cmd命令控制台输出的信息中CRASH: 后面的内容可以复制出来交给开发人员进行解决,在输出信息末尾会有一个seed的值,拷贝这个值并在命令中加上[-s seed值]便可复现上一次的测试。如果在测试过程中忽略了crash而继续执行则无法获取到seed值。

ANR异常测试结果析取

实践过程:

  1. 安装可以引起ANR的app
  2. 执行app的压力命令
  3. 析取ANR的Exception信息

    注意:在cmd命令控制台输出的信息中NOT RESPONDING:后面会开始输出ANR错误的类名位置,后面会紧跟当时手机系统的一些信息,如cpu,内存以及其他的一系列的异常信息,全部打印了出来。当出现这种异常信息我们可以将这些信息发送给开发人员debug进行处理。

手动点击获得ANR异常,查看日志方法:
在cmd命令控制台,依次输入如下命令

  1. adb shell
  2. cd /data/anr/
  3. ls (会有一个traces.txt)
  4. more traces.txt

经历以上操作就可以把异常信息再控制台中输出了,我们可以把这些异常信息复制下来交由开发人员去分析。

Monkey Script

执行Monkey脚本命令 : adb shell monkey -f <scriptfile> <event-count>

1.DispatchTrackball命令(轨迹球事件)

可以帮我们完成点击操作

DispatchTrackball(long downtime,long eventide,int action,folat x,float y,float pressure,float size,int metstate,float xprecision,float yprecision,int device,int edgeflags)

downtime : 记录键最初被按下的时间
eventide : 事件发生的时间
action : 具体的操作过程
x,y : 坐标点
pressure : 压力的大小,范围是0-1
size : 触摸的一个即使值,范围是0-1
metstate : 当前按下met键的标识
xprecision : x坐标的精确值
yprecision : y坐标的精确值
device : 事件的来源,事件的来源是0-x,0表示不来自物理设备
edgeflags : 表示超出屏幕范围

action 0代表按下,1代表抬起,x和y代表坐标点

2.DispatchPointer命令(点击事件)

DispatchPointer(long downtime,long eventide,int action,folat x,float y,float pressure,float size,int metstate,float xprecision,float yprecision,int device,int edgeflags)

downtime : 记录键最初被按下的时间
eventide : 事件发生的时间
action : 具体的操作过程
x,y : 坐标点
pressure : 压力的大小,范围是0-1
size : 触摸的一个即使值,范围是0-1
metstate : 当前按下met键的标识
xprecision : x坐标的精确值
yprecision : y坐标的精确值
device : 事件的来源,事件的来源是0-x,0表示不来自物理设备
edgeflags : 表示超出屏幕范围

action 0代表按下,1代表抬起,x和y代表坐标点

3.DispatchString命令(输入字符串事件)

DispatchString(String text)

4.LuanchActivity命令(启动应用)

LuanchActivity(Package,Activity)

5.UserWait命令(等待事件)

UserWait(1000) , 传入毫秒数

5.DespatchPress命令(按下键值)

DespatchPress(int keycode) , #keycode 66 返回键

Monkey Script 实践

缺点:执行脚本过程中无法实现截屏操作

脚本后缀名.script

1.启动app
2.点击输入框
3.输入查询词
4.点击键盘上的回车
5.点击搜索按钮
6.等待结果出现
7.点击clear按钮

范例脚本:

解释:

在获取点击坐标点时我们需要用到android_sdk里面tools文件夹下的一个uiautomatorviewer的一个工具
使用:cmd命令进入到tools文件夹下,然后输入 ./uiautomatorviewer

uiautomatorviewer界面:
左上角两个手机图标是获取当前Android设备的界面

右下角bounds两个坐标点表示控件的左上角和右下角的坐标点。

脚本使用首先要从电脑push到手机中,命令如下:
adb shell ***.script /data/local/tmp/
此时继续执行脚本命令:
monkey -f ***.script <event-count>
而此时回车并不能启动起我们指定的Activity而是超级用户,这里寻找原因就是我们的LaunchActivity()命令行有问题
之所以出现这个问题是因为在app的AndroidManifest.xml里面activity标签没有android:exported="true"这一行代码,这样外部就无法调用起Activity。
在一系列修改完成之后,在脚本里还需要在LaunchActivity()里将后面的Activity加上完整路径,包名+类名,这样才能正确启动

MonkeyRunner

1.MonkeyRunner API-alert(警告框)

void alert(String message,String title,String okTitle)

这里的脚本是一个python脚本,后缀名为.py

第一行表示是用Python编写的
第二行表示编码格式
第三行表示需要导入我们测试的模块
第四行表示执行alert命令

执行命令:
monkeyrunner ****.py
monkeyrunner 在android-sdk/tools下面

2.MonkeyRunner API-waitForConnection

等待设备连接,如果有多个device id,则需要指明具体哪个设备

waitForConnection(float timeout,String deviceId) , timeout单位为秒

3.MonkeyRunner API-drag

拖动

drag(tuple start,tuple end, float duration ,integer steps) , timeout单位为秒
start : 起始点
end : 目标点
duration : 手势持续时间
steps : 插值点的个数,默认为10

4.MonkeyRunner API-press

按键

press(String keycode,dictionary type) ,
keycode 名:DOWN,UP,DOWN_AND_UP

5.MonkeyRunner API-startActivity

启动应用

startActivity(package+'/'+activity)

6.MonkeyRunner API-touch

点击

touch(integer x,integer y,integer type)
x,y : 坐标值
type : DOWN,UP,DOWN_AND_UP

7.MonkeyRunner API-type

输入

type(String text)

8.MonkeyRunner API-takeSnapshot

截屏

MonkeyImage takeSnapshot(),会返回MonkeyImage 类型数据

9.MonkeyRunner API-sameAs

图像对比

boolean sameAs(MonkeyImage other,float percent)

10.MonkeyRunner API-writeToFile

保存图像

void writeToFile(String path,String format)

path : 保存路径
format : 保存格式,如.jpg,.png,.jpeg

MonkeyRunner实践

压力测试至此就告一段落了,本文是通过视频来实时做的文章笔记,想要看原视频的链接点这里

Android App专项测试-压力测试篇相关推荐

  1. app功耗测试软件,Android app专项测试之耗电量测试

    前言 耗电量指标 待机时间成关注目标 提升用户体验 通过不同的测试场景,找出app高耗电的场景并解决 01需要的环境准备 1.python2.7(必须是2.7,3.X版本是不支持的) 2.golang ...

  2. Android app专项测试之耗电量测试

    00 前言 耗电量指标 待机时间成关注目标 提升用户体验 通过不同的测试场景,找出app高耗电的场景并解决 01 需要的环境准备 1.python2.7(必须是2.7,3.X版本是不支持的) 2.go ...

  3. android测试篇(四)android专项测试之压力测试

    前言 抄袭文章来源:Android App专项测试-压力测试篇 小伙伴们大家好,今天主要分享的主题是Android App专项测试.如何进行Android App专项测试压力测试呢?我们主要通过And ...

  4. EMQTT测试--压力测试

    之前写过一篇是关于emqtt安装和测试的,不过是在windows上 这次介绍一下压力测试 压力测试选择emqtt官方推荐的emqtt_benchmark emqtt官网推荐 emqtt_benchma ...

  5. Android App 性能优化系列结语篇

    Android App 性能优化系列结语篇 原文出处:http://gold.xitu.io/post/581f4ad667f3560058a33057 关于Android App的优化, 从第一篇的 ...

  6. 负载测试压力测试强度测试稳定性测试

    你看,如标题所示,测试可以分为这么多种.实际上,这只是一种性能测试的分类.按照不同的标准,还可以有别的划分. 1.按开发阶段:单元测试.集成测试.系统测试.验收测试 2.按测试实施组织:α测试(开发方 ...

  7. 那些不得不说的Android App专项测试必备命令,你值得拥有!

    前言:平常工作中需要对Android 进行专项测试,我就稍微把在工作中常用的命令整理出来了,希望能够帮助到大家!

  8. 伪mac android,Mac,android sdk,monkey压力测试,真机

    1.安装Android SDK http://down.tech.sina.com.cn/page/45703.html 新浪本地下载 安装android sdk,将android-sdk-macos ...

  9. APP测试之Monkey压力测试(二)

    ------·今天距2020年85天·------ 这是ITester软件测试小栈第51次推文 大家好,我是coco小锦鲤 欢乐的假期即将走远 学习的号角继续吹响 延续昨天Monkey(一) 今天进军 ...

最新文章

  1. XCode 导入头文件不提示解决
  2. linux安装perl编译环境,CentOS7 安装 perl 环境
  3. 推荐算法炼丹笔记:序列化推荐算法Bert4Rec
  4. 【Linux】一步一步学Linux——dpkg命令(269)
  5. python 后缀 .py .pyc .pyw .pyo .pyd的区别
  6. 小型开发团队的测试误区
  7. office套件_【office】Android版微软办公套件Office独立版一体化
  8. 游戏筑基开发之学生管理系统数据结构及数据结构解析图(C语言)
  9. linux挂载硬盘不适合重启,Linux分区g挂载目录不重启挂载硬盘
  10. Linux邮件服务器怎么用?
  11. 日志易智能日志分析助力农信银双十一运维降本增效
  12. ggplot2作图之NMDS图
  13. 计算机硬盘显示在右边,电脑中出现一个系统保留磁盘分区怎么解决
  14. 《数据结构》实验三:单链表
  15. 2019依图科技笔试题
  16. VMware更改虚拟机网卡的MAC地址
  17. 名帖63 欧阳询 楷书《九成宫醴泉铭》
  18. Spring Cloud入门-Admin服务监控中心(Hoxton版本),java高级编程技术
  19. uniapp无网络提示
  20. 毕业至今,微博写给自己的感悟的话

热门文章

  1. 不联网安装 SQL server 2012 的问题
  2. 安装perf后,执行perf命令报错。
  3. 剑指offe面试题8 旋转数组的最小数字 (java实现)
  4. Matlab优化工具箱——Optimization Toolbox
  5. ff14服务器延迟滑步,ff14 5.0黑魔怎么玩_最终幻想14 5.0黑魔输出手法
  6. IDEA做数据库操作时的一个莫名其妙的错误
  7. 如何实现一个漂亮的微信小程序朋友圈、表白墙、校内圈(后台篇)
  8. 电脑配置低android模拟器,安卓模拟器低配置版哪个好 电脑内存再小也不怕
  9. Linux测试主机之间连通性和端口是否开放的方法
  10. idea配置阿里云镜像失败解决