ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

自动化测试面试之App测试面试题总结

2022-07-18 14:33:51  阅读:121  来源: 互联网

标签:面试题 -- app 应用程序 adb 测试 App


转自:https://zhuanlan.zhihu.com/p/414421049

 

 

自动化测试面试专题之App测试面试题:

前言

自动化测试工作分为web自动化测试、接口自动化测试及App自动化测试,当然性能测试也是需要写自动化测试脚本的。当然在展开自动化测试之前是需要对基本的测试有深入的了解的。而不是简单的把自动化测试理解成有会用工具,会写脚本就可以叫自动化测试工程师的。换言之,手工测试做的好才能做好自动化测试工程师。这里,本人会把不同类型测试面试内容做详细的整理与分析。

之前有整理了Python自动化测试面试题,里面包含了web自动化测试面试题和python语法面试题。自己有面试需要的请点击链接,对相关面试题做个归纳:霖霖:自动化测试面试之Python自动化测试面试分析

我的看法: 针对App测试现在已经有Testbird或Testin这样的商业自动化测试平台,针对兼容性、UI、安装、升级测试可以使用上述平台进行自动化测试。但是这毕竟是花钱的,针对不同需求迭代测试想要自动化的话,如果有好的技术团队的话可以考虑搭建自用的APP自动化测试平台,以应对团队千变万化的需求测试

正文[APP测试面试题]

1.app测试和web测试有什么区别?

WEB测试和App测试从流程上来说,没有区别。
两者都需要设计测试计划方案,设计测试用例,执行测试用例,缺陷管理,提交测试报告等相关活动。从技术上来说,WEB测试和APP测试其测试类型也基本相似,都需要进行功能测试、性能测试、安全性测试、GUI测试等测试类型。

他们的主要区别在于web测试主要关注的是浏览器方面,而APP测试的话要考虑的是手机为载体的测试终端,所以在性能测试方面,WEB测试更关注响应时间,App测试中还需要考虑流量测试和耗电量测试。兼容性测试方面APP需要关注的点更多一些

-----------------------------------------------------------------------------------------------

兼容性测试:在WEB端是兼容浏览器,在App端兼容的是手机设备。而且相对应的兼容性测试工具也不相同,WEB因为是测试兼容浏览器,所以需要使用不同的浏览器进行兼容性测试(常见的是兼容IE6,IE8,chrome,firefox)如果是手机端,那么就需要兼容不同品牌,不同分辨率,不同android版本还有不同操作系统的兼容。

安装测试:WEB测试基本上没有客户端层面的安装测试,但是App测试是存在客户端层面的安装测试,那么就具备相关的测试点。

还有,App测试基于手机设备,还有一些手机设备的专项测试。如交叉事件测试,操作类型测试,网络测试(弱网测试,网络切换)

交叉事件测试:就是在操作某个软件的时候,来电话、来短信,电量不足提示等外部事件。

网络测试:包含弱网和网络切换测试。需要测试弱网所造成的用户体验,重点要考虑回退和刷新是否会造成二次提交。弱网络的模拟,据说可以用360wifi实现设置。

从系统架构的层面,WEB测试只要更新了服务器端,客户端就会同步会更新。而且客户端是可以保证每一个用户的客户端完全一致的。但是APP端是不能够保证完全一致的,除非用户更新客户端。如果是APP下修改了服务器端,意味着客户端用户所使用的核心版本都需要进行回归测试一遍。

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

原文地址:https://www.cnblogs.com/laoluoits/p/5673291.html [内容有做小小的修改]

2.android和ios测试区别?

App测试中ios和Android有哪些区别呢?

首先说一下两个操作系统的差别:

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

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

测试内容差别[有修改]:
1.兼容性测试:多分辨率和操作系统版本测试,Android端20多种,ios较少;
2.升级测试:手机操作系统,Android较多,ios较少且不能降级,只能单向升级;新的ios系统中的资源库不能完全兼容低版本中的ios系统中的应用,低版本ios系统中的应用调用了新的资源库,会直接导致闪退(Crash);

可以被升级的必要条件:新旧版本具有相同的签名;新旧版本具有相同的包名;有一个标示符区分新旧版本(如版本号), 对于Android若有内置的应用需检查升级之后内置文件是否匹配(如内置的输入法)
3.push测试:Android:点击home键,程序后台运行时,此时接收到push,点击后唤醒应用,此时是否可以正确跳转;ios,点击home键关闭程序和屏幕锁屏的情况(红点的显示);
4.安装卸载测试:Android的下载和安装的平台和工具和渠道比较多,ios主要有app store,iTunes和testflight下载;
另外:对于测试还需要注意一下几点:
1.并发(中断)测试:闹铃弹出框提示,另一个应用的启动、视频音频的播放,来电、用户正在输入等,语音、录音等的播放时强制其他正在播放的要暂停;
2.数据来源的测试:输入,选择、复制、语音输入,安装不同输入法输入等;
3.push(推送)测试:在开关机、待机状态下执行推送,消息先死及其推送跳转的正确性;
应用在开发、未打开状态、应用启动且在后台运行的情况下是push显示和跳转否正确;
推送消息阅读前后数字的变化是否正确;
多条推送的合集的显示和跳转是否正确;

4.分享跳转:分享后的文案是否正确;分享后跳转是否正确,显示的消息来源是否正确;

5.触屏测试:同时触摸不同的位置或者同时进行不同操作,查看客户端的处理情况,是否会crash等

原文链接:https://www.jianshu.com/p/91d7acfb036e

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

fiddler[free]和charles[收费],都可以用来做app抓包使用。这里介绍的是fiddler,先在fiddler客户端做好各项配置,端口设置为8888,然后在手机上设置代理,就可以抓包了,主要看的是服务器返回的值。我们还可以修改传入参数、传出的参数并通过fiddler发送请求。Fiddler模拟弱网状态,实现弱网测试。想要了解更多可以自行百度。

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

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

5.Android四大组件

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

Activity:

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

BroadcastReceiver广播接收器:

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

ContentProvider内容提供者:

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

Service服务:

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

原文:https://blog.csdn.net/m0_37989980/article/details/78681367

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

原文:https://blog.csdn.net/jaychou_maple/article/details/78782822

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

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,保存日志到电脑本地,参考这篇:

adb logcat | find "com.sankuai.meituan" >d:\log.txt

9.app的日志如何抓取?

1.自己开着logcat,保存日志到电脑本地:

adb logcat | find "com.sankuai.meituan" >d:\log.txt

把安卓系统日志信息实时导入到本地:adb logcat -v time > d:\mylog.log;

2.运行使用某个 app,实时获取该 app 的日志信息(cmd 里面的返回信息) :adb shell monkey -p com.android.calendar -v 1000 > d:\mylog2.log。

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

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

一般面试中java Exception(runtimeException )是必会被问到的问题
app崩溃的常见原因应该也是这些了。常见的异常列出四五种,是基本要求。

常见的几种如下:

NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
UnsupportedOperationException - 不支持的操作异常

11.如何判断 bug 是客户端还是后台问题?

这样的问题可以抓包看一下:

1.首先看发送请求的参数是否正确:如果参数不正确,大概率是客户端问题

2.参数正确的情况下查看后端返回值,如果返回值有问题,大概率是后端问题

12.列举常见的 adb 命令

adb(android debug bridge)是android sdk自带的一个工具。

Adb是用来连接android设备和PC端的桥梁,通过adb工具,用户可以在PC端对手机进行全面的操作。

1.查看当前连接的设备:adb devices;

2.安装软件:adb install 路径\xx.apk;

3.卸载软件:adb uninstall <包名>;

4.从电脑上发送文件到设备:adb push <本地路径> <远程路径> adb push C:\test1.txt /sdcard/;

5.从设备上下载文件到电脑:adb pull <远程路径> <本地路径> adb pull /sdcard/test1.txt D:

6.实时获取日志:adb logcat -v time > D:\mylog.log;

7.登录终端设备 shell:adb shell;

8.查找包名/活动名:adb logcat | findstr START (脚本中, cmp= 后面的值就是 包名/activity 名称);

9.启动 APP 启动;adb shell am start -n packageName/activity;

10.关闭 app 语法:adb shell am force-stop 包名;

11.监控 APP 启动时间 adb shell am start -W packageName/activity;

12.Monkey 命令:adb shell monkey -v -p mypackage 50。

13.Monkey基本命令

adb shell monkey -p com.android.calculator2 -v -v --pct-touch 50 --throttle 600 88

--pct-touch 50 设置整个过程中点击操作所占的百分比

--throttle 600每个事件间隔600ms

adb shell monkey -p packagename --throttle 500 --ignore-crashes --ignore-timeouts --ignoresecurity-exceptions --ignore-native-crashes --monitor-native-crashes -s 123 -v -v -v 1000000>c:\monkey_test.log

--ignore-crashes 用于指定当应用程序崩溃时(Force& Close错误),Monkey是否停止运行。如果 使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。

--ignore-timeouts 用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是 否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计 数完成。

--ignore-security-exceptions 用于指定当应用程序发生许可错误时(如证书许可,网络许可等), Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误Monkey依然会发送事件,直 到事件计数完成。

--kill-process-after-error 用于指定当应用程序发生错误时,是否停止其运行。如果指定此参数,当应 用程序发生错误时,应用程序停止运行并保持在当前状态(注意:应用程序仅是静止在发生错误时 的状态,系统并不会结束该应用程序的进程)。

--monitor-native-crashes 用于指定是否监视并报告应用程序发生崩溃的本地代码

--s 用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的

14.列举Monkey的事件类型

adb shell monkey -p com.android.calculator2 -v -v --pct-touch 50 --throttle 600 88

1、--pct-touch:指定触摸事件的百分比,如:--pct-touch 5

2、 --pct-motion (滑动事件)

3、 --pct-trackball (轨迹球事件)

4、 --pct-nav (导航事件 up/down/left/right)

5、 --pct-majornav (主要导航事件 back key 、 menu key)

6、 --pct-syskeys (系统按键事件 Home 、Back 、startCall 、 endCall 、 volumeControl)

7、 --pct-appswitch (activity之间的切换)

8、--pct-anyevent (任意事件)

15.Monkey的日志如何进行分析

1、按关键字进行搜索,ANR、Exception、Crash、Error。

2、找到有问题的地方,查看上下文信息。

3、注意第一个switch上下文信息。

4、查看monkey里面出错前的一些事件动作,可以手动执行该动作。

5、进行问题复现,可以使用之前执行的monkey命令在执行一遍,注意seed值要一样

【测试结果分析】

(1)、ANR问题(程序无响应):在日志中搜索“ANR"(application no response)

(2)、闪退问题:在日志中搜索"crash"

(3)、异常:搜索"exception"

(4)、强制退出:搜索"force closed"

Crash和ANR专项

1、安装可以引起Crash/ANR的App

2、执行压力命令

3、析取Crash/ANR的Exception信息

案例: 执行压力测试,并且生成monkey_test.log日志文件。

#adb shell monkey -p cn.besttest.crashtest -v 100 >E:\monkey\monkey_test.log

#查看E盘文件夹下已经生成了monkey_test.log。

#打开文件,进行crash/ANR分析

标签:面试题,--,app,应用程序,adb,测试,App
来源: https://www.cnblogs.com/yayayou/p/16490297.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有