app测试 面试题

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.系统版本: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.卸载测试:首次卸载;卸载安装后在卸载

健壮性测试

1.手机资源消耗:cpu,内存

2.流量消耗:图片,数据,视频

3.电量测试

4.崩溃恢复

 

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 接入

 

 

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也可以选择其他工具。

 

 

猜你喜欢

转载自blog.csdn.net/yipianfeng_ye/article/details/102929210