App专项测试

app基础知识

一、主流操作系统

android 开发语言: Java、Kotlin

ios开发语言:objective-c、swift

二、移动应用分类

1、本地app(原生):元素和框架都安装在本地,只有部分数据保存在服务器
优点:支持无网络访问
支持调用本地服务(相机、相册、通信、GPS、摄像头等)
响应熟读较快
缺点:开发难度、成本高、周期长
优化不好的话本地内存占用会比较高
用户升级体验较差
发布周期较长
2、WebAPP
基于所有元素的框架都是通过网络从服务器获取
优点:
开发难度、成本较低
本地内存占用较低
用户升级体验极佳
发布简单
缺点:
不支持无网络访问
不支持调用本地服务(相机、相册、通信、GPS、摄像头等)
响应时间较慢,且受网络环境影响较大
3、混合型app
单view混合型
一个view同一时间只存在本地view或者webview中的一种,本地或web的视图交替出现,web
视图作为本地的补充
多view混合型
一个view同一时间同时存在本地view和webView,本地或web的视图同时出现在一个view
中,web视图作为本地的补充

三、App测试与Web测试的区别

系统架构
APP:C/S 客户端 – 服务端
WEB:B/S 浏览器 – 服务器
测试环境
APP:除了服务器环境之外,还要考虑客户端环境(手机型号、系统版本、分辨率、ROM等)
WEB:基本只需要考虑服务器环境
测试方法
WEB:链接测试、兼容性测试(浏览器、分辨率)
APP:安装/卸载测试、升级测试、交叉事件测试、兼容性测试(手机型号、系统版本、分辨率、
ROM等)、push(消息推送)测试、免登录测试、App客户端性能测试(电量、流量、稳定性、
压力、弱/无网络)

四、App测试工具

抓包工具:
tcpdump
wireshark
fiddler 默认端口:8888
charlies 默认端口:8888
安卓测试工具:
ADB:安卓调试桥,用来做专项测试
monkey:用来做压力、稳定性测试
aapt:Android资源打包工具

五、App专项测试

1、安装&卸载测试
安装测试测试点:
安装包能否正常完成安装
安装完成后,app能否正常运行、使用
安装完成后,图标及应用名称是否正确
安装后权限的设置
存储空间不足的情况下进行安转
已经安装的应用,进行重复安装,是否会覆盖之前版本
安装完成后的目录文件结构是否完整
安装过程中,遇到中断的况(断电、死机等),如何处理
卸载测试测试点:
卸载是否有提示信息
卸载后是否有残留文件
卸载用户数据及隐私文件时,是否有提示信息
卸载后,修改的权限是否恢复
卸载中断后,已卸载的文件是否恢复
2、 升级测试
强制升级测试点:
升级是否有提示
升级提示框不能关闭
应用在提示框外的部分,提示框不能消失
非强制升级测试点:
升级是否有提示
关闭升级提示提示框后,应用是否能继续使用
新版本用户与旧版本用户能否正常进行交互
跨版本升级升级能否正常进行
通用测试点:
升级完成后应用能否正常运行、使用
升级后新的功能或者有更新的功能是否按照新的需求逻辑进行处理
升级过程中,遇到中断情况,如何处理
3、 交叉事件测试、前后台切换使用应用过程中,接电话/短信等
使用应用过程中,通过蓝牙/WiFi接收文件
4、免登陆测试测试点、登录后,关掉应用,等待一段时间后,再次打开应用,是否处于已登录状态
登录后,等待免登陆时效过期后,再次打开应用,是否需要重新登录
时间跨度测试
免登陆时效跨周
免登陆时效夸月
免登陆时效跨年
登录新设备后,原设备免密登录是否失效
修改密码后,免登陆是否失效
5、Push(消息推送)测试点、推送范围
全部用户
部分用户
指定用户
推送接收场景
亮屏 - 前台
亮屏 - 后台
亮屏 - 锁屏
黑屏 - 前台
黑屏 - 后台
黑屏 - 锁屏
通用
推送消息是否按照指定时间、范围、内容进行推送
用户关闭推送后,是否还会收到推送消息
推送消息是否可以折叠
点击推送消息是否能打开应用并跳转到对应链接
6、兼容性测试、防止APP在不同的机型由于软件、硬件等不同可能出现各种各样的问题
测试范围(手机型号、系统版本、分辨率、ROM等)
测试方法
手工测试1、确定测试覆盖范围
通过向产品经理咨询、或者通过市场调研确定
通过网络大数据平台获取同类型竞品的主要用户群体来确定
2、编写兼容性测试用例
3、采购测试设备
4、执行测试用例,输出测试报告

云测试

1、确定测试覆盖范围
通过向产品经理咨询、或者通过市场调研确定
通过网络大数据平台获取同类型竞品的主要用户群体来确定
2、选择云测试平台
Testin 云测 http://www.testin.cn/
weTest腾讯质量开发平台 http://wetest.qq.com/
3、选择测试覆盖范围及测试策略
4、购买配额
5、执行兼容性测试
6、邮件接收测试结果

测试点

1、手机型号
考虑应用手机排行榜
2、系统版本
安卓系统:6.0 7.0 ……
苹果系统:9.x 10.x……
3、屏幕尺寸、分辨率
分辨率:23401080 10801920 …
屏幕尺寸:5.5 4.7 6.43 …
4、应用兼容性
与手机硬件兼容
home键、电源键、音量调节等
与外部硬件设备兼容
耳机、蓝牙等
与操作系统软件兼容
wlan设置、系统时间调节、LBS定位等
与其他App兼容
后台在播放音乐时,进入动态页面点击动态视频的播放,系统如何处理

7、弱&无网测试
无网络功能是否正常使用
页面切换是否正常(无Crash、ANR等问题)
Crash 闪退
ANR 无响应
需要网络加载的内容处理是否正确
数据是否会丢失
弱网络
2G、3G、4G环境下功能是否正常使用
2G 15kb/s20kb/s
3G 120kb/s
600kb/s
4G 1.5mb/s~10mb/s
高延时环境下功能是否正常使用
使用fiddler模拟高延时环境
1、弱网开关:performance –> simulate Modem speeds
2、自定义弱网(Ctrl + R ):m_simulateModem: boolean = true;
if (m_SimulateModem) {
// Delay sends by 300ms per KB uploaded.
oSession[“request-trickle-delay”] = “300”;
上行 / 请求 速度 1kb为300毫秒
//Delay receives by 150ms per KB downloaded.
oSession[“response-trickle-delay”] = “150”;
下载 速度 1kb为150毫秒
高丢包环境下功能是否正常使用
使用Network Emulator for windows Toolkit工具模拟高丢包率
工具介绍:https://blog.csdn.net/zytthappy/article/details/85125772
用户体验
界面内容是否完整
弱网/无网/网络切换/升级/功能处理时提示是否友好
响应时间是否处于用户接收范围
2-5-10 (3-5-8)原则(响应策略)
2s/3s以内,属于用户体验良好
超过5s,一些性子比较急躁的用户就会出现多次点击等操作
超过8s/10s,天部分用户会强制退出APP如果响应时间过长,影响用户体验,则可能出现大部分用户放弃我们的产品转而使用其他同
类竟品
网络切换
以下网络环境切换时,功能是否正常,APP是否会出现crash、ANR等情况,切换是否有提示
3G、4G → wifi
wifi → 3G、4G
4G → 3G
3G → 4G
8、压力测试
测试场景
APP处于待机时,占用安卓设备资源情况
APP 正常使用时,占用安卓设备资源情况
APP频繁使用时,占用安卓设备资源情况
测试方法
使用Monkey命令(adb内置)向待测应用发送随机事件
使用命令行或者其他监测工具观察应用占用资源情况
如果发现内存占用持续等额上涨,则大概率为内存泄漏
9、稳定性测试
测试方法
准备多台安卓设备,使用Monkey发送10w次以上的命令(频率,次数参考实际业务),输出
Monkey日志,检查日志是否包含如下关键字:
ANP 程序无响应
Crash 程序闪退、崩溃
Exception 程序异常
处理方法:如果包含上述关键字,将日志、截图及Monkey命令和seed值打包提交给开发
seed值:每次执行monkey的唯一识别码 序号
10、流量
大流量处理
比如一些视频、压缩文件或者
APP升级等大流量数据处理时,是否有提示网络情况,
流量消耗等
Fiddler代理手机网络
手机和pc连接同一wifi (保证处于同一网段)
Tools- +options +Connections
设置Fiddler代理端口-Fiddler listens on port勾选如下两项
Act as system proxy on startup
Allow remote computers to connect
fiddler抓包工具

adb工具

ADB工作原理
ADB结构
adb client(pc端)
adb server(pc端)
adb daemon(Android端)
原理:
adb server 与 adb deamon 建立TCP连接,
再通过adb client 将指令发送给 adb server
adb server再将指令转发给adb daemon
adb daemon 再对指令进行解析和运行
ADB 服务默认端口

安装&常用命令

ADB工具启动
启动adb server服务:
adb star-server 默认占用端口:5037
查看端口占用情况:
netstat -ano|findstr 5037
停止adb server服务:
adb kill-server
2、ADB工具的设备连接
查看所有ADB工具连接的Android设备列表:
adb devices
该命令输出结果为[serialNumber] [state]
serialNumber为设备序列号,也可以理解为连接设备的名称
state表示设备连接状态:
offline:表示设备未连接成功或无响应
device:表示设备已连接,但需要注意这个状态并不意味着Android系统已经完全启动和可操
作,在设备启动过程中ADB工具就已经可以连接设备
no device:表示没有设备连接
获取ADB工具所连接设备的序列号:
adb get-serialno
断开连接:
adb disconnect 设备IP:端口号
示例:adb disconnect 127.0.0.1:62001
打开连接:
adb connect 设备IP:端口号
获取安卓设备已安装的应用包名:
adb shell pm list packages
查看当前活动的包信息:
adb shell dumpsys activity | findstr “mFocusedActivity”
查看指定应用的安装路径:
adb shell pm path 包名
清除指定应用的历史数据和缓存:
adb shell pm clear 包名
将安卓端文件下载到PC端:
adb pull downFile(需要下载的安卓设备上的文件)
departPath(文件下载后所在PC端口的目录)
向安卓设备安装APP应用( -r:表示覆盖参数):
adb install apk包路径
/data/app/:app默认安装路径
卸载安卓设备中指定应用(-k:保留数据和缓存目录):
adb uninstall 应用包名

monkey工具&logcat工具

1、monkey工具
定义:是Android系统的一个内置工具,通过Monkey可以向指定应用发送随机指令
可以生成伪随机用户事件(例如点击、移动或手势)以及很多系统事件
可以使用Monkey,以随机且可重复的方式对正在开发的应用进行压力测试
注意:monkey压测手机的稳定性,不是针对服务器端
语法:
adb shell monkey
[参数] [包名] 事件数量
参数:
-p 指定向某个应用发送指令,如果需要向多个应用发送,则指定多个-p
示例:adb shell monkey -p com.amaker.mp 200
解释:对警务通应用发出200个随机事件
-v monkey输出的日志级别,总共三个级别,v越多日志越详细
-v
-v -v
-v -v -v示例:adb shell monkey -v -v -v -p com.amaker.mp 200 > d:/log/test01.txt
解释:对警务通应用发出200个随机事件,并将最详细的日志写入test01文件中
-s 重现对应seed值的伪随机序列
示例:adb shell monkey -s 1646438425753 -v -v -v -p com.amaker.mp 200
解释:重现seed值为1646438425753的伪随机序列
–ignore-crashes
当monkey命令执行时,遇到闪退,崩溃事件,忽略闪退,崩溃事件,继续执行
–ignore-timeouts
当monkey命令执行时,遇到超时事件,忽略超时事件,继续执行
–throttle N
设置事件间隔(单位∶ms)
–pct-事件名 事件占比
示例:adb shell monkey –pct-touch 30
解释:设置该次Monkey命令中百分之30的时间为触摸事件
日志
0:15.0% 触摸事件TOUCH,–pct-touch
1:10.0% 手势事件MOTION,–pct-motion
2:2.0% 号两指缩放事件PINCHZOOM,–pct-pinchzoom
3:15.0% 轨迹球事件TRACKBALL,–pct-trackball
4:-0.0% 屏幕旋转事件ROTATION,–pct-rotation
5:25.0% 基本导航事件nav,–pct-nav
6:15.0% 主要导航事件majornav,–pct-majornav
7:2.0% 系统按钮事件syskeys,–pct-syskeys
8:2.0% 启动activity事件appswitch,-pct-appswitch
9:1.0% 键盘轻弹事件flip,–pct-flip
10:13.0% 其它事件,包括按键和不常用的按键
从日志中捕捉以下关键字:
1、无响应:ANR
2、闪退:crash
3、异常:exception
4、强退:force closed
5、错误:error
2、logcat工具(实时记录日志)
定义:是Android系统中的一个收集和过滤系统及应用程序日志的查看器语法:adb logcat 或 adb shell logcat
参数:
-s <标签名>:<优先级>
根据标签名及优先级过滤日志内容 标签名可以省略为*
示例:
*∶优先级
V∶Verbose(明细)
D∶Debug(调试)
I∶Info(信息)
W∶Warn(警告)
E∶Error(错误)
F∶Fatal(严重错误)
-v <需要显示的内容>
设置logcat日志输出格式
示例:adb logcat -v time > d:/log/test.txt
解释:将Android系统运行日志写入test文件,并按日期倒序排序
time 安卓系统时间
thread 线程ID
long 时间、进程
ID、线程ID、优先级、标签
-p <缓冲区>
输出指定缓冲区的日志内容,默认输出
system和main
radio:输出通信系统的log
system:输出系统组件的log
event:输出event模块的log
main:所有java层的log和不属于上面3层的log
crash:闪退缓冲区
-c 清理缓冲区日志
示例:adb logcat -c

解释:清空缓存。(使用场景:上一个环境已经没有问题了,将之前的历史记录清除)