移动端测试面试

一、在测试中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等

二、你平常会看Log日志吗?一般会出现哪些异常?

常见的几种如下:

NullPointerException 空指针引用异常

ClassCastException 类型强制转换异常。

IllegalArgumentException 传递非法参数异常。

ArithmeticException 算术运算异常

IndexOutOfBoundsException 下标越界异常

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

NumberFormatException 数字格式异常

SecurityException 安全异常

三、App的性能测试关注哪些方面?

启动速度
测试内容
冷启动速度
热启动速度
完全启动速度
有网启动速度
无网启动速度
主要测试冷启动和热启动
*测试标准
测试标准:冷启动时间不超过1.5s, 热启动不超过1s
*测试方法
方法1:通过FFmpeg录屏拆帧
官网:https://ffmpeg.zeranoe.com/builds/
常用命令:https://www.jianshu.com/p/91727ab25227
方法2:使用adb
adb shell am start -W packageName(包名)/ActivityName(活动名)(绝对路径,首个Activity)
adb shell am start -W (包名)/(活动名)
方法3:使用charles抓包(查看duration)
内存
在Android系统中,每个APP进程除了同其他进程共享内存(shared dirty)外,还独用私有内存(private dirty),通常我们使用PSS(私有内存+比例分配共享内存)来衡量一个APP的内存开销

*测试点
空闲状态:切换至后台或者启动后不做任何操作,消耗内存最少
中强度状态:时间偏长的操作应用
强度状态:高强度使用应用,可以跑monkey来测试(通常用来测内存泄漏)
内存泄漏:指应用里的内存一直没有释放,内存一直增加,系统内存一直减少
*关注点
退出某个页面后,内存是否有回落
进行某个操作后,内存是否增长过快
旧版本和新版本比较
新版本和竞品比较
*测试方法
方法1:使用adb命令
adb shell dumpsys meminfo packageName
获取当前活动的包名和actively(adb shell dumpsys window | findstr mCurrentFocus)(mCurrentFocus—当前焦点)
*关注参数
native heap alloc(JNI层的内存分配)
dalvik heap alloc (java层的内存分配)
pss:应用真正占据的内存大小
注意:如果前两个值一直增长,应用程序可能出现了内存泄漏
方法2:使用性能测试工具emmagee
Emmagee是网易开发的一款测安卓应用性能的测试apk
*使用方法:
安装到emmagee到手机上,启动
选择需要测试性能的应用启动
被测应用界面会展示内存、cpu、电流、流量等数据
stop test后,本地sd卡中会保存一份性能测试数据((保存地址:/sdcard/Emmagee/******* .csv文件))
可以通过excel将数据转化为图表,更直观的查看各性能指标的数据
方法3:使用AndroidStudio 自带 CPU 和内存检测功能 – Android Monitor
方法4:内存检测工具 DDMS -->Heap
CPU
主要关注的是cpu的占用率

*测试点
在空闲时间(切换至后台)的消耗,基本没大应用使用cpu
在运行一些应用的情况下,cpu已占50%的情况下,观察应用程序占用cpu的情况
在高负荷的情况下看cpu的表现(cpu应该是在80%以上)
*关注点
和自身app的上个版本对比
和竞品对比
自身app各个activity对比
*测试方法
方法1:使用adb
adb shell top -m cpu |grep packageName(查看某个软件的cpu占用率)
adb shell top -m 10 -s cpu (查看cpu占用前10的应用)
top cpu 参数:
-m 显示最大数
-s 按指定行排序
-t 显示进程名称
-n 在退出前刷新几次
-d 刷新间隔
adb shell dumpsys cpuinfo |grep 包名(一段时间的平均值)
方法2:使用第三方工具Emmagee、GT等
方法3:使用androidstudio自带的检测工具android monitor
FPS(应用的使用流畅度)
fps是指画面每秒传输的帧数,每秒钟帧数越多,所显示的动作就会越流畅,一般来说安卓设备的屏幕刷新率为60帧/秒,要保持画面流畅不卡顿,要求每一帧的时间不超过1000/60=16.6ms,否则就会出现跳帧、画面卡顿

*关注点
高于16ms的帧率(即卡顿率)
*测试方法
方法1:adb命令
打开手机:开发者选项->GPU呈现模式分析->在adb shell dumpsys gfxinfo
操作要测试的app
在cmd窗口输入adb shell dumpsys gfxinfo 包名
得到一个矩阵数据,计算矩阵中帧率大于16的点所占比例,即为卡顿比
Draw: 表示在Java中创建显示列表部分中,OnDraw()方法占用的时间。
Process:表示渲染引擎执行显示列表所花的时间,view越多,时间就越长。
Execute:表示把一帧数据发送到屏幕上排版显示实际花费的时间。
Draw + Process + Execute = 完整显示一帧 ,这个时间要小于16ms才能保证每秒60帧
Janky frames:丢帧率
方法2:直接使用开发者选择自带的图标
打开手机:开发者选项->GPU呈现模式分析->在屏幕上显示为条形图
操作要测试的app
绿色的线是16ms的分隔线,可以直接看出来流畅度
方法3:使用第三方工具Emmagee、GT等
方法4:使用androidstudio自带的检测工具android monitor
GPU渲染
GPU渲染是指在一个像素点上绘制多次(超过一次),过度绘制对动画性能的影响是极其严重的,如果你想要流畅的动画效果,那么一定不能忽视过度绘制。

*测试指标
控制过度绘制为2x
不允许存在4x过度绘制
不允许存在面积超过屏幕1/4的3x过度绘制
*测试方法
方法1:使用手机的开发者选项
打开手机:开发者选项->调试GPU过度绘制->显示过度绘制区域
打开被测的应用,进行操作
颜色深的区域为过度绘制的地方
原色:无过度绘制
蓝色:绘制一次
绿色:绘制两次
浅红:绘制三次(可以优化了)
深红:绘制四次(必须优化)
耗电量
测试应用对电量的消耗前需要对手机本身的电量消耗有个大概了解,然后再启动待测试app看看消耗的电量增加了多少,取差值

*测试点
测试手机安装目标apk前后待机功率有无明显差异
常见使用场景中能够正常进入待机,待机电流在正常范围内
长时间连续使用无异常耗电现象
*测试方法
先关闭所有的应用,再打开被测app
方法1:使用第三方测试工具:Emmagee、GT等,只需要测试的电流静置一晚,待机
电流在正常范围内即可。一般是被测应用对比待机电流<=2mA。
方法2:使用adb命令
adb shell dumpsys batterystats |grep packageName
改变手机电池状态
手机连接电脑,默认为充电状态
切换手机电池为非充电状态adb shell dumpsys battery set status 1
获取电量消耗信息
获取整个设备的电量消耗信息: adb shell dumpsys batterystats | more
获取某个apk的电量消耗信息: adb shell dumpsys batterystats com.Package.name | more

四、简要介绍一下安卓系统四层架构

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

五、常用的adb命令有哪些?

adb devices

查看设备连接是否成功,设备的信息是否能够获取

adb install

adb -r xxxx install xx.apk 覆盖安装 x.apk是你文件所在的绝对路径
adb -s xxxx install xx.apk xxxx 就是手机序列号 指定手机进行安装

adb uninstall

adb -s xxxx uninstall com.xx.xx 指定删除某台手机
adb -s xxxx uninstall -k com.xx.xx 卸载了应用但是保留卸载软件的配置和缓存文件

install 是 xx.apk 的文件,uninstall 是这个apk文件里面具体存在的包名。
可以使用命令:adb shell pm list packages ,会出现你手机中所有安装包的包名,找到你需要卸载的就可以了

adb shell

向已连接的 Android 设备或模拟器发送 shell 命令

adb kill-server

关闭adb服务

adb start-server

启动adb服务

六、写一个monkey命令?

# 在 com.example.app 这个 APP 上随机发送 10000 个事件
adb shell monkey -p com.example.app 10000

# 事件间隔10毫秒, 随机发送 10000 个事件
adb shell monkey -p com.example.app --throttle 10 10000

# 触屏事件占 30%, 手势事件占 10%, 发送 10000 个事件
adb shell monkey -p com.example.app --pct-touch 30 --pct-motion 10 10000

七、测试过程中遇到app出现crash或者ANR,你会怎么处理? 

可以先把日志过滤出来: adb logcat | findstr xxxxx(过滤日志信息) ,然后再搜索其中的关键字,比如:exception、crash,看看是那些方法或者异常导致了问题的发送,初步定位问题原因后,可以交给开发人员去具体查找深层原因并修复。

八、App的闪退通常是什么原因造成的?

缓存垃圾太多
– Android系统的特性,如果长时间不清理垃圾文件,会导致越来越卡,甚至闪退。
运行程序太多,导致内存不足
应用版本兼容问题,分辨率兼容问题
APP中访问网络的地方,组件能否正常下载并显示
APP的sdk与手机系统不兼容
系统升级后,新版本不兼容老版本的API,返回对象失败,报空指针
软件权限未开放

九、如何做app的兼容性测试?

设备类型、生产商、显示屏大小、分辨率、版本等
 

上一篇:day38课后作业--手机端测试adb


下一篇:【愚公系列】2021年12月 python爬虫自动化-WEditor自动化APP测试工具安装和使用