App测试面试题总结

发表于:2019-8-05 11:56  作者:hyx20160514   来源:博客园

字体: | 上一篇 | 下一篇 |我要投稿 | 推荐标签: APP测试 面试题 App测试

  前言
  现在面试个测试岗位,都是要求全能的,web、接口、app啥都要会测,那么APP测试一般需要哪些技能呢?
  面试app测试岗位会被问到哪些问题,怎样让面试管觉得你对APP测试很精通的样子?
  本篇总结了app测试面试时候经常被问的10个相关问题
  1.什么是activity?
  2.Activity生命周期?
  3.Android四大组件?
  4.app测试和web测试有什么区别?
  5.android和ios测试区别?
  6.app出现ANR,是什么原因导致的?
  7.App出现crash原因有哪些?
  8.app对于不稳定偶然出现anr和crash时候你是怎么处理的?
  9.app的日志如何抓取?
  10.你平常会看日志吗, 一般会出现哪些异常(Exception)?
  1.什么是activity
  官方的说法是Activity一个应用程序的组件,它提供一个屏幕来与用户交互,以便做一些诸如打电话、发邮件和看地图之类的事情。
  Activity是一个Android的应用组件,它提供屏幕进行交互。每个Activity都会获得一个用于绘制其用户界面的窗口,窗口可以充满哦屏幕也可以小于屏幕并浮动在其他窗口之上。
  一个应用通常是由多个彼此松散联系的Activity组成,一般会指定应用中的某个Activity为主活动,也就是说首次启动应用时给用户呈现的Activity。将Activity设为主活动的方法
  当然Activity之间可以进行互相跳转,以便执行不同的操作。每当新Activity启动时,旧的Activity便会停止,但是系统会在堆栈也就是返回栈中保留该Activity。
  当新Activity启动时,系统也会将其推送到返回栈上,并取得用户的操作焦点。当用户完成当前Activity并按返回按钮是,系统就会从堆栈将其弹出销毁,然后回复前一Activity
  当一个Activity因某个新Activity启动而停止时,系统会通过该Activity的生命周期回调方法通知其这一状态的变化。
  Activity因状态变化每个变化可能有若干种,每一种回调都会提供执行与该状态相应的特定操作的机会
  2.Activity生命周期?
  周期即活动从开始到结束所经历的各种状态。生命周期即活动从开始到结束所经历的各个状态。从一个状态到另一个状态的转变,从无到有再到无,这样一个过程中所经历的状态就叫做生命周期。
  Activity本质上有四种状态:
  1.运行(Active/Running):Activity处于活动状态,此时Activity处于栈顶,是可见状态,可以与用户进行交互
  2.暂停(Paused):当Activity失去焦点时,或被一个新的非全面屏的Activity,或被一个透明的Activity放置在栈顶时,Activity就转化为Paused状态。此刻并不会被销毁,只是失去了与用户交互的能力,其所有的状态信息及其成员变量都还在,只有在系统内存紧张的情况下,才有可能被系统回收掉
  3.停止(Stopped):当Activity被系统完全覆盖时,被覆盖的Activity就会进入Stopped状态,此时已不在可见,但是资源还是没有被收回
  4.系统回收(Killed):当Activity被系统回收掉,Activity就处于Killed状态
  如果一个活动在处于停止或者暂停的状态下,系统内存缺乏时会将其结束(finish)或者杀死(kill)。这种非正常情况下,系统在杀死或者结束之前会调用onSaveInstance()方法来保存信息,同时,当Activity被移动到前台时,重新启动该Activity并调用onRestoreInstance()方法加载保留的信息,以保持原有的状态。
  在上面的四中常有的状态之间,还有着其他的生命周期来作为不同状态之间的过度,用于在不同的状态之间进行转换,生命周期的具体说明见下。
  onCreate() 首次创建 Activity 时调用。
  onStart() 在Activity 即将对用户可见之前调用。
  onResume()在 Activity 即将开始与用户进行交互之前调用。此时,Activity 处于 Activity 堆栈的顶层,并具有用户输入焦点。始终后接 onPause()。
  onPause()当系统即将开始继续另一个 Activity 时调用。如果 Activity 返回前台,则后接 onResume(),如果 Activity 转入对用户不可见状态,则后接onStop()。
  onStop()在 Activity 对用户不再可见时调用。如果 Activity 恢复与用户的交互,则后接 onRestart(),如果 Activity 被销毁,则后接onDestroy()。
  onDestroy()在 Activity 被销毁前调用。这是 Activity 将收到的最后调用。
  onRestart()在 Activity 已停止并即将再次启动前调用。始终后接 onStart()。
  3.Android四大组件
  Android四大基本组件:Activity、BroadcastReceiver广播接收器、ContentProvider内容提供者、Service服务。
  Activity:
  应用程序中,一个Activity就相当于手机屏幕,它是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用程序可以包含许多活动,比如事件的点击,一般都会触发一个新的Activity。
  BroadcastReceiver广播接收器:
  应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
  ContentProvider内容提供者:
  内容提供者主要用于在不同应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。只有需要在多个应用程序间共享数据时才需要内容提供者。例如:通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处:统一数据访问方式。
  Service服务:
  是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要长期运行的任务(一边打电话,后台挂着QQ)。服务的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开了另一个应用程序,服务扔然能够保持正常运行,不过服务并不是运行在一个独立的进程当中,而是依赖于创建服务时所在的应用程序进程。当某个应用程序进程被杀掉后,所有依赖于该进程的服务也会停止运行(正在听音乐,然后把音乐程序退出)。
  4.app测试和web测试有什么区别?
  WEB测试和App测试从流程上来说,没有区别。
  都需要经历测试计划方案,用例设计,测试执行,缺陷管理,测试报告等相关活动。
  从技术上来说,WEB测试和APP测试其测试类型也基本相似,都需要进行功能测试性能测试、安全性测试、GUI测试等测试类型。
  他们的主要区别在于具体测试的细节和方法有区别,比如:
  1、架构区别:WEB项目是B/S架构,基于浏览器的,而APP是C/S架构,必须要有客户端。web测试只要更新了服务器端,客户端就会同步会更新。而且客户端是可以保证每一个用户的客户端完全一致的。但是app端是不能够保证完全一致的,除非用户更新客户端。如果是app下修改了服务端,意味着客户端用户所使用的核心版本都需要进行回归测试一遍。
  2、性能测试:在WEB测试只需要测试响应时间这个要素,在App测试中还需要考虑流量、电量、CPU、GPU、Memory、fps(流畅度),安装耗时和启动耗时这些。一般使用emmagee,GT工具测试。
  3、兼容性测试:在WEB端是兼容浏览器,在App端兼容的是手机或平板设备。浏览器的兼容则是一般是选择不同的浏览器内核进行测试(IE、chrome、Firefox)。app的测试不仅要看分辨率,屏幕尺寸,还要看设备系统。系统总的来说也就分为Android和iOS,不过国内的Android的定制系统太多,也是比较容易出现问题的。一般app的兼容测试三种方法,云测试,请团队测试,真机测试。云测试咱们稍后再聊,这里说说真机的选择。首先要选择主流的机型,其次要选择不同的分辨率,尺寸,然后就是不同的操作系统
  4、安装测试:WEB测试基本上没有客户端层面的安装测试,但是App测试是存在客户端的,必须测试安装、更新、卸载。除了常规的安装、更新、卸载还要考虑到异常场景。包括安装时的中断、弱网、内存不足、安装后删除安装文件,更新的强制更新与非强制更新、增量包更新、断点续传、弱网,卸载后删除app相关的文件等等。升级测试的提醒机制,升级取消是否会影响原有功能的使用,升级后用户数据是否被清除了。
  5、交叉事件测试:就是在操作某个软件的时候,来电话、来短信,电量不足提示等外部事件。
  6、操作类型测试:如横屏测试,手势测试,多点触控,前后台切换。
  7、网络测试:包含弱网和网络切换测试。需要测试弱网所造成的用户体验,重点要考虑回退和刷新是否会造成二次提交。弱网络的模拟,据说可以用360wifi实现设置。
  5.android和ios测试区别?
  App测试中ios和Android有哪些区别呢?
  1.Android长按home键呼出应用列表和切换应用,然后右滑则终止应用;
  2.多分辨率测试,Android端20多种,ios较少;
  3.手机操作系统,Android较多,ios较少且不能降级,只能单向升级;新的ios系统中的资源库不能完全兼容低版本中的ios系统中的应用,低版本ios系统中的应用调用了新的资源库,会直接导致闪退(Crash);
  4.操作习惯:Android,Back键是否被重写,测试点击Back键后的反馈是否正确;应用数据从内存移动到SD卡后能否正常运行等;
  5.push测试:Android:点击home键,程序后台运行时,此时接收到push,点击后唤醒应用,此时是否可以正确跳转;ios,点击home键关闭程序和屏幕锁屏的情况(红点的显示);
  6.安装卸载测试:Android的下载和安装的平台和工具和渠道比较多,ios主要有app store,iTunes和testflight下载;
  7.升级测试:可以被升级的必要条件:新旧版本具有相同的签名;新旧版本具有相同的包名;有一个标示符区分新旧版本(如版本号),
  对于Android若有内置的应用需检查升级之后内置文件是否匹配(如内置的输入法)
  另外:对于测试还需要注意一下几点:
  1.并发(中断)测试:闹铃弹出框提示,另一个应用的启动、视频音频的播放,来电、用户正在输入等,语音、录音等的播放时强制其他正在播放的要暂停;
  2.数据来源的测试:输入,选择、复制、语音输入,安装不同输入法输入等;
  3.push(推送)测试:在开关机、待机状态下执行推送,消息先死及其推送跳转的正确性;
  应用在开发、未打开状态、应用启动且在后台运行的情况下是push显示和跳转否正确;
  推送消息阅读前后数字的变化是否正确;
  多条推送的合集的显示和跳转是否正确;
  4.分享跳转:分享后的文案是否正确;分享后跳转是否正确,显示的消息来源是否正确;
  5.触屏测试:同时触摸不同的位置或者同时进行不同操作,查看客户端的处理情况,是否会crash等
  6.app出现ANR,是什么原因导致的?
  那么导致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.其它线程终止或崩溃导致主线程一直等待。
  7.App出现crash原因有哪些?
  为什么App会出现崩溃呢?百度了一下,查到和App崩溃相关的几个因素:内存管理错误,程序逻辑错误,设备兼容,网络因素等,如下:
  1.内存管理错误?:可能是可用内存过低,app所需的内存超过设备的限制,app跑不起来导致App crash。
  或是内存泄露,程序运行的时间越长,所占用的内存越大,最终用尽全部内存,导致整个系统崩溃。
  亦或非授权的内存位置的使用也可能会导致App crash。
  2.程序逻辑错误:?数组越界、堆栈溢出、并发操作、逻辑错误。
  e.g. app新添加一个未经测试的新功能,调用了一个已释放的指针,运行的时候就会crash。
  3.设备兼容:由于设备多样性,app在不同的设备上可能会有不同的表现。
  4.网络因素:可能是网速欠佳,无法达到app所需的快速响应时间,导致app crash。或者是不同网络的切换也可能会影响app的稳定性。
  原文:https://blog.csdn.net/yangtuxiaojie/article/details/47123243
  8.app对于不稳定偶然出现anr和crash时候你是怎么处理的?
  app偶然出现anr和crash是比较头疼的问题,由于偶然出现无法复现步骤,这也是一个测试人员必备的技能,需要抓日志。查看日志主要有3个方法:
  方法一:app开发保存错误日志到本地
  一般app开发在debug版本,出现anr和crash的时候会自动把日志保存到本地实际的sd卡上,去对应的app目录取出来就可以了
  方法二:实时抓取
  当出现偶然的crash时候,这时候可以把手机拉到你们app开发那,手机连上他的开发代码的环境,有ddms会抓日志,这时候出现crash就会记录下来日志。
  尽量重复操作让bug复现就可以了
  也可以自己开着logcat,保存日志到电脑本地,参考这篇:https://www.cnblogs.com/yoyoketang/p/9101365.html
  adb logcat | find "com.sankuai.meituan" >d:\hello.txt
  方法三:第三方sdk统计工具
  一般接入了第三方统计sdk,比如友盟统计,在友盟的后台会抓到报错的日志
  9.app的日志如何抓取?
  app本身的日志,可以用logcat抓取,参考这篇:https://www.cnblogs.com/yoyoketang/p/9101365.html
  adb logcat | find "com.sankuai.meituan" >d:\hello.txt
  也可以用ddms抓取,手机连上电脑,打开ddms工具,或者在Android Studio开发工具中,打开DDMS
  关于ddms更多的功能,参考这篇:https://www.cnblogs.com/gaobig/p/5029381.html
  10.你平常会看日志吗, 一般会出现哪些异常(Exception)?
  这个主要是面试官考察你会不会看日志,是不是看得懂java里面抛出的异常,Exception
  一般面试中java Exception(runtimeException )是必会被问到的问题
  app崩溃的常见原因应该也是这些了。常见的异常列出四五种,是基本要求。
  常见的几种如下:
  NullPointerException - 空指针引用异常
  ClassCastException - 类型强制转换异常。
  IllegalArgumentException - 传递非法参数异常。
  ArithmeticException - 算术运算异常
  ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
  IndexOutOfBoundsException - 下标越界异常
  NegativeArraySizeException - 创建一个大小为负数的数组错误异常
  NumberFormatException - 数字格式异常
  SecurityException - 安全异常
  UnsupportedOperationException - 不支持的操作异常

      上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理

评 论

论坛新帖

顶部 底部


建议使用IE 6.0以上浏览器,800×600以上分辨率,法律顾问:上海瀛东律师事务所 张楠律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2020, 沪ICP备05003035号
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪公网安备 31010102002173号

51Testing官方微信

51Testing官方微博

扫一扫 测试知识全知道