软件测试面试题-移动端功能测试高频面试题

题目列表

  • 如何模拟弱网做测试?
  • 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 常用面试问题汇总

在这里插入图片描述
部分问题整理来源于网络,如有侵权,联系删除

以上内容纯属个人理解,如有不足,欢迎各位大神指正,转载请注明出处!

如果觉得文章不错,欢迎关注微信公众号,微信公众号定期推送相关测试技术文章
个人微信号

  • 4
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试之路king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值