关于⾯试总结13-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,这个前两年出去⾯试APP测试岗位,估计问的最多了,特别是⼀些⼤⼚,先问你是不是做过APP测试,那好,你说说什么是activity?
如果没看过android的开发原理,估计这个很难回答,要是第⼀个问题就被难住了,⾯试的信⼼也会失去⼀半了,⼠⽓⼤减。
Activity是Android的四⼤组件之⼀,也是平时我们⽤到最多的⼀个组件,可以⽤来显⽰View。
官⽅的说法是Activity⼀个应⽤程序的组件,它提供⼀个屏幕来与⽤户交互,以便做⼀些诸如打电话、发邮件和看地图之类的事情,原话如下:
An Activity is an application component that provides a screen with which users can interact in order to do something, such as dial the phone, take a photo, send an email, or view a map.
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()⽅法加载保留的信息,以保持原
有的状态。
在上⾯的四中常有的状态之间,还有着其他的⽣命周期来作为不同状态之间的过度,⽤于在不同的状态之间进⾏转换,⽣命周期的具体说明见下。
原⽂:
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测试等测试类型。
他们的主要区别在于具体测试的细节和⽅法有区别,⽐如:性能测试,在WEB测试只需要测试响应时间这个要素,在App测试中还需要考虑流量测试和耗电量测试。
兼容性测试:在WEB端是兼容浏览器,在App端兼容的是⼿机设备。⽽且相对应的兼容性测试⼯具也不相同,WEB因为是测试兼容浏览器,所以需要使⽤不同的浏览器进⾏兼容性测试(常见的是兼容IE6,IE8,chrome,firefox)如果是⼿机端,那么就需要兼容不同品牌,不同分辨率,不同android版本甚⾄不同操作系统的兼容。(常见的兼容⽅式是兼容市场占⽤率前N位的⼿机即可),有时候也可以使⽤到兼容性测试⼯具,但WEB兼容性⼯具多⽤IETester等⼯具,⽽App兼容性测试会使⽤Testin这样的商业⼯具也可以做测试。
安装测试:WEB测试基本上没有客户端层⾯的安装测试,但是App测试是存在客户端层⾯的安装测试,
那么就具备相关的测试点。
还有,App测试基于⼿机设备,还有⼀些⼿机设备的专项测试。如交叉事件测试,操作类型测试,⽹络测试(弱⽹测试,⽹络切换)
交叉事件测试:就是在操作某个软件的时候,来电话、来短信,电量不⾜提⽰等外部事件。
操作类型测试:如横屏测试,⼿势测试
⽹络测试:包含弱⽹和⽹络切换测试。需要测试弱⽹所造成的⽤户体验,重点要考虑回退和刷新是否会造成⼆次提交。弱⽹络的模拟,据说可以⽤360wifi实现设置。
从系统架构的层⾯,WEB测试只要更新了服务器端,客户端就会同步会更新。⽽且客户端是可以保证每⼀个⽤户的客户端完全⼀致的。但是APP端是不能够保证完全⼀致的,除⾮⽤户更新客户端。如果是APP下修改了服务器端,意味着客户端⽤户所使⽤的核⼼版本都需要进⾏回归测试⼀遍。
还有升级测试:升级测试的提醒机制,升级取消是否会影响原有功能的使⽤,升级后⽤户数据是否被清除了。
原⽂地址:
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显⽰和跳转否正确;
推送消息阅读前后数字的变化是否正确;
qq闪退多条推送的合集的显⽰和跳转是否正确;
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.程序逻辑错误:数组越界、堆栈溢出、并发操作、逻辑错误。
< app新添加⼀个未经测试的新功能,调⽤了⼀个已释放的指针,运⾏的时候就会crash。
3.设备兼容:由于设备多样性,app在不同的设备上可能会有不同的表现。
4.⽹络因素:可能是⽹速⽋佳,⽆法达到app所需的快速响应时间,导致app crash。或者是不同⽹络的切换也可能会影响app的稳定性。
原⽂:
8.app对于不稳定偶然出现anr和crash时候你是怎么处理的?
app偶然出现anr和crash是⽐较头疼的问题,由于偶然出现⽆法复现步骤,这也是⼀个测试⼈员必备的技能,需要抓⽇志。查看⽇志主要有3个⽅法:
⽅法⼀:app开发保存错误⽇志到本地
⼀般app开发在debug版本,出现anr和crash的时候会⾃动把⽇志保存到本地实际的sd卡上,去对应的a
pp⽬录取出来就可以了
⽅法⼆:实时抓取
当出现偶然的crash时候,这时候可以把⼿机拉到你们app开发那,⼿机连上他的开发代码的环境,有ddms会抓⽇志,这时候出现crash就会记录下来⽇志。
尽量重复操作让bug复现就可以了
也可以⾃⼰开着logcat,保存⽇志到电脑本地,参考这篇:
adb logcat | find "ituan" >d:\
⽅法三:第三⽅sdk统计⼯具
⼀般接⼊了第三⽅统计sdk,⽐如友盟统计,在友盟的后台会抓到报错的⽇志
9.app的⽇志如何抓取?
app本⾝的⽇志,可以⽤logcat抓取,参考这篇:
adb logcat | find "ituan" >d:\
也可以⽤ddms抓取,⼿机连上电脑,打开ddms⼯具,或者在Android Studio开发⼯具中,打开DDMS
关于ddms更多的功能,参考这篇:
10.你平常会看⽇志吗, ⼀般会出现哪些异常(Exception)?这个主要是⾯试官考察你会不会看⽇志,是不是看得懂java⾥⾯抛出的异常,Exception
⼀般⾯试中java Exception(runtimeException )是必会被问到的问题
app崩溃的常见原因应该也是这些了。常见的异常列出四五种,是基本要求。
常见的⼏种如下:
NullPointerException - 空指针引⽤异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递⾮法参数异常。
ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建⼀个⼤⼩为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
UnsupportedOperationException - 不⽀持的操作异常
交流QQ:779429633
发布评论