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

前言

抄袭文章来源:Android App专项测试-压力测试篇

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

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

第一部分 背景

探讨两个问题:

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

第二部分 理论

  1. 手工测试场景
  2. 自动测试场景
  3. Monkey工具
  4. ADB命令
  5. Monkey Script
  6. MonkeyRunner
  7. 压力测试结果
  • 什么是Crash?
  • 什么是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
在这里插入图片描述
Monkey和MonkeyRunner区别:
在这里插入图片描述
MonkeyRunner APIs
在这里插入图片描述
MonkeyRunner 测试类型
在这里插入图片描述
压力测试结果

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

Crash

相对于我们app来说就像是战斗机的起火爆炸
在这里插入图片描述
ANR

Application Not Responding,如下图:
在这里插入图片描述

第三部分 实践

1.准备测试环境:

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

2.一个APP的压测实践

压测实践Step1:

  • 开发人员选项中,将USB调试勾选上
    在这里插入图片描述
    压测实践Step2:

确认手机和电脑已经连接成功,多种方式,这了介绍命令行模式
cmd窗口输入adb devices

在这里插入图片描述
如果cmd输入adb提示“不是内部或外部命令”:

在环境变量下配置adb地址即可
在这里插入图片描述
在这里插入图片描述
adb全称:android调试桥(android debug bridge),我们一般连接手机都是下载该连接桥才可以和AS代码进行真机调试

压测实践step3:

  • 安装测试app:adb install 路径/xx.apk

压测实践setp4:

  • 发送测试指令:adb shell monkey 1000

输出结果如下:

在这里插入图片描述
在这里插入图片描述
什么时候会出现两行ActivityResuming的信息:当一个app从前台调入后天,又从后台调入前台就会出现这么一个信息。

Event injected:700 表示我们输入的随机测试1000个事件,他只完成了700个,并且出现了相应的报错。如果这个数字与我们输入的数字相等,表示没有异常。如果改数字小于我们输入的数字,则表示有异常出现

java.lang.SecurityException: You need MANAGE_USERS permission to: check if specified user a managed profile outside your profile group

这里不具体讨论该bug,这边采用随机1000个时间爆出来的bug

压测实践step5:

  • 获取程序包名:adb shell “logcat | grep START”,还有一种方法,cmd命令中先:adb shell,然后:logcat | grep START
    在这里插入图片描述

|表示前一个命令的输出作为下一个命令的输入 grep START表示抓取日志中包含有START标签的日志进行输入。

这里我们需要关注cmp= 后面的内容,在/之前的是app包名,/之后当前Activity类名

压测实践step6:

  • 给指定的包打压力: adb shell monkey -p [packagename] [次数,例如1000],如 adb shell monkey -p com.gxgroup.xx1000
    在这里插入图片描述
    慢慢解决吧,操!!!

Monkey高级参数的应用

1.throttle参数

  • 指定实践之间的间隔: adb shell monkey --throttle,例如 adb shell monkey -p com.gxgroup.pkpt --throttle 1000 10

2.seed参数

  • 随机生成数的seed值:adb shell monkey -s <event_count> ,例如:adb shell monkey -p com.gxgroup.pkpt -s 100 50,在重复执行一遍命令就可以复现上一条命令执行的结果,这里seed次数100和执行次数50,保持遇上一条命令数目相同遍复现上一次结果(这里说的不好理解,往下看,后面有针对性描述)

3.触摸事件

  • 设定触摸事件的百分比 : adb shell --pct-touch,意思就是monkey所有操作中点击事件占多大比例。例如 : adb shell monkey -v -p com.android.calculator2 --pct-touch 100 100. ‘-v’参数表示列出所有操作详情。如下图,执行的操作,其中Action_down和Action_up是一个点击事件,成对出现。
    在这里插入图片描述
    4.动作事件
    设置动作事件百分比 : adb shell monkey --pct-motion ,这个百分比和你其他事件之和要等于100。如果不等于100,它就会把剩余的比例随机操作。例如 : adb shell monkey -v -p com.android.calculator2 --pct-touch 50 --pct-motion 30 100,执行后各事件百分比如下:
    在这里插入图片描述
    5.轨迹球事件

  • 设定轨迹球事件的百分比 : adb shell monkey --pct-trackball 目前没实践过,我也不知道干啥的

6.基本导航事件

  • 设定基本导航事件的百分比,输入设备的上下左右 : adb shell monkey --pct-nav 目前没实践过,我也不知道干啥的

7.主要导航事件

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

8.系统导航事件

与手机硬件相关的

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

9.启动Activity事件

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

10.不常用事件

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

11.崩溃事件
Crash

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

12.超时事件

ANR

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

CRASH结果析取

实践过程:

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

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

ANR异常测试结果析取

实践过程:

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

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

手动点击获得ANR异常,查看日志方法:

在cmd命令控制台,依次输入如下命令

  • adb shell
  • cd /data/anr/
  • ls (会有一个traces.txt)
  • more traces.txt

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

Monkey Script

  • 执行Monkey脚本命令 : adb shell monkey -f

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) , 传入毫秒数

6.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实践

在这里插入图片描述
在这里插入图片描述

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

总结

以上压力测试后面的涉及到代码的基本上我也是直接拷贝过来的,也不打算去实践,如果有兴趣的可以去认真看看,这里更偏重于针对测试人员

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android专项测试是一种针对Android操作系统进行的测试,旨在评估Android应用程序的质量和性能。在开发Android应用程序之前,进行专项测试可以帮助开发人员发现并解决潜在的问题,以确保应用程序能够在各种设备上稳定运行。 Android专项测试包括以下方面: 1. 兼容性测试测试应用程序在不同版本的Android操作系统和不同型号的设备上的兼容性。确保应用程序可以在各种设备上按预期运行,不会出现崩溃或错误。 2. 功能测试测试应用程序的各种功能是否按照设计要求正常运行。包括测试用户界面的交互、各种用户操作的响应和结果等。 3. 性能测试测试应用程序的性能,包括内存占用、CPU利用率、启动时间、响应时间等。确保应用程序在各种情况下都能够快速响应用户操作,并且在长时间运行时不会导致设备负载过高。 4. 安全性测试测试应用程序的安全性,包括对数据传输的加密、用户身份验证的安全性等。确保应用程序在处理用户敏感信息时能够保护用户的隐私和安全。 5. 压力测试:对应用程序进行长时间、高负载的测试,以确定其在长时间运行和并发访问时的表现情况。 通过进行Android专项测试,开发人员可以发现并修复潜在的问题,提高应用程序的质量和用户体验。这对于确保应用程序的可靠性、安全性和性能至关重要,也能够增加用户对应用程序的信任度,提高用户的满意度。 ### 回答2: Android专项测试是一种针对Android操作系统进行的测试Android是一种常用的开源移动操作系统,广泛应用于智能手机、平板电脑等移动设备上。为了确保Android应用程序的质量和稳定性,需要进行专门的测试Android专项测试主要包括如下几个方面: 1. 兼容性测试测试Android应用程序是否能在不同版本的Android操作系统上正常运行。这涉及到测试应用程序在不同分辨率、不同屏幕尺寸的设备上的表现。 2. 功能测试测试Android应用程序的功能是否按照设计和需求正确运行。这包括对应用程序的各种功能模块进行测试,如用户界面、数据处理、网络交互等。 3. 性能测试:评估Android应用程序的性能,包括运行速度、响应时间、内存占用等。通过性能测试,可以找出应用程序中存在的性能瓶颈,以便优化和改进。 4. 安全测试:检查Android应用程序的安全性,包括用户数据的保护、权限管理等方面。通过安全测试,可以防止应用程序受到黑客攻击或数据泄露等安全问题。 5. 用户体验测试:评估Android应用程序的用户体验,包括界面设计、交互方式、功能布局等。通过用户体验测试,可以提高应用程序的易用性和用户满意度。 综上所述,Android专项测试是为了保证Android应用程序的质量和稳定性而进行的一系列测试。通过兼容性、功能、性能、安全和用户体验等方面的测试,可以发现和解决问题,提升应用程序的质量。 ### 回答3: Android专项测试是一种针对Android操作系统的应用程序进行的测试Android系统是目前世界上最流行的移动操作系统之一,它在智能手机、平板电脑和其他移动设备中广泛使用。为了确保Android应用程序的质量和稳定性,进行专项测试是至关重要的。 Android专项测试通常包括以下内容: 1. 兼容性测试测试Android应用程序在不同版本的Android操作系统上的兼容性。由于Android的版本众多,设备的屏幕尺寸、处理器和内存等硬件特性也各异,因此兼容性测试可以确保应用程序在不同环境下正常运行。 2. 功能测试测试应用程序的各项功能是否按照设计要求正常工作。包括用户界面、数据输入、数据处理、网络通信等方面的功能测试。这可以确保应用程序的各项功能正常,不会出现错误和异常。 3. 性能测试测试应用程序在不同负载下的性能表现。包括启动时间、响应时间、内存占用和电池消耗等方面的性能测试。这可以评估应用程序的性能是否满足用户的需求,并找出性能瓶颈和优化方向。 4. 安全测试测试应用程序的安全性。包括数据保护、身份验证、权限管理和代码漏洞等方面的安全测试。这可以确保应用程序不会泄露用户的敏感信息,并能有效防御恶意攻击。 Android专项测试对于开发者和用户来说都是非常重要的。对于开发者来说,通过专项测试可以确保应用程序的质量和稳定性,提高用户体验,增加用户的信任和忠诚度。对于用户来说,专项测试可以提供安全可靠的应用程序,避免因应用程序错误导致的数据丢失和隐私泄露。 总之,Android专项测试是确保Android应用程序质量和稳定性的重要手段,对于开发者和用户来说都是非常有价值的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值