app专项测试-兼容测试
对于web兼容测试:不同系统,不同浏览器,相同浏览器的不同版本
对于app的兼容测试:不同型号,不同系统,不同屏幕大小,不同分辨率的手机
手机的机型比较多,品牌比较多,分辨率比较多,屏幕大小比较多,造成需要测试的机型比较多
手工测试:
迭代测试:需要对Top50的机型进行测试
上线前:需要对Top20/10的机型进行测试,对之前有问题的机型进行测试
云平台测试:
testin
wetest
蒲公英云测
关注点:
1.操作系统 ios 8 9 10 11 android 5.0 6.0 7.0
2.分辨率 800*480 960 * 640
3.硬件的系统架构(32位 ,64 位)
4.rom 厂商 底层服务 。 miu oppo
5.网络兼容:蜂窝 wifi 弱网 流量
APP专项测试-交叉事件(中断测试)
在某个操作的过程中,另一个事件或者操作对其进行了干扰,或者在使用某个功能的过程中,同时使用另一个功能。验证多个APP同时使用时,是否有影响。
使用APP的过程中拨打/接听电话
使用APP的过程中发送/接收短信
使用APP的过程中发送/接收邮件
使用APP的过程中发送/接收微信
使用APP的过程中闹钟响了、使用计算器、相机、 查看天气等
使用APP的过程中使用蓝牙发送/接收文件
app运行,切换无线网络
APP专项测试-消息推送测试
推送设置:全部推送、部分推送 消息形式:弹窗、消息通知栏推送 测试点
测试消息推送按照设置的规则进行推送。
APP在后台运行下,能收到推送消息。
APP在锁屏状态下,能收到推送消息。
APP在网络断开重连后,能收到推送消息。
设置不接收推送消息,不能收到推送消息。
设置免打扰时间段,在免打扰的时间段内不能收到推送消息。在非免打扰的时间段内,能收到推送消息。
推送消息针对登录用户时,使用A登录后退出,使用B登录,应该只对B用户推送,也就是最后一个登录的用户。
使用真机来测试。
APP专项测试-稳定性测试
在一定压力下,长时间操作,观察app是否有功能问题、内存泄露、闪退、崩溃等问题
一般使用工具去模拟用户的操作:点击/旋转/放大/滑动等事件,通过大量的随机事件,来验证程序的稳定性
monkey工具去模拟稳定性测试
monkey工具
1)是Android自带的一个程序,放在system/bin/monkey。
2)可以模拟人的操作
3)通过adb命令来启动monkey工具
monkey命令
1)执行操作1000次,adb shell monkey -v-v-v 1000
2)查看monkey帮助文档 adb shell monkey --help
-p 指定包
[--ignore-crashes] [--ignore-timeouts] [--ignore-security-exceptions]
一般情况下,如果 monkey执行过程中碰到崩溃,超时,其他异常的情况,会停止运行,可以设置忽略,让monkey继续运行
-s 设置seed种子
-v 详细的日志信息 -v-v更详细的信息 -v-v-v最详细的
11个事件 设置事件的比重
[--pct-touch PERCENT] 触碰事件
[--pct-motion PERCENT] 滑动事件
[--pct-trackball PERCENT] 轨迹球事件
[--pct-syskeys PERCENT] 系统按键事件
[--pct-nav PERCENT] 基本导航栏事件
[--pct-majornav PERCENT] 主要导航栏事件
[--pct-appswitch PERCENT] app切换事件
[--pct-flip PERCENT] 键盘相关事件
[--pct-anyevent PERCENT] 任意事件
[--pct-pinchzoom PERCENT] 二指缩放
[--pct-permission PERCENT] 权限相关
3)设置事件比重
adb shell monkey --pct-touch 40 --pct-motion 20 --pct-trackball 20 --pct-pinchzoom 20 -v-v-v 1000 1>d:\apks\log.txt 2>d:\apks\error.txt
4)指定包
查看包名:adb shell pm list packages
adb shell monkey --pct-touch 40 -p com.mt.mtxx.mtxx --pct-motion 20 --pct-trackball 20 --pct-pinchzoom 20-v-v-v 1000 1>d:\apks\log.txt 2>d:\apks\error.txt
5)忽略异常
--ignore-crashes --ignore-timeouts --ignore-security-exceptions
adb shell monkey --pct-touch 40 -p com.zzb.memoryleak --pct-motion 20 --pct-trackball 20 --pct-pinchzoom 20 -v-v-v --ignore-crashes --ignore-timeouts --ignore-security-exceptions 1000 1>d:\apks\log.txt 2>d:\apks\error.txt
6)设置种子
adb shell monkey -s 1785467127536 --pct-touch 40 -p com.zzb.memoryleak --pct-motion 20 --pct-trackball 20 --pct-pinchzoom 20 -v-v-v --ignore-crashes --ignore-timeouts --ignore-security-exceptions 1000 1>d:\apks\log.txt 2>d:\apks\error.txt
分析日志文件
在日志中搜索ANR CRASH ERROR EXCEPTION等,看是否有异常
ANR:无响应
crash:崩溃
error:异常
exception:异常
常见的Java异常
1. NullPointerException (空指针异常)。
原因:尝试调用未初始化对象的方法或属性,例如访问空引用对象的成员变量。
解决:使用 Optional 类包装对象,或在调用前显式检查对象是否为null。
2. ArrayIndexOutOfBoundsException (数组越界异常)。
原因:访问数组时索引超过数组长度范围,例如访问长度为5的数组的第6个元素。
解决:通过 arr.length 检查索引范围,或使用增强型 for 循环遍历数组。
3. ClassCastException (类型转换异常)。
原因:强制将对象转换为不兼容的类型。
解决:转换前使用 instanceof 关键字校验类型。
4. ArithmeticException (算术异常)。
原因:数学运算错误,如除数为零。
解决:通过条件判断避免非法运算,例如检查除数是否为0。
常见编译时异常
1. IOException (输入输出异常)。
原因:文件不存在、网络中断等外部因素导致IO操作失败。
解决:使用 try-catch 捕获异常,或在方法签名中声明 throws 。
2. FileNotFoundException (文件未找到异常)。
原因:尝试打开不存在的文件路径。
解决:使用 File.exists() 方法检查文件是否存在。
APP专项测试-性能测试
服务端的性能:响应事件,吞吐量,错误率,并发用户数 cpu 内存 网络io 磁盘io
app的性能:app的启动时间,界面响应时间,内存,cpu的使用情况,单位时间内的流量消耗,单位时间内的耗电 量,FPS(帧率)
测试方式:1)adb命令 2)使用工具prefdog(性能狗工具)
app的启动时间
冷启动:app在后台没有运行的情况下,启动时间应该在1.5s以内
热启动:app在后台运行的情况下,启动时间应该在1s以内
命令:adb shell am start -W 包名/.activity
aapt dump badging d:/apks/meitu8.6.2.0.apk
adb shell am start -W com.mt.mtxx.mtxx/.TopViewActivity
界面响应时间
手工测试:掐表
自动化测试:使用python代码去记录时间差
内存,cpu
空闲状态下(将app放在后台运行),查看内存,cpu的使用情况
中等状态下(手动使用app一段时间),查看内存,cpu的使用情况
高强度状态下(使用monkey去执行),查看内存,cpu的使用情况
内存:
adb shell dumpsys meminfo 包名
adb shell dumpsys meminfo com.mt.mtxx.mtxx
1024byte=1kb
1024kb=1mb
1024mb=1G
1024G=1T
CPU
空闲状态下(将app放在后台运行),查看cpu的占比 0%
中等状态下(手动使用app一段时间),查看cpu的占比 <30%
高强度状态下(使用monkey去执行),查看cpu的占比 <50%
adb shell dumpsys cpuinfo 查看所有的app的cpu占比
adb shell dumpsys cpuinfo | findstr "mt" 查看某个包的cpu占比
adb shell dumpsys cpuinfo 包名
adb shell dumpsys cpuinfo com.mt.mtxx.mtxx 根据包名查看
adb shell top -d 3| findstr com.mt.mtxx.mtxx 每个3s去打印cpu的使用
adb shell top -s 10 根据内存占比情况排序去查看内存,cpu的使用
adb shell top -s 9 根据cpu占比情况排序去查看内存,cpu的使用
FPS
帧率:当帧率高于24时,就认为手机屏幕是连贯的,当app是游戏app是,需要高于30,否则会出现卡顿
前提打开:开发者选项--》Gpu呈现模式--》adb shell dumpsys...
adb shell dumpsys gfxinfo 包名
adb shell dumpsys gfxinfo com.mt.mtxx.mtxx
60的帧率 60/s 60/1000ms 1000/60=16.7
Draw:表示在Java中创建显示列表部分中,OnDraw()方法占用的时间
Prepare:准备时间
Process:表示渲染引擎执行显示列表所花的时间,view越多,时间就越长
Execute:表示把一帧数据发送到屏幕上排版显示实际花费的时间,其实是实际显示帧数据的后台缓存区与前台缓冲区交换后并将前台缓冲区的内容显示到屏幕上的时间
将上面的四个时间加起来就是绘制一帧所需要的时间,如果超过了16.67就表示掉帧了
单位时间的耗电量
adb shell dumpsys battery
单位时间的流量消耗
adb shell cat /proc/进程id/net/dev
进程id: adb shell pidof 包名
adb shell pidof com.mt.mtxx.mtxx
adb shell cat /proc/3280/net/dev
Recevice: 表示收包 Transmit: 表示发包 bytes: 表示收发的字节数 packets: 表示收发正确的包量 errs: 表示收发错误的包量 drop:表示收发丢弃的包量
性能狗
perfDog工具
https://perfdog.qq.com/article_detail?id=10089&issue_id=0&plat_id=1
a. 非安装模式:手机即插即用,无需任 何设置及安装,使用非常简单,但手机屏幕上没有实时性能数据显示。
b. 安装模式: 需要在手机上自动安装 PerfDog.apk,手机屏幕上有实时性能数据显示(允许USB应用安装和PerfDog悬浮窗 管理权限),启动PC版 PerfDog.exe,则会在手机上自动PUSH安装PerfDog.apk,具体安装类似各个手机 厂商安装第三方APP提示安装即 可。(注:由于很多手机安装需要账号密码,导致无法自动安装,如果自动安装失败,则会把安装文件 PerfDog.apk释放到当前文件夹里,手动安装PerfDog.apk即可)。此模式下,在测试过程中,可能由于系统资源 紧缺会kill PerfDog显示app(手机界面性能数据显示),但不影响正常测试功能
弱网测试(抓包)
APP在使用过程中,可能会在公交、地铁、山上等地方使用,网络可以会出现波动、超时等。一般我们要模拟弱网环境, 测试点 看是否存在界面卡死、崩溃等异常。 提示是否有合理的重连机制。 超时后的提示信息是否符合用户的习惯。
模拟弱网环境:
charles 收费的 window mac
Net-simulator 专业的模拟弱网工具
fiddler工具:可以用于web程序、app程序的抓包,模拟浏览器和手机的弱网环境 只能用于window系统
弱网的环境模拟:
1)配置fidder:允许外界设备去连接fiddler
2)让手机和fiddler处于同一个网络环境
3)配置手机的ip为fiddler所在电脑的ip, 配置手机的端口号为fiddler的端口号,保证他们能建立连接
4)手机上下载配置证书,此时手机和fiddler就建立了连接
5)在fiddler上进行弱网的配置