假设当你在移动App中,点击一个按钮,比方说,美团的登陆按钮,如果从移动App的界面看起来,任何事情都没有发生,你将如何分析定位问题大致发生在什么地方?
界面未给出响应的原因:
程序问题:
1、按钮的监听事件未正确调用,或者干脆就没有添加监听
2、监听确认被调用,但监听过程出现错误或异常,例如参数传输失败。
3、前端调用接口错误,如后端出现运行时异常,没有给出相应的提示消息
设备问题:
1、网络延迟,响应没有及时出现,超时
2、手机卡顿,出现死机现象
3、响应被中断
请你说一说web测试和app测试的不同点:
系统架构方面:
web项目,一般都是b/s架构,基于浏览器的
app项目,则是c/s的,必须要有客户端,用户需要安装客户端。
web测试只要更新了服务器端,客户端就会同步会更新。App项目则需要客户端和服务器都更新。
性能方面:
web页面主要会关注响应时间
而app则还需要关心流量、电量、CPU、GPU、Memory这些。
它们服务端的性能没区别,都是一台服务器。
兼容方面:
web是基于浏览器的,所以更倾向于浏览器和电脑硬件,电脑系统的方向的兼容
app测试则要看分辨率,屏幕尺寸,还要看设备系统。
web测试是基于浏览器的所以不必考虑安装卸载。
而app是客户端的,则必须测试安装、更新、卸载。除了常规的安装、更新、卸载还要考虑到异常场景。包括安装时的中断、弱网、安装后删除安装文件 。
此外APP还有一些专项测试:如网络、适配性。
iOS应用和Android应用测试有什么侧重点?
- android运行基于虚拟机,ios则是沙盒机制
- android是真后台,ios是伪后台,所以安卓才会卡
- 分辨率:iOS 覆盖的分辨率和系统是有限的。
- 兼容性:Android 比较碎片化,覆盖的机型版本比iOS更多,android有各种定制rom,手机型号太多。
- 权限:安卓还要特别考虑权限,6.0是分水岭
- 应用安装渠道:安卓比较多
移动端测试:
Android手机和IOS手机,系统有什么区别?
1、两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
2、两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。
3、IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。
Android:
1:使用灰盒进行功能测试
2:使用fiddler或者Charles进行抓包测试
3:兼容性测试,Android 从4.0版本的手机测试到9.0版本手机
4:各大品牌的手机都的进行测试,比如:小米小米9 小米8 小米7 小米6 note 红米系列 7红米5,华为: 华为mate20 华为mate10,华为荣耀: 荣耀10,9,8 ,vivo: x21,27,23,oppo: R7,R9,R11,三星手机: note9, 8,7 S9,8。
5:稳定性测试: 使用monkey命令进行稳定性测试
6:专项测试,使用腾讯专项测试工具进行,测试耗电量,流量,CPU占用率
7:性能测试,对app的接口进行性能测试,使用工具jmeter或者loadrunner
8:对app接口进行接口测试,使用postman或者Jmeter都行
9:如果有时间写自动化脚本
ios:
1:使用灰盒进行功能测试
2:使用fiddler或者Charles进行抓包测试
3:兼容性测试:ios版本测试从9-12,手机型号从4S测试到xmax
4:性能测试接口和安卓的是一样的所以只需要进行一次就可以了
5:专项测试:使用腾讯专项测试工具进行,测试耗电量,流量,CPU占用率
6:编写自动化脚本
WEB端测试:
前端 :
1:web也使用灰&测试方法
2:兼容性测试:IE浏览器7-12,火狐浏览器 35-最新的,谷歌浏览器,别的浏览器有时间就可以测试
3:对web端页面进行性能测试,使用jmeter或者loadrunner
后端
1:测试http接口
2:测试https接口
3:测试tcp接口
4:测试dubbo接口
5:对后台代码进行代码审核,进行白盒测试
请讲诉移动应用的灰度是怎么做的?
1.开黑白名单(白名单的人下载后可使用,黑名单的人及时可下载但也不可使用)
2.开灰度环境(直接在后台控制,可有一级灰度发布、二级灰度发布、三级灰度发布、全量发布等,每个灰度针对不同的人群)
3.iOS版本可以使用testflight灰度发布,让加入的人群提前体验
4.Android可以使用第三方平台(如:蒲公英,可设置下载密码,提供给特定的人群体验)。或者生成下载连接发给对应的人
.请简述移动应用在升级安装时候应该考虑的场景?
- 当版本为非强制升级版时,用户可以取消更新,老版本能正常使用。用户在下次启动app时,仍能出现更新提示。
- 当版本为强制升级版时,当给出强制更新后用户没有做更新时,退出APP。下次启动app时,仍出现强制升级提示。
- 不删除APP直接更新,检查是否能正常更新,更新后能否正常工作。
- 删除老的APP,重新下载APP,能不能正常工作。
- 不删除APP直接更新,检查更新后的APP和新安装的APP提供的功能一样。
- 检查在线跨版本升级能否成功,版本过老是否提示用户重装。
- 更新成功后,用户数据有没有丢失,各个配置项是否还原。
请描述下微信朋友圈发小视频的用例设计?
- 功能:
入口图标的标识度 进入和退出操作简易度 取景框大小 拍景和自拍切换
视频的像素限制 视频的时长限制 发送的进度提示
- 性能:
发送的时间 操作是否卡顿
- 兼容:
不同机型分辨率 不同系统版本 不同网络情况 不同流量情况
如果让你来测试扫码支付,你会考虑哪些场景?
- 卡的类型(一类户:借记卡、信用卡、各个开户行)
- 二类户:虚拟账户如微信里的零钱账户、支付宝的余额宝、电子账户
- 二维码的商户类型(微信、支付宝、汇宜、银联)
- 支付限额(单笔限额、累计限额、日累计、月累计、支付笔数)
- 退款(退款入口、退款进度、退款结果)
- 对账:资金流动(我方扣款数额正确,对方收款数额正确)数额及时效
- 支付结果展示、交易明细
- 支付接口安全性、接口的性能
- 异常情况(卡异常、余额不足)
- 连续扫码支付,每天的扫码支付次数限制及数额限制
- 二维码有效期
- 有无相机权限
- 前后置摄像头
- 像素低端的手机能否扫码成功
- 兼容性(不同手机厂商自带相机功能实现不一致)
有一天早上打车高峰,滴滴服务端挂了大概30分钟,工程师抢修之后,马上上线,之后又挂了,请问有哪些原因会造成这个情况?
- 还是考测试思维, 一定记得先确认需求,再定性,定量。 一般都要反问, 服务器是哪个服务器?后端应用服务器?数据服务器?缓存系统服务器?中间件服务器?文件系统服务器?
- 不说就自己假定一个, 然后第一次挂第二次挂分开说,先问有没有错误码,日志有吗,有就看日志,没有就猜 是应用服务器挂了啊,是不是高峰期顶不住这么大并发访问啊?是数据库服务器啊,是不是频繁读写受不了啊,读写有分开吗?同步还是异步啊
- 第二次挂,可能更多了,是不是代码弄错了,改坏了
- 服务器内存不够
- 服务器超出负载
- 并发量太大
- 遇到恶意攻击
Android中造成APP闪退的原因总结
1. 网络异常引起的
2. APP中访问网络的地方,组件中的ImageView没有正常的下载并显示到app 页面上。
3.APP的sdk和手机的系统不兼容。
4.拍照/选择图片后闪退:①手机内存小②部分手机在使用相机拍照时候存在横竖屏切换,可能会导致我们应用重新调整生命周期.解决办法:在使用到拍照功能的Activity设置:android:configChanges="orientation|keyboardHidden|screenSize"
5.还是版本问题:有些API在老版本中有,在新版本中没有,造成对象为空引起闪退
6.缓存垃圾过多:由于安卓系统的特性,如果长时间不清理垃圾文件.会导致越来越卡.也会出现闪退情况.
7.权限问题,一般是AndroidManifest文件中忘记配置相关权限。
8.在用AS开发Android程序时,涉及到Android真机版本,在生成APK文件时,如果没有把V1,V2全部勾选,可能会出现闪退。
9.页面布局问题,用LinearLayout布局时忘记指定orientation,出现了闪退。
Android如何查看闪退日志
一、手机crash之后,如果弹出的“应用程序意外停止”的提示如果没有消失,则可使用以下方法获取crash日志
1、直接连上eclipse中的ddms进行crashlog的获取。
2、或者通过命令获取:adb logcat –v time >E:x.txt (-v time的意义是:打印出的log可以看到具体的时间)。
二、手机crash之后,如果弹出的“应用程序意外停止”的提示如果消失,获取crash日志的方法
1、adb bugreport >E:xx.txt
2、日志会保存到相应的目录中,打开日志文件搜索关键字”fatal exception”或”crash”即可找到相应的crash日志。
(2)用adb工具抓取android手机闪退日志
1.下载adb工具包
2.注意事项
请确保电脑上只连接了一台手机设备(最好只连接一条USB线),同时确保手机已开启USB调试模式(可通过手机助手查看连接状态)
3.Adb工具包路径存放
最好放在硬盘根目录下
4.使用dos命令窗口
可通过win+r弹出运行窗口,输入cmd;或者通过:开始->运行,输入cmd,然后回车打开dos命令窗口。
在dos窗口输入:cd D:Android(cd后面需空格,路径是你adb存在的路径),然后回车进入到工具包文件夹内
在抓取log前,可输入命令:adb logcat -c然后回车清除旧日志信息。
清除旧日志信息输入命令:,adb logcat -v time >.\logcat.log 开始抓取日志,同时在手机上操作闪退步骤。
注意:adb logcat -v time:是开始抓取日志命令
>:代表输出到
.\logcat.log:代表当前路径下日志的名称
5.结束抓取日志
使用组合件:Ctrl+c可结束日志抓取。
6.查看日志信息
如果你是使用以上命令执行日志抓取,则只需在当前路径下查看logcat这个日志文件;如果你是指定到某个路径下,则到你指定的路径下查看logcat日志文件
Ios crash(崩溃)的原因与抓取 crash日志的方法
rash的产生来源于两种问题:违反iOS策略被干掉,以及自身的代码bug。
1.IOS策略
1.1低内存闪退
前面提到大多数crash日志都包含着执行线程的栈调用信息,但是低内存闪退日志除外,这里就先看看低内存闪退日志是什么样的。
我们使用Xcode 5和iOS 7的设备模拟一次低内存闪退,然后通过Organizer查看产生的crash日志,可以发现Process和Type都为Unknown:
1.2 Watchdog超时
Apple的iOS Developer Library网站上,QA1693文档中描述了Watchdog机制,包括生效场景和表现。如果我们的应用程序对一些特定的UI事件(比如启动、挂起、恢复、结束)响应不及时,Watchdog会把我们的应用程序干掉,并生成一份响应的crash报告。
1.3用户强制退出
一看到“用户强制退出”,首先可能想到的双击Home键,然后关闭应用程序。不过这种场景是不会产生crash日志的,因为双击Home键后,所有的应用程序都处于后台状态,而iOS随时都有可能关闭后台进程,所以这种场景没有crash日志。
另一种场景是用户同时按住电源键和Home键,让iPhone重启。这种场景会产生日志(仅验证过一次),但并不针对特定应用程序。
这里指的“用户强制退出”场景,是稍微比较复杂点的操作:先按住电源键,直到出现“滑动关机”的界面时,再按住Home键,这时候当前应用程序会被终止掉,并且产生一份相应事件的crash日志。
通常,用户应该是遇到应用程序卡死,并且影响到了iOS响应,才会进行这样的操作——不过感觉这操作好高级,所以这样的crash日志应该比较少见。
2.代码bug
此外,比较常见的崩溃基本都源于代码bug,比如数组越界、插空、空引用、引用未定义方法、多线程安全性、访问野指针、发送未实现的selector等。
再来谈谈获取iOS设备上崩溃日志(Crash Log)的方法
第一个方法:XCode 的菜单Window->Organizer 选择Devices -> 选中的手机 -> 点击手机名称左边的箭头 会等到如下图
在右边竖蓝色矩形框中 Type里面出现两种类型:Unknown和Crash 这两种类型分别是 内存不够回收内存kill应用程序导致Crash和程序异常Crash的日志。
第二种方法 打开手机 - > 设置 -> 通用 - > 关于本机 - > 诊断与用量 - > 诊断与用量数据 这里面就是所有应用的Crash日志。(本人没找到这个)
第三种方法使用第三方软件:itools等
如果你平时不用iTunes,而是使用itools这类第三方的软件对iPhone设备进行管理,也是没问题的。
打开itools,在你的设备下,找到“高级功能”,点击“崩溃日志”,然后将需要的日志导出到电脑里面就可以了!
第四种方法 通过iTunesConnect(Manage Your Applications - View Details - Crash Reports)获取用户的crash日志
大部分用户可能都会使用iTunes软件来管理iPhone或者iPad设备,这时候同步的Crash日志就会同步到电脑上,我们只需要在特定的路径里面寻找即可。
Mac OS X:~/Library/Logs/CrashReporter/MobileDevice