APP 测试
1. 什么是 Android 四大组件?
Android 的四大组件包括:Activity、Service、BroadcasReceiver、ContentProvider
2. 当点击 APP 图标启动程序,说明将要发生那些过程?
- 点击桌面 app 图标,Launcher 进程采用 Binder IPC 向 system_server 进程发起 startActivity 请求;
- system_server 进程收到请求后,向 zygote 进程发送创建进程的请求(zygote 进程是 Android 系统的第一个进程,zygote 意为受精卵,所有进程都是由它孵化而来)
- zygote 进程 fork 出新的子进程, 即 App 进程;
- App 进程,通过 Binder IPC 向 system_server 进程发起 attachApplication 请求
- system_server 进程收到请求后, 进行一系列的准备工作, 通过 Binder IPC 向 App 进程发送 scheduleLaunchActivity 请求
- App 的 binder 线程( Application Thread ) 在收到请求后,通过 handler 向主线程发送 LAUNCH_ACTIVITY 消息
- 主线程收到 Message 后,通过发射机制创建目标 Activity,并回调 Activity.onCreate() 方法
3. APP 测试的内容主要包括哪些,如何开展?
功能测试:
- 业务逻辑正确性测试:依据:产品文档 ->测试用例编写
兼容性测试:
-
系统版本:Android: 官方版本,定制版本;IOS:官方提供版本
-
分辨率:720x1280、1080x1920
-
网络情况:2g 3g 4g 5g Wi-Fi
异常测试
-
热启动应用:应用在后台长时间待机;应用在后台待机过程中,手机重启
-
网络切换和中断恢复:网络切换;中断恢复:
-
电话信息中断恢复 升级,安装
卸载测试
-
升级测试:临近版本升级 (1.0->1.1); 跨版本 (1.0->....->2.2)
-
安装测试:首次安装;覆盖安装(同版本,不同版本覆盖); 卸载后安装
-
卸载测试:首次卸载;卸载安装后在卸载
健壮性测试
-
手机资源消耗:cpu,内存
-
流量消耗:图片,数据,视频
-
电量测试
-
崩溃恢复
4. Android 的兼容性测试都考虑哪些内容?
品牌机型兼容:根据市场占有率、发布时间等指标对主流、最新机型进行重点兼容
ROM 兼容:需兼容原生的 ROM(2.1、2.2、2.3、4.0、4.1、4.2);第三方 ROM(小米、百度易、点心、魅族、阿里云……) 屏幕兼容:需兼容 HVGA、VGA、WVGA、FWVGA、720p、1080p 屏幕分辨率,并考虑不同 PPI 的情况软件兼容:安全类软件(百度手机管家、360 优化大师、360 安全卫士、QQ 手机管家、安卓优化大师、网秦、LBE),输入法软件(系统自带、Sogou、百度) 版本兼容:服务器端需要兼容产品早期版本所需的 API 接口
网络兼容:WiFi、3 大运营商的 2G,3G,4G 网络,需区分 WAP 和 NET 接入
5. 针对 App 的安装功能,写出测试点?
安装
- 正常安装测试,检查是否安装成功。
- APP 版本覆盖测试。例如:先安装一个 1.0 版本的 APP, 再安装一个高版本 (1.1 版本)的 APP,检查是否被覆盖。
- 回退版本测试。例如:先装一个 2.0 版本的 APP, 再安装一个 1.0 版本的 APP, 正常情况下版本是可以回退的。
- 安装时内存不足,弹出提示。
- 根据安装手册操作,是否正确安装。
- 安装过程中的意外情况(强行断电、断网、来电话了、查看信息)等等,检查会发生的情况。
- 通过‘同步软件’,检查安装时是否同步安装了一些文件。
- 在不同型号、系统、屏幕大小、分辨率上的手机进行安装。
- 安装时是否识别有 SD 卡,并默认安装到 sd 卡中。
- 安装完成后,能否正常启动应用程序。
- 安装完成后,重启手机能否正常启动应用程序。
- 安装完成后,是否对其他应用程序造成影响。
- 安装完成后,能否添加快捷方式。
- 安装完成后,杀毒软件是否会对其当做病毒处理。
- 多进程进行安装,是否安装成功。
- 在安装过程中,所有的提示信息必须是英文或者中文,提示信息中不能出现代码、符号、乱码等。
- 安装之后,是否自动启动程序。
- 是否支持第三方安装。
- 在安装中点击取消。
卸载
- 用自己的卸载程序进行卸载,检查是否卸载干净。
- 用第三方工具,检查是否卸载干净。
- 在卸载过程中,点击取消按钮,看是否正常退出卸载程序,检查软件是否还能继续正常使用。
- 卸载过程中,出现意外(比如手机关机,没电,查看信息,接打电话),程序是否还能运行。
- 在卸载过程中,突然重启设备,再次访问程序,是否还能运行。
- 在没用使用程序时,删除目录文件,看程序是否能运行。
- 在使用过程中,直接删除目录文件,程序是否还能运行。
- 不同系统、硬件环境、网络环境下进行卸载。
- 卸载成功后,是否对其他程序有影响。
- 卸载后再次安装,是否正常使用。
- 在卸载过程中,所有的提示信息必须是英文或者中文,提示信息中不能出现代码、符号、乱码等。
更新
- 当客户端有新版本时,提示更新。
- 非强制更新,可以取消更新,旧版本正常使用,下次使用软件时,仍然会出现更新提示。
- 强制更新,强制更新而用户没有更新时,退出客户端,下次启动,依然提示更新。
- 不卸载更新,检查是否可以更新。
- 不卸载更新,检查资源同名文件如图片等是否更新成最新版本。
- 非 wifi 网络下,提示是否更新,取消就加入待下载,wifi 下自动更新。
6. 常用的 ADB 命令?
- adb --help / adb : 看见帮助信息
- adb start-server: 启动 adb 服务
- adb kill-server: 关闭 adb 服务
- adb devices: 查看手机设备号
- adb push 电脑手机
- adb pull 手机电脑
- adb logcat | grep(unix) 包 名
- adb logcat | findstr(win) 包 名
- adb shell : 进入 shell 命令行,可以操作 Linux 命令
- adb shell dumpsys window windows | grep mFocusedApp: 获取包名 启动名 (win:adb shell dumpsys window windows | findstr mFocusedApp)
- adb install 路径 /apk 文件:安装 apk 到手机上
- adb uninstall 包名:卸载 app 从手机上
- adb shell am start -W 包名 / 启动名:app 启动时间
7. 在查看 logcat 命令日志时候怎么内容保存到本地文件?
输出重定向:logcat >> log_file_name
8. App 崩溃(闪退),可能是什么原因导致的?
缓存垃圾过多:由于安卓系统的特性,如果长时间不清理垃圾文件。会导致越来越卡。也会出现闪退情况。
运行的程序过多,导致内存不足
应用版本兼容问题:如果应用版本太低,会导致不兼容,造成闪退。此外,有些新版本在调试中,也会造成应用闪退。解决方法:如果是版本太旧,更新为新版本即可;如果是新版本闪退,可能是应用 在改版调试,可卸载后安装旧版。
检查 APP 中访问网络的地方,组件中的 ImageView 是否可以正常的下载并显示到 app 页面上。检查 APP 的 sdk 和手机的系统是否兼容。
在一些特定情况下的闪退,比如播放视频,在 Android5.0 升级到 Android 6.0 的时候,有些系统 API 老版本有,新版本没有,到时回去对象的时候失败,报空,系统就会出现闪退问题。
9. 如何测试监测 app 的内存使用、CPU 消耗、流量使用情况?
adb shell top
Android 应用性能测试通常包括:启动时间、内存、CPU、耗电量、流量、流畅度等根据手机的使用应用频度和强度不同,可将应用使用强度分为如下几种状态:
- 空闲状态:指启动应用后,不做任何操作或切换到后台运行的情况称为空闲状态,该情况为应用对 内存的消耗是最小的。
- 中强度状态:该情况用户使用应用的强度和时间长短不确定,相对来说使用时长偏长。
- 高强度状态:该种情况为应用内高频率的使用,用户很少达到,跑 monkey 时可认为高强度状态, 该种情况常用来测试应用内存泄漏的情况测试时,可根据用户的操作习惯模拟应用使用频率和强度等级。 使用 adb 命令,手机连接电脑开启 USB 调试模式,进入 adbshell。
-
查看 CPU 占用率
top -m 10 -s cpu
在测试过程中,QA 需要关注对应包的 cpu 占用率,反复进行某个操作,cpu 占用过高且一直无法释放,此时可能存在风险。
如果你想筛选出你自己的应用的话可以用下面命令 top -d 3| grep packageName
-
查看内存使用情况
dumpsys meminfo <package_name>
dumpsys meminfo <package_id>
参数含义:
- Naitve Heap Size: 从 mallinfo usmblks 获得,代表最大总共分配空间
- Native Heap Alloc: 从 mallinfo uorblks 获得,总共分配空间
- Native Heap Free: 从 mallinfo fordblks 获得,代表总共剩余空间
- Native Heap Size 约等于 Native Heap Alloc + Native Heap Free
- mallinfo 是一个 C 库, mallinfo 函数提供了各种各样的通过 C 的 malloc()函数分配的内存的统计信息。
- Dalvik Heap Size: 从 Runtime totalMemory() 获得,Dalvik Heap 总共的内存大小。
- Dalvik Heap Alloc: Runtime totalMemory()-freeMemory() ,Dalvik Heap 分配的内存大小。
- Dalvik Heap Free: 从 Runtime freeMemory() 获得,Dalvik Heap 剩余的内存大小。
- Dalvik Heap Size 约等于 Dalvik HeapAlloc + Dalvik Heap Free 重点关注如下几个字段:
- Native/Dalvik 的 Heap 信息中的 alloc :具体在上面的第一行和第二行,它分别给出的是 JNI 层和 Java 层的内存分配情况,如果发现这个值一直增长,则代表程序可能出现了内存泄漏。 Total 的 PSS 信息:这个值就是你的应用真正占据的内存大小,通过这个信息,你可以轻松判别手机中哪些程序占内存比较大了。
10. 弱网测试怎么测
弱网环境测试主要依赖于弱网环境的模拟。环境搭建方式一般有两种:软件方式和硬件方式。软件方 式的成本低,主要就是通过模拟网络参数来配置弱网环境,通常来讲可以达到测试目的。一般可通过热 点共享设置。在各类网络软件中,主要就是对带宽、丢包、延时等进行模拟弱网环境。如果要求更接 近弱网环境, 比如现在很多的专项测试,会更倾向于通过硬件方式来协助测试,但这种方式相对会麻烦很多,一般会由网维协助搭建。当然,对于有些无法模拟的情况,只能靠人工移动到例如电梯、地 铁等信号比较弱的地方。
11. //*[contains(@text,"登录")]
是什么意思
定位第一个元素 text 属性包含登录的元素
12. Appium 都有哪些启动方式
- 客户端启动
- 命令行启动