目录
android基础
系统架构
- 内核层:linux内核
- 运行库层:运行app需要的环境
- 应用程序框架层:无论系统内置或者开发编写的app,都需要使用到这层,可提高开发效率
- 应用层:系统app与自行安装的app
应用四大组件
- activity 活动
activity对应的就是界面,一个activity可以对应一个或多个界面,一个界面也可以对应一个或多个activity - service 后台服务
某些app退出界面后,实际并未完全退出所有进程,还会有其它进程用于其它功能。如QQ新消息提醒
常用于app一些隐含的小功能 - broadcast receiver 广播接收
广播消息:电量不足、网络异常、屏幕关闭/点亮
app接收到广播消息时,通过代码做相应的处理 - content provider 内容提供
为提升安全性,系统给app都自动创建了用户,通过用户权限配置将不同app的数据或访问硬件设备隔离,或通过内容提供技术让不同app相互可以访问
APP系统资源文件
安装包文件
文件名 | 含义 |
---|---|
animator | 定义属性动画的xml文件 |
anim | 定义渐变动画的xml文件 |
color | 定义颜色的xml文件 |
drawable | 菜单图标、可绘制对象资源的xml文件 |
mipmap | 桌面图标 |
layout | 界面布局的xml文件 |
menu | 定义菜单的xml文件 |
raw | 以原始形式保存的文件 |
values | 包含字符串、整型数各颜色等简单值的xml文件 |
注:app 要适配不同机型,就需要不同的资源文件,先根据语言筛选资源文件,再根据屏幕方向选资源文件,若未筛选到则使用默认的资源文件(drawable),若连默认的都没有,就可能导致闪退
活动配置
AndroidManifest.xml文件(配置文件)
权限控制
AndroidManifest.xml文件(配置文件)
uses-permission
uses-feature
adb/monkey
adb工具
在SDK工具的platform tools文件中
用于电脑连接android手机,对手机上的app进行管理,对手机上的图片文件、短信等进行管理
adb包含
- adb客户端(在电脑运行)
- adb服务端(在电脑运行)
- adb守护进程adbd(在手机运行)
常用命令
- 查看adb版本
adb version
注:若电脑存在多个版本的adb工具,可直接切换到相应目录下运行adb,也可以在环境变量中配置adb - 查看连接的android手机
adb devices
注:真机需设置“USB调试”,不可选择“仅充电”,USB调试可能需要开发者模式(大概路径:手机设置>关于手机>连续点击版本号 可打开开发者模式)
连接不正常,则重启手机再试 - 安装/卸载app
# 安装app
adb install apk文件路径
# 指定手机安装(多台设备 -s指定设备)
adb -s 127.0.0.1:21503 install apk文件路径
# 卸载app
adb uninstall app包名
app包名:
-
AndroidManifest.xml文件中查找 package
-
aapt工具(在SDK工具文件中)
aapt d badging apk文件路径
-
查看当前界面启动应用的包名和Activity
# 未adb shell进入系统时使用 adb shell dumpsys window | findstr mCurrentFocus # adb shell进入系统后使用 dumpsys window | grep mCurrentFocus
- 进入android系统
adb shell
- /data/app 存放安装的app的安装包
- /data/data 存放app的安装目录
- /sdcard 扩展卡,存放用户的文件
- 从手机上拉取文件到电脑上
# adb pull 手机上文件路径 电脑上文件路径
adb pull /sdcard/log.txt d:\test\log.txt
- 从电脑上推送文件到手机上
# adb push 电脑文件路径 手机文件路径
adb push d:\test\test.png /sdcard/test.png
- 重启adb服务器
adb kill-server/adb start-server
注:重启后adb devices 无法查看设备,可手动连接(ip和端口)adb connect 127.0.0.1:21503
- 日志
adb logcat
日志中可搜索exception、crash、anr等关键词,也可用app catlog来查看日志,日志级别:- V 次要信息
- I 系统信息
- D 调试信息
- W 警告信息
- E 错误信息
# 清除缴存日志
adb logcat -c
# -v time 日志中加时间戳
adb logcat -v time > d:\test\log.txt
- 查看手机启动过程日志以及启动后系统状态
adb bugreport > d:\bugreport.txt
- 截屏
adb shell screencap -p /sdcard/img.png
- 录屏
adb shell screenrecord /sdcard/name.mp4
注:ctrl+c 停止 - 其它命令
命令 | 含义 | 备注 |
---|---|---|
adb shell am start -n 包名/包名.Activity(活动名) | 启动app | |
adb shell am srart -W 包名 | 查询app启动时间 | 注app需已运行。ThisTime:对应activity启动耗时;TotalTime:应用自身启动耗时(ThisTime+应用资源启动时间);WaitTime:系统启动耗时(TotalTime+系统资源启动时间) |
adb shell am force-stop 包名 | 关闭app | |
adb shell pm list packages | 查看所有包信息 | -s 列出系统应用;-3 第三方应用 |
adb shell pm clear 包名 | 清除应用数据缓存 | |
adb shell dumpsys battery | 查看电池电量 | status:5 满电、2 充电中 |
adb shell dumpsys wifi | 查看wifi信息 | |
adb shell dumpsys telephony.registry | 查看电话相关信息 | mCallState:0 待机、1 来电尚未接听、2 电话占线;mServiceState:0 正常使用、1 没有连接到运营网络、2 仅限紧急呼叫、3 已关机 |
adb shell cat /proc/cpuinfo | 查看cpu相关信息 | |
adb shell cat /proc/meminfo | 查看内存相关信息 |
monkey工具
android系统自带的随机测试工具
命令:adb shell monkey -p 包名 [随机事件 占比] --throttle 操作时间间隔 -s 随机序列种子 -v -v -v 操作次数
-v 日志详细程度 三个-v最详细
–throttle 一般为500,模拟人正常操作500ms
随机操作事件,占比总和为100
事件 | 含义 | 说明 |
---|---|---|
–pct-touch | 触摸事件 | 点击 |
–pct-motion | 手势事件 | 直线滑动 |
–pct-pinchzoom | 缩放事件 | 放大缩小 |
–pct-trackball | 轨迹事件 | 曲线滑动 |
–pct-rotation | 屏幕旋转事件 | 横屏竖屏切换 |
–pct-nav | 基本导航事件 | 上下左右物理键(不常用) |
–pct-majornav | 主要导航事件 | 中间键、菜单键 |
–pct-syskeys | 系统按键事件 | Home键、返回键、音量调节键 |
–pct-appswitch | 切换activity事件 | 切换界面 |
–pct-flip | 键盘事件 | 键盘弹出与收回 |
–pct-anyevent | 其它事件 | 字母、数字物理键(不常用) |
# 整机测试
adb shell monkey 1000
# 测试app
adb shell monkey -p 包名 --pct-touch 30 --pct-motion 20 --throttle 500 -s 666 -v -v -v 1000
事件 | 说明 |
---|---|
–ignore-crashes | 忽略应用程序崩溃 |
–ignore-timeouts | 忽略应用程序无响应 ANR |
–ignore-security-exceptions | 忽略应用程序发生许可认证错误 |
–kill-process-after-error | 应用程序错误时停止运行 |
–monitor-native-crashes | 监视报告应用程序崩溃时的本地代码 |
功能测试
- 单功能测试
与web测试类似,因界面简单,常通过抓包工具辅助进行测试 - 功能交互测试
- 与手机自带功能的交互
如通话、短信、闹钟、定位、照相机等 - 与手机管家类型app的功能交互
如设置禁止app访问网络 - app内部功能交互
如设置功能的交互
- 与手机自带功能的交互
- 特殊测试点
- 横竖屏下的操作
- 单击、双击、滑动、长按、缩放操作
- home、返回键的影响
- 通知栏功能操作
性能测试
常见工具:
- emmagee 网易的开源app
仅android系统,且7.0及以上无法使用,测试结果会保存到sdcard
针对内存、cpu重点查看峰值,对于fps主要看波动 - solopi 阿里的开源app
简单的自动化(录制回放)
性能测试
一机多控(用于兼容测试,操作一部手机完成多部手机测试) - monkey
用来测试稳定性和性能 - 时间
- 安装、卸载响应时间
- 启动响应时间
- 首次启动时间
- 非首次启动时间
冷启动时间:app相关进程已全部退出的情况下启动
热启动时间:app相关进程并未全部退出的情况下启动
- 切换响应时间(页面切换时间)
logcat日志中,查“displayed”关键字,一般测试多次取平均值,避免偏差
- 存储占用
- 安装包大小
路径:/data/app - 安装目录大小
路径:/data/data 用du -sh 目录
查看 - 内存占用
一般利用工具测试
- 安装包大小
- CPU占用
利用工具测试 - GPU占用
- gpu过度绘制
开发者选项:调试GPU过度绘制
可见屏幕颜色有绿色、蓝色、红色。红色表示过度绘制,颜色越深过程绘制越厉害 - 流畅度
流畅度涉及fps(每秒帧数)的指标,fps大幅变化可能就存在卡顿
一般利用工具测试
- gpu过度绘制
- 流量/电量消耗
一般利用工具测试- 安装时
- 前台运行时
- 后台运行时
安全测试
- 权限
- 扣费风险:短信、拨打电话、连接网络等
- 隐私风险:访问手机信息、联系人信息等
- 限制/允许短信相关权限
- 限制/允许自启动
- 限制/允许相机
- 限制/允许录音
- 限制/允许定位
- 限制/允许读取用户数据
- 限制/允许写入用户数据
- 数据
- 密码与其它敏感信息输入到应用时,不以明文形式存储在设备中
- 删除数据时,提供确认框
- 通信
- 创立连接时,若网络连接中断,可通知用户连接中断的情况
- 应用运行中通信超时,给用户信息提示
- 网络异常时及时将异常情况通知用户
- 关闭网络连接,应用断开连接
专项测试
兼容测试
针对主流机型,用几款进行完整测试,更多机型可用云测平台测试。如:testin、阿里云、腾讯云、华为云等
- 操作系统兼容
- 标准android系统、定制化android系统
- 标准android系统
- ios,只能单向升级,不能降级
- 机型兼容
- 手机品牌、型号
- 屏幕类型:全面屏、刘海屏、水滴屏等
- 屏幕密度:如hdpi、xhdpi等
- 屏幕分辨率
- 屏幕尺寸
- 版本兼容
- 老版本对新功能的界面兼容
- 老版本对新功能的功能数据兼容
- 其它主流APP兼容
dpi:每英寸点数
屏幕标识 | 含义 | 参数 |
---|---|---|
ldpi | 低密度屏幕 | 约120dpi |
mdpi | 中密度屏幕 | 约160dpi |
hdpi | 高密度屏幕 | 约240dpi |
xhdpi | 超高密度屏幕 | 约320dpi |
xxhdpi | 超超高密度屏幕 | 约480dpi |
xxxhdpi | 超超超高密度屏幕 | 约640dpi |
nodpi | 不希望缩放 | |
tvdpi | mdpi~hdpi之间 | 约213dpi |
anydpi | 适应所有屏幕密度 |
脚本使用,命令放入批处理文件,扩展名为.bat
# 安装app
adb install app路径
# 运行app
adb shell am start -n 包名/包名.activity名
# 等待10s
choice /t 10 /d y /n >nul
# 退出app
adb shell am force-stop 包名
# 卸载app
adb uninstall 包名
网络测试
手机网络:2G、3G、4G、5G、wifi
不同网络区别:带宽/速度、延迟、丢包率、错误率
测试可通过工具模拟不同网络,常见工具:
- NEWT、clumsy
PC端软件 - ATC
Linux环境运行 - QNET
手机端运行
测试流程
- 正常网络测试
- 无网测试(飞行模式)
功能是否可用
界面/数据是否正常(支持离线浏览的应用)
继续请求网络是否正确处理
是否有无网络提示(如提示当前网络已断开,请检查网络设置) - 弱网测试(带宽变小、延迟变大、丢包率上升、错误率上升)
页面呈现是否完整
请求超时,是否有相应提示
丢包是否重发机制
操作app数据是否发生crash、anr等 - 网络切换测试
测试2G、3G、4G、5G、wifi网络切换,wifi切换至数据流量时,可能导致扣费,是否有提示
其它测试
- 安装包病毒扫描
- 安装/卸载测试
- 不同渠道安装:应用商店、浏览器等
- 安装过程中断,可否继续安装
- 是否可覆盖安装
- 安装空间不足是否有提示
- 安装后,安装目录和文件创建是否正确
- 卸载是否有确认提示
- 卸载后是否删除相应安装目录
- 卸载过程中断,可否使用或继续卸载
- 卸载后重装
- 升级测试
非强制(可取消更新提示,正常使用,下次启动仍提示)
强制(不升级不能用,取消则退出app,下次启动仍是如此)- 自动升级
- 升级过程中断
- 升级过程内存不足
- 升级后数据是否同步
- 跨版本升级
- 消息推送
APP后台运行时Push消息显示在系统通知栏,正在使用时Push消息只会在APP内,不显示在系统通知栏- 开启推送,则可以正常接收查看
- 关闭推送,则接收不到消息
- 设置免打扰时间段内,接收不到消息
- 推送消息是否按业务规则发送,若针对登录用户,检查消息是否与用户身份相符
- 登录测试
很多app提供免登录功能:开启应用时自动以上一次登录的用户来使用- 无网络时能否正常进入免登录状态
- 切换用户登录,用户及数据内容更新,确保原用户退出
- 密码更换后,进行数据交互时应校验登录是否有效
- 用户主动退出登录后,下次启动app时应显示登录页面
- 切换测试
主要对于有数据交互(自动更新)的页面进行测试- app切换至后台,再回到app,检查是否在原页面,功能、状态是否正常
- 多个app之间相互切换
- 出现必须处理的提示框时,进行切换测试,检查提示框
- 中断测试
被打扰的情况下,客户端能否正常处理,保证数据的正确性,主要对于核心功能存在实时数据交换的页面进行测试- 电话、信息等提示中断,切换app
- 断电、断网重连、锁屏解锁
- 插拔数据线、耳机
- 程序异常退出(杀掉进程后,再开启app,是否正常)
- 服务重启
- 用户体验测试
开发者选项:显示布局边界功能
页面响应时间是否合理(冷启动、热启动、页面切换)
超时提示、异常提示是否合理
是否会超时重连