app测试面试题

1. 给你一个模块,比如注册模块,你会怎么样设计与执行测试?

我会从四个方面来设计与执行测试

1.数据>从哪里来(入口)>到哪里去(出口)>数据库(检验数据的正确性)

2.需求分析(输入分析,处理分析,输出分析),数据构造,编写用例

     输入分析:长度,类型,组成规则,是否为空,是否重复

     处理分析:正常处理,异常处理

     输出分析:前台,后台,数据


2. 针对数十个安卓应用市场渠道包,请问如何进行大体的功能验证,简单叙述一下思路?

可以自动化遍历某个目录下面的所有渠道包apk,然后循环:安装>登录>操作>退出>卸载


3. 你认为app测试过程中,相对于web,要更多注意哪些测试点?或者说app测试和web测试有哪些不同之处?

我认为app测试过程中,app测试与web测试还有很多不同之处,我认为他的不同之处体现在几个方面,

1.“点击加载更多”的分页处理技术,是否有重复的数据,数据显示是否完整,到达最后一页后是否还有数据进行显示;

2. 数据的排序方式;

3. 界面跳转是否正确;

4. 出现异常情况是否有提示,是否跳转到已经设定好的默认页面,如断网情况下,显示网络未连接,数据加载失败,或者如果此页面没有数据显示,显示友好提示信息

5.图片处理的地方,是否容易出现程序崩溃现象,主要是图片压缩机制;

6.前台主动发出请求,后台数据库中是否存在相应的数据同时包括数据的关联性(商家的会员进行下订单,数据库中生成一条订单的记录的同时,生成一条积分记录,该会员的积分进行相应的变化)

7.手机app网络环境测试重点:主要是针对2G、3G、4G、WIFI三种网络环境进行测试;

8.手机app兼容性测试:主要是针对andriod各个系统版本进行测试,及测试屏幕分辨率进行测试;

4.说说会用哪些抓包工具?怎么用的?

比如fiddler,主要用来做app抓包使用,现在fiddler客户端做好各项配置,端口设置为8888,然后在手机上设置代理,就可以抓包了,主要看的是服务器返回的值、还能够修改传入参数、传出的参数、模拟网络延迟,去构造不同场景。


5. Llinux常用命令有哪些?

cd命令:切换到某个目录

ls命令:列出当前目录的所有文件、文件夹pwd命令:列出当前目录的路径

cp命令:复制

mv命令:剪切

grep命令:管道

find命令:查找

rm命令:删除

ps命令:查看进程

kill命令:杀掉某个进程

cat命令:查看某文件

tar命令:打包

chmod命令:赋权限 

chown命令:改变文件的所有者

vim命令:文本编辑

tail -f:查看日志             

netstat -aux:查看状态


5.请说明andriod手机和ios手机,系统有什么区别?

1.两种运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。

2. 两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。

3.IOS中用于UI指令权限最高,安卓中数据处理指令权限最高


6. 请简要介绍一下安卓系统四层架构?

从上到下,依次是:应用程序层—应用程序框架层—系统运行库层—linux核心层


7.简单介绍一下Android SDK中自带的几个工具/命令的功能?

ddms:Dalvik Debug Monitor Service,是 Android 开发环境中的Dalvik[虚拟机]调试监控服务。

monkey:Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。

uiautomator:UIAutomator是Eclipse自带的用于UI自动化测试工具,可仿真APP上的单击、滑动、输入文本等操作。

monitor:同uiautomator

adb:ADB的全称为Android Debug Bridge,就是起到调试桥的作用。通过ADB我们可以在Eclipse中方面通过DDMS来调试Android程序,就是debug工具。


8.什么是activity

Activity是Android的四大组件之一,也是平时我们用到最多的一个组件,可以用来显示View。

Activity是一个Android的应用组件,它提供屏幕进行交互。每个Activity都会获得一个用于绘制其用户界面的窗口,窗口可以充满哦屏幕也可以小于屏幕并浮动在其他窗口之上。


9.activity

Activity本质上有四种状态:

1.运行(Active/Running):Activity处于活动状态,此时Activity处于栈顶,是可见状态,可以与用户进行交互

2.暂停(Paused):当Activity失去焦点时,或被一个新的非全面屏的Activity,或被一个透明的Activity放置在栈顶时,Activity就转化为Paused状态。此刻并不会被销毁,只是失去了与用户交互的能力,其所有的状态信息及其成员变量都还在,只有在系统内存紧张的情况下,才有可能被系统回收掉

3.停止(Stopped):当Activity被系统完全覆盖时,被覆盖的Activity就会进入Stopped状态,此时已不在可见,但是资源还是没有被收回

4.系统回收(Killed):当Activity被系统回收掉,Activity就处于Killed状态


10.Android四大组件

Android四大基本组件:Activity、BroadcastReceiver广播接收器、ContentProvider内容提供者、Service服务。

Activity:

应用程序中,一个Activity就相当于手机屏幕,它是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用程序可以包含许多活动,比如事件的点击,一般都会触发一个新的Activity。

BroadcastReceiver广播接收器

应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

ContentProvider内容提供者:

内容提供者主要用于在不同应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。只有需要在多个应用程序间共享数据时才需要内容提供者。例如:通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处:统一数据访问方式。

Service服务

是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要长期运行的任务(一边打电话,后台挂着QQ)。服务的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开了另一个应用程序,服务扔然能够保持正常运行,不过服务并不是运行在一个独立的进程当中,而是依赖于创建服务时所在的应用程序进程。当某个应用程序进程被杀掉后,所有依赖于该进程的服务也会停止运行(正在听音乐,然后把音乐程序退出)。


11.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下修改了服务器端,意味着客户端用户所使用的核心版本都需要进行回归测试一遍。

还有升级测试:升级测试的提醒机制,升级取消是否会影响原有功能的使用,升级后用户数据是否被清除了。


12.android和ios测试区别?

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等


13.app出现ANR,是什么原因导致的?

那么导致ANR的根本原因是什么呢?简单的总结有以下两点:

1.主线程执行了耗时操作,比如数据库操作或网络编程

2.其他进程(就是其他程序)占用CPU导致本进程得不到CPU时间片,比如其他进程的频繁读写操作可能会导致这个问题。

细分的话,导致ANR的原因有如下几点:

1.耗时的网络访问w

2.大量的数据读写

3.数据库操作

4.硬件操作(比如camera)

5.调用thread的join()方法、sleep()方法、wait()方法或者等待线程锁的时候

6.service binder的数量达到上限

7.system server中发生WatchDog ANR

8.service忙导致超时无响应

9.其他线程持有锁,导致主线程等待超时

10.其它线程终止或崩溃导致主线程一直等待。


14.App出现crash原因有哪些?

1.内存管理错误​:可能是可用内存过低,app所需的内存超过设备的限制,app跑不起来导致App crash。

或是内存泄露,程序运行的时间越长,所占用的内存越大,最终用尽全部内存,导致整个系统崩溃。

亦或非授权的内存位置的使用也可能会导致App crash。

2.程序逻辑错误:​数组越界、堆栈溢出、并发操作、逻辑错误。

e.g. app新添加一个未经测试的新功能,调用了一个已释放的指针,运行的时候就会crash。

3.​设备兼容:由于设备多样性,app在不同的设备上可能会有不同的表现。

​4.网络因素:可能是网速欠佳,无法达到app所需的快速响应时间,导致app crash。或者是不同网络的切换也可能会影响app的稳定性。


15.app对于不稳定偶然出现anr和crash时候你是怎么处理的?

方法一:app开发保存错误日志到本地

一般app开发在debug版本,出现anr和crash的时候会自动把日志保存到本地实际的sd卡上,去对应的app目录取出来就可以了

方法二:实时抓取

当出现偶然的crash时候,这时候可以把手机拉到你们app开发那,手机连上他的开发代码的环境,有ddms会抓日志,这时候出现crash就会记录下来日志。

尽量重复操作让bug复现就可以了

方法三:第三方sdk统计工具

一般接入了第三方统计sdk,比如友盟统计,在友盟的后台会抓到报错的日志


16.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


app测试面试题_第1张图片


16.你平常会看日志吗, 一般会出现哪些异常(Exception)?

这个主要是面试官考察你会不会看日志,是不是看得懂java里面抛出的异常,Exception

一般面试中java Exception(runtimeException )是必会被问到的问题

app崩溃的常见原因应该也是这些了。常见的异常列出四五种,是基本要求。

常见的几种如下:

NullPointerException - 空指针引用异常

ClassCastException - 类型强制转换异常。

IllegalArgumentException - 传递非法参数异常。

ArithmeticException - 算术运算异常

ArrayStoreException - 向数组中存放与声明类型不兼容对象异常

IndexOutOfBoundsException - 下标越界异常

NegativeArraySizeException - 创建一个大小为负数的数组错误异常

NumberFormatException - 数字格式异常

SecurityException - 安全异常

UnsupportedOperationException - 不支持的操作异常


17.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.其它线程终止或崩溃导致主线程一直等待。


18.你觉得app的性能测试,即专项测试,需要重点关注那些方面?

内存、cpu占用、耗电量、流量等


19.安卓的常用命令?

adb: Andriod Debug Bridge

adb devices:查看设备

adb kill-server:关闭adb的后台进程

adb tcpip:让Andriod脱离USB线的TCP连接方式

adb connect:连接开启了TCP连接方式的手机

adb logcat:Andriod日志查看

adb bugreport:收集日志数据,用于后续的分析,比如耗电量


20.简单的自动化工具input命令

text(Defaulut:touchscreen)

keyevent[--longpress]...(Default:keyboard)

tap (Defalut:touchscreen)

swip[duration(ms)](Default:touchscreen)

draganddrop[duration(ms)](Default:touchscreen)

press(Default:trackball)

roll(Defalut:trackball)


21.Andriod性能统计dumpsys

获取所有的dumpsys子命令dumpsys|grep i DUMP

获取当前 activity adb shell dumpsys activity top

获取activity的记录,可以获取到appuim依赖的原始activity dumpsys activity activities

获取特定包基本信息 adb shell dumpsys pakage com.xueqiu.andriod

获取系统通知 adb shell dumpsys notifcation

获取内存信息 adb shell dumpsys meminfo com.andriod.settings

获取cpu信息 adb shell dumpsys cpuinfo

获取gpu绘制分析 adb shell dumpsys gfxinfo com.andriod.settings

获取短信 adb shell dumpsys activity broadcasts|grep senderName= 

你可能感兴趣的:(app测试面试题)