题目列表
- 如何模拟弱网做测试?
- APP测试与Web测试的区别?
- IOS和Android的APP测试有什么区别?
- Android手机和IOS手机,系统有什么区别?
- APP 兼容性如何测试?
- Android四大组件?
- Activity生命周期?
- App出现ANR,是什么原因导致的?
- App出现Crash原因有哪些?
- App在出现偶现ANR和Crash时候你是怎么处理的?
- app的日志如何抓取?
- 你在看APP日志时, 通常看见过哪些异常(Exception)?
- 冷启动、暖启动、热启动?
- 常用的adb命令有哪些?
- Monkey 常用面试问题答案汇总
如何模拟弱网做测试?
- 大部分都是选择第三方软件Charles、fiddler工具进行模拟
APP测试与Web测试的区别?
相同点: 测试流程、基本功能测试
不同点:
-
系统结构方面
- web测试基于浏览器的b/s架构,web测试只要更新了服务器端,客户端就会同步会更新,并且保证每一位用户的客户端完全一致
- app测试c/s结构的,需要有客户端,更新了服务器端,是不能保证每一位用户的客户端一致,除非用户更新了客户端;app 修改了服务端,则客户端用户所有核心版本都需要进行回归测试一遍。
-
兼容性测试
- web端是兼容浏览器,浏览器的兼容则是一般是选择不同的浏览器内核进行测试(IE、chrome、Firefox)
- App端兼容的是手机设备,需要从分辨率、屏幕尺寸、设备系统方面
-
相对于web,App端专项测试
- 交叉事件测试
- 界面操作
- 安全测试
- 安装包是否可反编译代码、安装包是否签名、权限设置,例如访问通讯录等
- 边界测试
- 可用存储空间少、没有SD卡/双SD卡、飞行模式、系统时间有误、第三方依赖等
- 权限测试
- 设置某个App是否可以获取该权限,例如是否可访问通讯录、相册、照相机等
- 网络测试
- 弱网络测试(模拟2g、3g、4g、5g,wifi网络状态以及丢包情况
- 网络切换测试(网络断开后重连、3g切换到4g、5g/wifi 等)
- 安装、更新、卸载
- 安装:需考虑安装时的中断、弱网、安装后删除安装文件,全新安装、升级安装、第三方工具安装等情况
- 卸载:需考虑第三方工具卸载、直接卸载卸,载后是否删除app相关的文件
- 更新:分强制更新、非强制更新、增量包更新、断点续传、弱网状态下更新
- 性能测试
- 需要考虑流量、电量、CPU、GPU、Memory、fps(流畅度)、安装耗时和启动耗时这些
IOS和Android的APP测试有什么区别?
- 物理按键:Android长按home键呼出应用列表和切换应用,然后右滑则终止应用;iOS所有的返回上一层,只能靠页面功能实现。
- 多分辨率测试:Android端20多种;IOS较少。
- 手机操作系统:Android较多,IOS较少且不能降级,只能单向升级;新的IOS系统中的资源库不能完全兼容低版本中的IOS系统中的应用,低版本IOS系统中的应用调用了新的资源库,会直接导致闪退。
- 操作习惯:Android,Back键是否被重写,测试点击Back键后的反馈是否正确;应用数据从内存移动到SD卡后能否正常运行等。
- push测试:Android点击home键,程序后台运行时,此时接收到push,点击后唤醒应用,此时是否可以正确跳转;IOS点击home键关闭程序和屏幕锁屏的情况(红点的显示)。
- 安装卸载测试:Android可以通过手机自带的应用市场或者是第三方的手机助手进行下载,下载和安装的平台和工具和渠道比较多;IOS主要有app store,iTunes和testflight下载。
- 升级测试:可以被升级的必要条件:新旧版本具有相同的签名;新旧版本具有相同的包名;有一个标示符区分新旧版本(如版本号)。
- 支付方式:对于一些有内购功能的APP,Android直接调用第三方支付渠道完成支付;IOS需要先在APP store里绑定支付方式,然后通过APP store去完成支付操作。
- 消息推送机制:Android使用第三方或者自建平台进行消息推送;IOS的消息推送渠道由苹果官方提供。
Android手机和IOS手机,系统有什么区别?
-
两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
-
IOS 沙盒运行机制: 每个程序都有自己的虚拟地址空间。所以,程序之间不能进行访问。 默认只会将应用的最后运行数据,记录在RAM里面。 -
Android 虚拟机运行机制: 所有的应用程序都是运行在虚拟机中,用户界面其实是由虚拟机传递的,并且通过虚拟机,Android的任何程序都就可以轻松访问其他程序文件。 所有的Android的应用程序都是运行在RAM里面的,所以会发现有时候Android用着用着就开始有点卡顿。 -
两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。 -
IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。 -
开发机制:Android的编程语言是JAVA,而iOS的则是Objective-C -
流畅度:安卓依旧和苹果的IOS系统有很大差距,安卓手机一两年一般就会出现卡顿的情况,iOS系统3年都运行很流畅 -
更新、维护:Android系统出现问题解决时间比较久,iOS修复时间很快 -
封闭、开发:Android手机的系统一般为开源设计,允许各大手机厂商的深度定制,其优点是应用App多样,体验丰富,可以安装海外版App,但缺点则是App权限管控不严,易产生数据残留,影响系统的流畅运行;而苹果iOS机型的系统采用的则是闭合设计,优点是App权限管控严格,系统运行稳定、持久流畅度较高,但缺点是App正规安装渠道只有App Store,限制了APP的多样性
APP兼容性如何测试?
APP 兼容性测试可以新旧版本兼容测试、不同机型测试(系统兼容性、屏幕兼容性、分辨率兼容、尺寸兼容)、不同网络等方面
- 新旧版本兼容性测试
- 新旧版本覆盖安装升级正常
- 新增功能,新旧版本覆盖安装后使用正常
- 不同手机机型测试
- 手机OS系统兼容性
- iOS 系统:iOS10+
- Android 系统:Android5+
- 手机屏幕类型兼容性
- iOS:刘海屏、非刘海屏
- Android:全面屏、非全面屏、曲面屏、折叠屏
- 分辨率兼容性
- iOS:640 * 1136:iPhone 5s、1242 * 2208:iPhone 6 plus、1125 * 2436:iPhone X、828 * 1792:iPhone 11、1125 * 2438:iPhone 11 pro、1242 * 2688:iPhone 11 pro max、750 * 1334:iPhone 6、1170 * 2532:iPhone 12、1284 * 2778:iPhone 12 pro max、1080 * 2340 :iPhone 12 mini
- Android:Android 不同厂家机型多,不同多屏幕分辨率非常多,常见:1440 * 3200、1344 * 2772、1080 * 2400、1080 * 2376、1080 * 1920、 2340 * 1080
- 尺寸兼容性:
- iOS 主要机型尺寸:4 寸-6.7 寸
- Android 主要机型尺寸:5 寸-6.7 寸
- 网络兼容性
- Wi-Fi 切换 4G/5G 网络情况下功能是否正常
- 4G/5G 网络切换 Wi-Fi 情况下功能是否正常
- 有网切换无网情况下功能是否正常
- 无网切换有网情况下功能是否正常
Android四大组件
- Activity:
应用程序中,一个Activity就相当于手机屏幕,它是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用程序可以包含许多活动,比如事件的点击,一般都会触发一个新的Activity。 - BroadcastReceiver广播接收器:
应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。 - ContentProvider内容提供者:
内容提供者主要用于在不同应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。只有需要在多个应用程序间共享数据时才需要内容提供者。例如:通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处:统一数据访问方式。 - Service服务:
是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要长期运行的任务(一边打电话,后台挂着QQ)。服务的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开了另一个应用程序,服务扔然能够保持正常运行,不过服务并不是运行在一个独立的进程当中,而是依赖于创建服务时所在的应用程序进程。当某个应用程序进程被杀掉后,所有依赖于该进程的服务也会停止运行(正在听音乐,然后把音乐程序退出)。
Activity生命周期?
- 运行(Active/Running):Activity处于活动状态,此时Activity处于栈顶,是可见状态,可以与用户进行交互
- 暂停(Paused):当Activity失去焦点时,或被一个新的非全面屏的Activity,或被一个透明的Activity放置在栈顶时,Activity就转化为Paused状态。此刻并不会被销毁,只是失去了与用户交互的能力,其所有的状态信息及其成员变量都还在,只有在系统内存紧张的情况下,才有可能被系统回收掉
- 停止(Stopped):当Activity被系统完全覆盖时,被覆盖的Activity就会进入Stopped状态,此时已不在可见,但是资源还是没有被收回
- 系统回收(Killed):当Activity被系统回收掉,Activity就处于Killed状态
如果一个活动在处于停止或者暂停的状态下,系统内存缺乏时会将其结束(finish)或者杀死(kill)。这种非正常情况下,系统在杀死或者结束之前会调用onSaveInstance()方法来保存信息,同时,当Activity被移动到前台时,重新启动该Activity并调用onRestoreInstance()方法加载保留的信息,以保持原有的状态。
App出现ANR,是什么原因导致的?
- 主线程执行了耗时操作,比如数据库操作或网络编程
- 其他进程(就是其他程序)占用CPU导致本进程得不到CPU时间片,比如其他进程的频繁读写操作可能会导致这个问题。
更详细的区分导致ANR的原因有如下几点:
- 耗时的网络访问
- 大量的数据读写
- 数据库操作
- 硬件操作(比如camera)
- 调用thread的join()方法、sleep()方法、wait()方法或者等待线程锁的时候
- service binder的数量达到上限
- system server中发生WatchDog ANR
- service忙导致超时无响应
- 其他线程持有锁,导致主线程等待超时
- 其它线程终止或崩溃导致主线程一直等待
App出现Crash原因有哪些?
- 内存管理错误:可能是可用内存过低,app 所需的内存超过设备的限制,app跑不起来导致 App crash。或是内存泄漏,程序运行的时间越长,所占用的内存越大,最终用尽全部内存,导致整个系统崩溃。亦或非授权的内存位置的使用也可能会导致 App crash。
- 程序逻辑错误:数组越界、堆栈溢出、并发操作、逻辑错误。e.g. app 新添加一个未经测试的新功能,调用了一个已释放的指针,运行的时候就会 crash。
- 设备兼容:由于设备多样性,app 在不同的设备上可能会有不同的表现。
- 网络因素:可能是网速欠佳,无法达到 app 所需的快速响应时间,导致 app crash。或者是不同网络的切换也可能会影响 app 的稳定性。
App在出现偶现ANR和Crash时候你是怎么处理的?
- debug版本阶段:如果APP本身有保存错误日志在手机,出现anr和crash的时候会自动把日志保存到本地实际的sd卡上,去对应的app目录取出来就行
- 实时抓取:应用日志都会自动保存在手机一段时间,当出现偶然的crash时候,直接通过adb获取即可
- 第三方sdk统计工具:后台会抓到报错的日志
app的日志如何抓取?
- 可以使用adb命令:adb logcat | find “包名” >d:\log.log
- 用ddms抓取,手机连上电脑,打开ddms工具
- 在Android Studio开发工具中,打开DDMS
你在看APP日志时, 通常看见过哪些异常(Exception)?
- NullPointerException - 空指针引用异常
- ClassCastException - 类型强制转换异常。
- IllegalArgumentException - 传递非法参数异常。
- ArithmeticException - 算术运算异常
- ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
- IndexOutOfBoundsException - 下标越界异常
- NegativeArraySizeException - 创建一个大小为负数的数组错误异常
- NumberFormatException - 数字格式异常
- SecurityException - 安全异常
- UnsupportedOperationException - 不支持的操作异常
冷启动、暖启动、热启动
- 冷启动:当进程不存在的时候,从进程创建开始到界面的展示过程;
- 暖启动:有一部分资源已经存在,进程存在,相对于热启动要消耗更多资源。当用户退出应用程序时,进程还会存在,暖启动相较于冷启动只是少了进程的创建;
- 热启动:大部分资源都在,只是应用之间的切换;
常用的adb命令有哪些?
- adb devices 查看手机设备
- adb install packsge(包路径) 安装包
- adb install -r packages(保留数据及缓存文件安装新包)
- adb uninstall package (卸载包)
- adb kill-server 关闭adb服务
- adb start-server 启动adb服务
- adb shell pm list packages 查看手机里面所有包名
- adb shell pm list packages -3 查看手机里面所有第三方包名
- adb shell /system/bin/screencap -p /sdcard/xx.png 截频并保存文件在手机上为xx.Png
- adb pull /sdcard/xx.png D:/xx.png 将手机xx.png文件保存到D盘文件下
- adb push D:/xx.text /adcard/xx.text 将电脑文件导入手机
- adb shell pm clear packagename 清除缓存数据
- adb shell am start -n packagename/activity 启动程序
- adb shell am force-stop packagename 强制停止运行程序
- adb logcat 查看日志
- adb logcat > D:\log.txt 将日志打印到电脑上
- adb kill-server /adb start-server 结束和启动adb服务
Monkey 常用面试问题汇总
部分问题整理来源于网络,如有侵权,联系删除
以上内容纯属个人理解,如有不足,欢迎各位大神指正,转载请注明出处!
如果觉得文章不错,欢迎关注微信公众号,微信公众号定期推送相关测试技术文章
|