APP稳定性测试

稳定性 自动化测试介绍

一、为什么要做稳定性测试

  • 影响严重、恢复慢:APP发生线上crash可能造成资损、故障、功能不可用和用户流失等,可能需要重新发版解决
  • 影响研发效能:测试过程中发现crash可能会block测试,影响项目进度,影响交付效率

crash的现象都是闪退、卡死但是根本原因我认为是对内存使用不正当造成的,让我们看下常见的crash有哪些类型?

了解安卓iOS系统

问题和思考:
1、iOS和Android 系统的区别是啥?
系统架构不同:
安卓系统是linux架构、苹果ios系统是unix系统—linux系统是UNIX操作系统的一个克隆版本

两者运行机制不同:
IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制

后台策略:
苹果是假后台,当你回到主界面的时候之前的软件就相当于暂停使用,不再消耗RAM
Android是真后台,而安卓是真后台,即使你退出软件,软件也会在后台自启,继续占用你的RAM,而RAM是有限的,当RAM剩余太少的时候你就会感觉到卡顿。同时,后台的程序运行也会占用CPU资源,使手机处理能力下降,这也是安卓手机需要通过使用更高的配置来提高流畅度的原因。

开源性:
Android是开源的,使用的语言是java。ios是封闭的,不是开源的,使用的语言是object-c语言。开发总的来说,安卓设备很多,要考虑适配

安全性:
iOS比Android更安全,毕竟iOS是封闭的,不是开源的!Android是开源的

导致crash等异常的常见原因分析

Crash:客户端程序运行时遇到无法处理的错误或异常,导致退出应用程序(崩溃);

1.空指针异常
java.lang.NullPointerException

引起NullPointer有两种比较常见的原因:
直接使用一个方法返回的数据,不做NullPoint判断,或不做try catch保护,因此而造成的NullPointer,通常是因为使用者没有考虑到方法会在某些特殊情况会返回null
作为一个公共方法,在不做入参检查的情况下,参数使用前先判定是否为空,是否存在需要引用的元素,防止因为溢出或引用类型不符合的变量导致错误);

2.堆栈溢出(ooM)
java.lang.OutOfMemoryError

OutOfMemoryError通常是两种原因,如下:
存在严重的内存泄露,这种问题如果有内存快照通常都是比较好解决的
对内存的使用不合理,比如内存中有相同图片,对图片缓存的大小设置不合理,对可能造成OOM的地方未捕获。在Android中decode一张图片通常需要比较大的内存,在decode图片的时候也很容易出现OOM,这种情况通常需要进行捕获;
内存泄露,当手机装了一大堆软件之后就会变得非常卡,内存泄露之后正在运行的程序越来越感觉内存不够用,严重的就是不断卡顿然后Crash);

3.数组越界
java.lang.IndexOutOfBoundsException && java.lang.ArrayIndexOutOfBoundsException

这两个异常类似,出现这种异常通常是因为多线程处理数据不同步,出现了越界的情况。比如一个线程在操作一个List的时,另一个线程清空了这个List,这时就会抛出这类异常;
使用如果没有进行new一个对象,直接进行使用,添加元素等等操作,会出现错误 ;

4.应用进程被其他进程中断(如任务管理器);
5.系统反应缓慢,导致应用主线程卡死,请求响应超时;
6.CPU负载过高;
7.控件不匹配

测试过程中遇到crash ,如何查看日志?即使用adb命令,在什么情况下需要使用adb抓取日志呢?

一般的情况下,我们在做APP测试的时候,其实并不需要经常使用adb去抓取我们的日志,因为正常的情况下都是会有预期结果和实际结果作对比的。真正需要用到adb抓取日志的情况,就是在我们测试的过程中出现了异乎寻常的过程,比如测试过程中系统突然卡住不能动了、系统直接(Crash)崩溃掉了、应用程序无响应(ANR),即出现闪退或者异常的情况下就可以使用adb抓取日志来分析发生的原因,以便于更好的提bug给到开发。

日志抓取
1.手机连上电脑,打开开发者选项,打开USB调试
2.打开cmd,输入命令adb devices查看设备连接成功
命令框输入查看手机的所有日志 回车执行
adb logcat

只获取该应用的日志,回车执行
adb logcat | findstr 应用包名

开始抓取日志并保存到D盘的adb logcat >D:\crash.txt

等3分钟左右

ctrl +C 停止抓取
打开crash.txt文件(或者可以直接在命令框检索)
ctrl +F 搜索以下关键字 查看闪退的日志

Monkey测试介绍

一、什么是 Monkey 测试
Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对应用程序客户端的稳定性测试;
通俗来说,Monkey 测试即“猴子测试”,是指像猴子一样,不知道程序的任何用户交互方面的知识,就对界面进行无目的、乱点乱按的操作;
Monkey 测试是一种为了测试软件的稳定性、健壮性的快速有效的方法;
Monkey 程序是 Android 系统自带的,由 Java 语言写成,在 Android 文件系统中的存放路径是: /system/framework/monkey.jar;
Monkey 程序需要通过 adb 来运行

二、操作步骤
1、安装并配置好 adb 环境,并通过 adb 连接好设备;/2、获取被测应用的包名;

1.adb shell
2.dumpsys activity | grep mFocusedActivity

3、执行 Monkey 命令进行测试

三、Monkey 命令说明
adb shell monkey + 行为参数 + “>” + {日志保存路径}
示例:

adb shell monkey -p com.xxx.myapp --throttle 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000000 > d:\mylog.log
-p 被测应用包名
--throttle n 每个事件之间的时间间隔  毫秒
--ignore-crashes   忽略crash,不写的话,遇到crashmonkey自动退出
--ignore-timeouts 忽略超时,若发生超时,将继续发送事件给系统,直到事件计数完成(若不设置此项,在遇到超时时,Monkey 将停止运行)
--ignore-security-exceptions  异常错误
--ignore-native-crashes 忽略本地代码导致的崩溃
--monitor-native-crashes  监视崩溃时的本地代码
-v 每个 -v 都将增加反馈信息的级别。共3个级别
 

转载文章
https://blog.csdn.net/weixin_37124805/article/details/122846710

四、结果分析整理
从 Monkey 日志中看问题:
1、程序无响应的问题:在日志中搜索 “ANR”
2、 崩溃问题:在日志中搜索 “Exception”,Java常见异常:
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
违法访问错误:IllegalAccessError
内存不足错误:OutOfMemoryError
堆栈溢出错误:StackOverflowError
其他

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值