软件测试 面试之app测试(价值2万的线下培训资料)

  • App测试
  1. app测试与web测试的区别

参考答案:

1)、系统架构:web端系统,更新服务器,不需要更新客户端;APP如果更新了服务端,客户端也要更新并测试;

2)、兼容性。Web端要考虑不同的浏览器内核进行测试(IE、chrome、Firefox),APP的兼容性要考虑选择主流的机型,不同的分辨率、尺寸, 以及不同的操作系统;

3)、App要考虑交叉事件测试,安装,卸载,前后台切换测试;

4)、App还要考虑界面操作,如:横竖屏切换,多点触控,事件触发区域。

  1. (1)APP的兼容性怎么测试,测了哪些机型?哪些版本?

2.(2)那又怎么测Android的兼容性、怎么测手机的兼容

兼容性测试,是指测试软件在特定的硬件平台上、不同的应用软件之间、不同的操纵系统平台上、不同的网络等环境中是否能够很友好的运行的测试。

1、主流手机的分辨率测试。比如(高*宽):1280x800、1280x720、1920x1080、800x480、854x480。

不同操作系统的兼容性,是否适配。比如,安卓从7.0到9.0

不同手机品牌。比如,华为,小米,oppo,vivo等等

  1. app测试点有哪些?

参考答案:功能,兼容性,用户体验,安全性,安装卸载升级测试,交叉事件,UI测试,性能测试

  1. app项目做了多久

参考答案:一直在做,现在app的主体需求已经完成了,后期都是一些零零散散的需求,测试工作量比较少。

  1. 你测了app哪些模块

参考答案:所有功能都测

  1. App的性能测试怎么做的

参考答案:App的性能分为服务器端的性能和手机端的性能。

服务器端的性能,我们用Jmeter工具进行测试的,和web的端性能测试方法一样的。

我们是用monkey做手机端App的稳定性测试的,使用monkey跑10万次,看它会不会出问题,如果出了问题,我们再定位原因,具体的做法是这样的:

1、在跑monkey前,先清空手机的logcat日志:adb logcat -c

2、接下来,获取logcat日志:adb logcat -v time > E:\share\logcat.log

3、使用monkey运行被测应用:adb shell monkey -p your.package.name -v 100000 > E:\share\monkey.log

4、测试完成后查看monkey日志,如果说它跑的次数跟我设的次数不一样.就说明monkey中途跑失败了。那我就要去看看logcat日志有没有null point,或anr in的关键字,如果有null point,就表示app在测试过程中crash了,然后把null point前后的日志截取下来,发给开发定位;如果有anr in,表示app在测试过程中出现了ANR(程序无响应),我们要把/data/anr/traces.txt文件取下下来,再把ANR进程号对应的日志发给开发定位问题。

  1. 你这个app测试人员有几个?怎么分工?

参考答案:2个。按测试的手机类型分工,每个人负责几种测试机型,每个人都要测试app的所有测试点。

  1. 你做APP用过monkey,能具体讲一下吗?

参考答案:我们是用monkey对APP进行稳定性进行测试。 一般我们会用到命令 adb shell monkey -p 包名 -v 次数,我们项目每次测试都跑10万次。

  1. 那如果monkey测试过程中,出现crash你怎么定位?

参考答案:crash一般是空指针导致的,在logcat日志中输入“nullpoint”搜索到相关的日志,然后把日志给开发定位。

  1. 问题开发修复了你怎么验证?(monkey怎样做回归测试)

参考答案:我们会进行回归测试,会按照之前的轨迹(seed)去跑monkey,命令是:adb shell monkey -p 包名 -s seed值 -v 次数

  1. adb命令有哪些?

adb devices 查看设备名

adb connect 连接设备

adb install xxx.apk

adb uninstall 包名

adb logcat -v time | findstr START

adb push 本地路径  服务器路径

adb pull  服务器路径  本地路径

adb shell monkey -p 包名 -v(vv) 次数  

adb shell monkey -p 包名 -s seed值(回归测试)-v(vv) 次数

adb logcat -c

adb logcat -v time > 本地路径

高级参数扩展:

忽略超时:--ignore-timeouts

忽略崩溃: --ignore-crashes

-v:   启动提示、测试完成和最终结果等少量信息

-vv:  提供较为详细的日志,包括每个发送到Activity的事件信息

-vvv: 最详细的日志,包括了测试中选中/未选中的Activity信息

例如:

adb shell monkey  --ignore-crashes    -p 包名  -s   -v(vv) 次数

adb shell monkey  --ignore-timeouts   -p 包名  -s   -v(vv) 次数

adb shell monkey  --ignore-crashes  --ignore-timeouts  -p 包名 -s  -v(vv) 次数

  1. (1)看你写有用MONKEY做APP测试,怎么做的?

12.(2)如果有问题的话怎么定位?(面试官)

我:(1)我们是使用monkey来做稳定性测试的,测试前,先用adb logcat -c清空服务器上原有的日志,再用adb logcat -v time命令,将logcat日志导出到本地电脑上保存;

   (2)再使用monkey命令adb shell monkey -p 包名 -v 次数,然后跑10万次。跑完后就看monkey日志,如果说它跑的次数跟我设的次数不一样.就说明monkey中途跑失败了。那我就要去看看logcat日志有没有null point,或anr in的关键字,如果有null point,就表示app在测试过程中crash了,然后把null point前后的日志截取下来,发给开发定位;如果有anr in,表示app在测试过程中出现了ANR(程序无响应),我们要把/data/anr/traces.txt文件取下下来,再把ANR进程号对应的日志发给开发定位问题。(日志具体的信息,我们看不懂)

***************************

APP出现ANR的原因:

1、线程阻塞的

2、内存不足

3、CPU满负荷(由于现在的手机基本都是8核CPU,所以基本不会出现CPU满负荷的情况)

APP出现CRASH的原因:

1、空值指针

2、数组越界

3、内存不足

4、CPU满负荷(由于现在的手机基本都是8核CPU,所以基本不会出现CPU满负荷的情况)

***************************

  1. appium自动化环境是怎么搭建的呢?

参考答案:这个环境搭建起来,稍微复杂些,我自己总结了个文档,网上都找不到的。把这个环境搭建起来,最好先把selenium自动化环境搭建起来,然后安装JDK,配置环境变量,接下来安装nodejs,安装appium,安装SDK,配置好ANDROIR_HOME环境变量就可以了。

  1. appium你是用什么工具定位元素的?

参考答案:可以用uiautomatorviewer,但是这个工具不稳定,经常报错;我一般都用appium自带的inspector来定位。

  1. app自动化,你会用什么方式来定位元素?

参考答案:appium定位方式有id,classname,xpath,还有find_element_by_android_uiautomator,根据实际情况来灵活运用。

  1. H5元素怎么定位?

参考答案:要切换上下文,这个和selenium自动化里面的切换表单有点相似。首先,我们要查出H5页面的context名称,再用switch_to.context()方法切换过去,接下来,就可以进行正常的操作了。

  1. web自动化和app自动化有什么区别?

参考答案:测试的思路都是一样的,要用到元素定位,unittest框架这些,app自动化定位可以用appium的Inspector来定位。

  1. 如何判断客户端还是后台的问题

一、客户端问题

1、文字,图片有误;

2、无法输入,按钮不可用;

3、抓包信息显示客户端发送的信息有误。

二、服务器端问题

1、通过抓包检查服务器返回的信息,如果信息有误,就可以断定是服务器的问题;

2、客户端向服务器发送信息后,服务器无响应。

  1. 你怎么做app测试的?

测试前,先熟悉app的原型图和业务需求,确定测试点,开发做完接口之后,先做接口测试,App开发好后,先做一个冒烟测试,看看软件的基本功能是否可用,如果正常,我们再做功能测试,UI测试,兼容性测试,交叉事件测试,安装卸载测试等。

如果面试官问具体某个测试类型怎么,就要举例子加以说明。

比如:

UI测试:检查app的UI是否和原型图一致。

功能测试:APP测试也要根据软件说明或用户需求来验证App的各个功能实现

兼容性测试:xxxx

用户体验测试:xxxx

(补上app的8大测试点,并举例子说明)

  1. 为什么要限速/模拟弱网?

参考答案:主要是为了模拟app端(也包括pc端)在低网络速度的情况,是否有bug,对用户体验是否有影响

(经典案例: --多次点击订单按钮,后台生成多张订单 -- 原因:前端没有对按钮做去重处理)

  1. 当monkey异常终止,我如何协助开发定位问题?

参考答案:

1)运行monkey做稳定性测试的同时,需要把应用的logcat日志取下来。

2)monkey在运行中出现异常,一般是两种原因导致的,一个是crash,程序崩溃,一个是ANR,程序没有响应;

3)当monkey异常终止,就进入logcat日志,搜索关键字“anr in”,如果存在该关键字,说明app出现了ANR异常,接下来把/data/anr/目录下的trace.txt文件取下来,将出现问题的进程号对应的日志发给开发定位;

4)如果没搜索到“anr in”关键字,就搜索“nullpointer”,存在该关键字,说明app出现了CRASH异常,就把nullpointer异常关键字上下的日志发给开发定位。

  1. monkey在运行过程中,可能会出现异常,一般的原因有以下方面:

1)、应用程序崩溃(crash)或接收到任何失控异常;

导致crash的原因有:

a)、程序存在空指针;

b)、数组越界;

c)、CPU不足;

d)、内存不足。

2)、应用程序不响应(application not responding,简称:ANR); ---- 当系统5秒内无法响应用户输入事件,就报ANR的错误。

导致ANR的原因有:

a)、线程堵塞;

b)、CPU不足;

c)、内存不足。

  1. 使用monkey做测试

adb shell monkey -p com.mymoney -v 500

    这个命令将会启动你的软件并且触发500个事件.

  1. 使用monkey做回归测试

monkey命令后面可以带很多参数,常见的除了-v、-p还有-s,-s 后面加上monkey上一次运行时候的产生seed值,就可以让monkey重复上一次运行时的操作路径,从而实现回归测试。

   例如:

   adb shell monkey -p  com.mymoney  -s 45544215878 -v 5000

  1. Appium
  1. Appium的工作原理是什么?

  1. 2.appium如何远程调用其他机器?

参考答案:在上个项目中,一般我们只使用一台机器去跑appium脚本。

涉及到多台机器调用用的少一些,不过我自己业余时间有学过,大概说一下我的思路。

比如:A要使用B的服务为例:

1. 首先,修改B的服务主机 ip

2. 将A机器要执行的脚本中的ip替换为B的服务ip

3. 将测试机插到远程机B上

4. 在机器A上执行脚本,就可以调用远程机

  1. 3.appium遇到系统弹窗是怎么处理的?

参考答案:和selenium方法一样的。使用switch_to.alert.accept()来接收弹窗,如果是拒绝就是switch_to.alert.dismiss()

  1. 4.appium遇到有电话或者短信怎么处理?

参考答案:这种情况一般会导致定位不到相关元素,我们就可以直接用try....except去捕捉异常处理,写一些处理逻辑,比如设置等待或者停止运行等。

  1. 十六、APP测试常见的严重问题有(例Crash,ANR)?分别引起的原因有哪些?(*****了解*****)

参考答案:(回答这个问题,可以说两三个就可以了)

1)、Wifi和移动数据之间切换,没有提示;

2)、长时间使用,内存不足,可能是内存泄露;

3)、多次操作前后台切换,导致App崩溃 --> 大部分原因是因为:Activity切换到后台之后,内存不足引起的。

4)、敏感数据没有加密,如:用户名和密码。

5)、线程阻塞,导致出现ANR的问题。

6)、空指针,导致App崩溃

7)、数组越界,导致App崩溃

十七、Android APP内存不足时,系统如何结束进程获得内存?(*****了解*****)

  系统会自动杀掉长时间没被使用的进程来获得内存。

  • 真实案例分析
  1. 登陆的时候,所有信息输入正确,点击登陆按钮没反应

找1~2个真实案例,记一下问题一:

现象:原因:

1、浏览器兼容性问题;

2、网速太慢;

3、系统卡顿;

4、代码处理逻辑问题,没有做页面跳转。

问题二:

  1. 面试官:如果一个购物平台充值的时候有重复入款的情况 从测试的角度,你会怎么复现问题,结合什么工具来进行测试!

参考答案:

用Fiddler工具抓包,查看点击一次充值按钮,发起了几次充值请求,如果超过一次请求,说明前端的处理逻辑出了问题,发起的充值请求次数错误;

如果前端的请求次数是正确的,就查看应用服务器的日志,让开发定位是否是应用层的代码有问题;应用层没问题,就是数据库的代码出问题了。

  1. 3、实际案例:

我们当时是申请退费100,但是实际退费了双倍,退费金额就直接被改了。但是仍然是一次请求。

原因:客户申请退费的时候,系统弹出确认退费对话框的同时,前端把退费金额发给了后台的一个变量,用户点击取消按钮,变量的值没有清空;用户再次退费的时候,就退了双倍。

  1. 4、系统并发200个用户,Jmeter 提示  http  status-code = 500

原因:数据库连接没有来得及关闭,就有用户访问上来了,导致数据库崩溃 。这个就是数据库的链接这块开发没有处理好

  1. 5、面:给你一个项目,已经上线了,现在要增加两个功能点,星期五要上线,你会怎么安排

先做需求分析,判断这两个功能点能否在短时间内完成,如果可以完成,不会影响其他的模块,然后做后面的安排。第一天写用例,后面两三天测试,提交缺陷,做回归。最后写报告,给客户验收。

  1. 6、面:那如果你这边测试是1+1=3,开发那边是1+1=2那怎么办?

1、先确认测试环境的代码是不是和开发那边的是一致的,因为有可能是开发没把代码提交到服务器,我们现在测试的版本还不是最新的;

2、如果测试环境的代码和开发的是一致的,就用fidder抓个包,看看问题是在前台还是后台,如果服务器返回的数据有问题,就把响应的服务器的日志取下来发给开发定位。

参考答案:

  1. 7、测试过程中项目紧急,测试环境有问题,数据提供不了(构造不了数据),你该怎么办?

参考答案:从生产环境上把数据导到测试环境上测试;如果生产环境的数据包含了用户的个人信息,需要进行脱敏处理,就是导入到测试环境上之后再把用户的信息修改下,再测试。

  1. 页面有个日期控件,我需要写入一个开始时间和结束时间,有没有遇到过这种场景?

参考答案:

1)、如果可以直接修改值,就用send_keys()输入值;

2)、如果输入日期的输入框不能直接修改,一般来说,这个输入框有一个readonly的属性,调用js将这个属性删除,然后再用send_keys()输入值;

  1. 10、app版本升级具体应该怎么做?

参考答案:app的升级,我们可以在后台设置,只对指定的手机进行版本的推送,然后现在这几台手机上进行升级的测试,如果没有问题,再去全量推送。

  1. 11、升级出现问题怎么办?

升级出现问题,就先修复问题,然后修复完成之后,再在测试机上进行测试,没有问题,再全量推送了。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值