App 测试
1. 简述 Android 四大组件及生命周期?
Android 的四大组件包括:Activity(活动)、Service(服务)、
BroadcasReceiver、(广播)
ContentProvider(内容提供者)
2. 当点击 APP 图标启动程序,说明将要发生那些过程?
1.点击桌面 app 图标,Launcher 进程采用 Binder IPC 向 system_server 进程发起 startActivity 请求;
2.system_server 进程收到请求后,向 zygote 进程发送创建进程的请求(zygote 进程是 Android 系统的第一个
进程,zygote 意为受精卵,所有进程都是由它孵化而来)
3.zygote 进程 fork 出新的子进程,即 App 进程;
4.App 进程,通过 Binder IPC 向 system_server 进程发起 attachApplication 请求
5.system_server 进程收到请求后,进行一系列的准备工作,通过 Binder IPC 向 App 进 程 发 送
scheduleLaunchActivity 请求
6.App 的 binder 线程(Application Thread)在收到请求后,通过 handler 向主线程发送 LAUNCH_ACTIVITY
消息
7.主线程收到 Message 后,通过发射机制创建目标 Activity,并回调 Activity.onCreate()方法
3. APP 测试的内容主要包括哪些,如何开展?(功能,性能,稳定性,兼容性,异常测试,升级、安装、卸载)
功能测试:
1.业务逻辑正确性测试:依据:产品文档->测试用例编写
性能测试:
1.资源消耗:
cpu的占用、内存的占用、流量的耗用、电量的耗用
2.响应能力测试:
App安装、卸载的响应时间,启动消耗时间的测试(热启【后台以有该APP的进程】、冷启【后台无改APP的进 程】),页面加载时间的测试
3.负载测试:
进行负载测试是否有异常(系统正常运行下的性能指标)
4.压力测试:
进行压力测试是否有异常,进行压力测试看APP能承受的最大性能指标(系统性能下降的拐点)
稳定性测试
稳定性测试的时候常会用monkey进行。主要通过monkey的伪随机事件流进行大量的点击、滑动等操作,这是为了检测出产品中隐藏的crash、anr等缺陷,确保没有问题
兼容性测试:
1.系统版本:Android:官方版本,定制版本;IOS:官方提供版本
2.分辨率:720 * 1280 1080* 1920
3.网络情况:2g 3g 4g 5g Wi-Fi
异常测试
1.热启动应用:应用在后台长时间待机;应用在后台待机过程中,手机重启
2.网络切换和中断恢复:网络切换;中断恢复:
3.电话信息中断恢复
升级,安装,卸载测试
1.升级测试:临近版本升级(1.0->1.1);跨版本(1.0->....->2.2)
2.安装测试:首次安装;覆盖安装(同版本,不同版本覆盖);卸载后安装
3.卸载测试:首次卸载;卸载安装后在卸载
4. Android 的兼容性测试都考虑哪些内容?(流量统计研究院https://tongji.baidu.com/research/app#screen)
品牌机型兼容:根据市场占有率、发布时间等指标对主流、最新机型进行重点兼容
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 接入
6. 针对 App 的安装功能,写出测试点?
l 安装
1.正常安装测试,检查是否安装成功。
2.APP 版本覆盖测试。例如:先安装一个 1.0 版本的 APP,再安装一个高版本(1.1 版本)的 APP,检查是否被覆
盖。
3.回退版本测试。例如:先装一个 2.0 版本的 APP,再安装一个 1.0 版本的 APP,正常情况下版本是可以回退的。
4.安装时内存不足,弹出提示。
5.根据安装手册操作,是否正确安装。
6.安装过程中的意外情况(强行断电、断网、来电话了、查看信息)等等,检查会发生的情况。
7.通过‘同步软件’,检查安装时是否同步安装了一些文件。
8.在不同型号、系统、屏幕大小、分辨率上的手机进行安装。
9.安装时是否识别有 SD 卡,并默认安装到 sd 卡中。
10.安装完成后,能否正常启动应用程序。
11.安装完成后,重启手机能否正常启动应用程序。
12.安装完成后,是否对其他应用程序造成影响。
13.安装完成后,能否添加快捷方式。
14.安装完成后,杀毒软件是否会对其当做病毒处理。
15.多进程进行安装,是否安装成功。
16.在安装过程中,所有的提示信息必须是英文或者中文,提示信息中不能出现代码、符号、乱码等。
17.安装之后,是否自动启动程序。
18.是否支持第三方安装。
19.在安装中点击取消。
l 卸载
1.用自己的卸载程序进行卸载,检查是否卸载干净。
2.用第三方工具,检查是否卸载干净。
3.在卸载过程中,点击取消按钮,看是否正常退出卸载程序,检查软件是否还能继续正常使用。
4.卸载过程中,出现意外(比如手机关机,没电,查看信息,接打电话),程序是否还能运行。
5.在卸载过程中,突然重启设备,再次访问程序,是否还能运行。
6.在没用使用程序时,删除目录文件,看程序是否能运行。
7.在使用过程中,直接删除目录文件,程序是否还能运行。
8.不同系统、硬件环境、网络环境下进行卸载。
9.卸载成功后,是否对其他程序有影响。
10.卸载后再次安装,是否正常使用。
11.在卸载过程中,所有的提示信息必须是英文或者中文,提示信息中不能出现代码、符号、乱码等。
l 更新
1.当客户端有新版本时,提示更新。
2.非强制更新,可以取消更新,旧版本正常使用,下次使用软件时,仍然会出现更新提示。
3.强制更新,强制更新而用户没有更新时,退出客户端,下次启动,依然提示更新。
4.不卸载更新,检查是否可以更新。
5.不卸载更新,检查资源同名文件如图片等是否更新成最新版本。
6.非 wifi 网络下,提示是否更新,取消就加入待下载,wifi 下自动更新。
7. 常用的 ADB 命令?
adb --help / adb :看见帮助信息
adb start-server:启动 adb 服务
adb kill-server:关闭 adb 服务
adb devices:查看手机设备号
adb shell getprop ro.build.version.release:获取系统版本
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 启动时间
8. 在查看 logcat 命令日志时候怎么内容保存到本地文件?
输出重定向:logcat >> log_file_name
9 app 测试和 web 测试有什么区别?
WEB 测试和 App 测试从流程上来说,没有区别。
都需要经历测试计划方案,用例设计,测试执行,缺陷管理,测试报告等相关活动。从技术上来说,WEB 测试和 APP 测试其测试类型也基本相似,都需要进行功能测试、性能测试、安全性测试、GUI 测试等测试类型。
他们的主要区别在于具体测试的细节和方法有区别,比如:性能测试,在 WEB测试只需要测试响应时间这个要素,在 App 测试中还需要考虑流量测试和耗电量测试。
兼容性测试:在 WEB 端是兼容浏览器,在 App 端兼容的是手机设备。而且相对应的兼容性测试工具也不相 同,WEB 因为是测试兼容浏览器,所以需要使用不同的浏览器进行兼容性测试(常见的是兼容 IE6,IE8,chrome,firefox)如果是手机端, 那么就需要兼容不同品牌,不同分辨率,不同 android 版本甚至不同操作系统的兼容。(常见的兼容方式是兼容市场占用率前 N 位的手机即可),有时候也可 以使用到兼容性测试工具,但 WEB 兼容性工具多用 IETester 等工具,而 App 兼容性测试会使用 Testin 这样的商业工具也可以做测试。
安装测试:WEB 测试基本上没有客户端层面的安装测试,但是 App 测试是存在客户端层面的安装测试,那么就具备相关的测试点。
操作类型测试,网络测试(弱网测试,网络切换)
交叉事件测试:就是在操作某个软件的时候,来电话、来短信,电量不足提示等外部事件。
操作类型测试:如横屏测试,手势测试
网络测试:包含弱网和网络切换测试。需要测试弱网所造成的用户体验,重点要考虑回退和刷新是否会造成二次提交。弱网络的模拟,据说可以用 360wifi 实现设置。
从系统架构的层面,WEB 测试只要更新了服务器端,客户端就会同步会更新。而且客户端是可以保证每一个用户的客户端完全一致的。但是 APP 端是不能 够保证完全一致的,除非用户更新客户端。如果是 APP 下修改了服务器端,意味着客户端用户所使用的核心版本都需要进行回归测试一遍
还有升级测试:升级测试的提醒机制,升级取消是否会影响原有功能的使用,升级后用户数据是否被清除了。
10 android 和 ios 测试区别?
。。。
11.app 出现 ANR,是什么原因导致的?
1.主线程执行了耗时操作,比如数据库操作或网络编程
2.其他进程(就是其他程序)占用 CPU 导致本进程得不到 CPU 时间片,比如其他进程的频繁读写操作可能会导致这个问题。
细分的话,导致 ANR 的原因有如下几点:
1.耗时的网络访问
2.大量的数据读写
3.数据库操作
4.硬件操作(比如 camera)
5.调用 thread 的 join()方法、sleep()方法、wait()方法或者等待线程锁的时
候
6.service binder 的数量达到上限
7.system server 中发生 WatchDog ANR
8.service 忙导致超时无响应
9.其他线程持有锁,导致主线程等待超时
10.其它线程终止或崩溃导致主线程一直等待。
12 App 出现 crash 原因有哪些?
为什么 App 会出现崩溃呢?百度了一下,查到和 App 崩溃相关的几个因素:内存管理错误,程序逻辑错误,设备兼容,网络因素等,如下:
1.内存管理错误:可能是可用内存过低,app 所需的内存超过设备的限制,app跑不起来导致 App crash。或是内存泄漏,程序运行的时间越长,所占用的内存越大,最终用尽全部内存,导致整个系统崩溃。亦或非授权的内存位置的使用也可能会导致 App crash。
2.程序逻辑错误:数组越界、堆栈溢出、并发操作、逻辑错误。e.g. app 新添加一个未经测试的新功能,调用了一个已释放的指针,运行的时候就会 crash。
3.设备兼容:由于设备多样性,app 在不同的设备上可能会有不同的表现。
4.网络因素:可能是网速欠佳,无法达到 app 所需的快速响应时间,导致 app crash。或者是不同网络的切换也可能会影响 app 的稳定性。
13 monkey
14 app 性能测试关注点,及如何实施,常见app性能测试工具
关注点:
包体大小
包体大小能被列为性能指标,是从APP性能指标及运营两个维度考虑的,用户是更希望包体小的同时性能要好,有时它们会是一个互相取舍的关系。
启动时长
移动应用的启动时间是用户体验的一个重要方面,IOS一直建议尽可能的缩短启动时间,防止用户不愿意使用它们。对于浏览器而言,由于程序启动时还会有教育页和闪屏的下发,因此启动时间的获取显得尤为重要。
启动时间分为冷启动时间和热启动时间,所谓的“冷启动”,就是一个完全没有运行的应用的启动时间,与热启动(应用已经在后台运行,某个事件将其带至前台)相比,由于此时系统尚未建立缓存,因此冷启动往往要较平时(热启动)耗费更长的时间。
内存使用
在Android系统中,每个APP进程除了同其他进程共享(shared dirty)外,还独用私有内存(private dirty),通常我们使用PSS(=私有内存+比例分配共享内存)来衡量一个APP的内存开销。移动设备的内存资源是非常有限,为每个APP进程分配的私有内存也是有限制。一方面我们要合理的申请内存使用,以免导致频繁的GC(垃圾回收机制)影响性能和大对象申请发生内存溢出;另一方面,我们要及时释放内存,以免发生内存泄漏。
CPU占用率
一般情况下,用主流手机使用APP20%-40%的CPU占用率算是合理的,当然这个数值随着近年来手机硬件配置的提高,会略微下降,如果CPU占用率超过80%就非常值得我们去关注了。
图片处理器每秒刷新的帧数(FPS)
可用来指示页面是否平滑的渲染。手机APP帧率FPS,30-60都可接受,上了60对于人眼主观感受差别就不大了。对于移动应用开发而言,并不是FPS越高就一定越好,FPS取决于显卡,其次是内存、CPU,然后是网络。故综合APP其他性能指标,选择一个适合的FPS即可。
电量
相对于PC来说,移动设备的电池电量是非常有限的,保持持久的续航能力尤为重要。另外,android的很多特性都比较耗电(如屏幕,GPS,sensor传感器,唤醒机制,CPU,连网等的使用),我们必须要慎重检查APP的电量使用,以免导致用户手机耗电发热,带来不良体验。
流量
目前的网络类型包含2G\3G\4G\wifi,其中还有不同运营商的区分,我们在APP的使用中经常遇到大资源,重复请求,调用响应慢,调用失败等各种情况。在不同的网络类型之下,我们不仅要控制流量使用,还需要加快请求的响应。另外,对于需要联网的手游来说,部分游戏对不同联网方式的网络类型采用了不同的流量消耗策略,主要分为wifi环境和蜂窝网络环境。所以针对不同的游戏,我们统计流量消耗时,可能要连接不同的网络进行测试
如何实施
1 分析需求
2 确定性能目标
3 环境搭建和选择工具
4 执行
5 报告
app性能测试工具
GT和iTest,Emmagee APT ,DDMS ,手机自带开发者选项中的工具,也可以通过adb命令来查看 等。
15 获取app包名和首次activity
获取apk包名方式
1 可以通过adb shell pm list packages -3
2 可以通过源代码中清单文件去查看包名
3 打开android sdk中 D:\tool\android-sdk_r24.4.1-windows\android-sdk-windows\build-tools\25.0.3
在命令行窗口中切换盘符,再切换当前目录,执行命令 aapt dump badging E:\360Downloads\Apk\jsj.apk > e:/logs.txt
4 通过adb 命令 logcat来查看包名,也可以通过android sdk
D:\tool\android-sdk_r24.4.1-windows\android-sdk-windows\tools monitor.bat工具来过滤日志查看 报名
16 如何对app进行弱网测试。
一款APP针对不同网络情况下都需要保证不会崩溃,同时尽可能做到在弱网情况下也能达到功能正常使用,或者使用体验达到最佳。弱网测试可以测试APP的加载时间、可用性、稳定性和健壮性。这时我们就可以借助工具来模拟不同的网络状况,模拟2G、3G或弱网情况进行测试。工具可以选择Filder也可以选择Charles也可以选择其他工具。