1、移动APP必备知识点
1.1 Android APP 内存不足时,如何获得内存?
系统优先结束被挂起(暂停)的进程,释放内存。
1.2 APP 测试常见问题有哪些?原因有哪些?
常见的有 crash、ANR(应用无响应、卡死等),一般由设备碎片化、网络波动大、内存泄漏、代码编写错误。
1.3 APP 自动化测试工具有哪些,并简要介绍
1.3.1APP UI测试工具:
- uiautomator2
openatx开源的ui自动化工具,支持Android和iOS。主要面向的编程语言是Python,API设计简洁易用 - Appium
基于Node.js的一款非常成熟的APP UI自动化工具,支持多种语言开发,在测试圈非常流行,可以说是APP UI自动化领域的标杆产品 - Airtest
网易开源的一个ui自动化测试工具,通过图像识别和UI控件检索技术,使得游戏测试简单快捷。支持Android、iOS、Windows、Unity、Cocos2dx、白鹭引擎、微信小程序,上手简单 - ATXServer2
支持Android和iOS的移动设备管理平台。可以通过web界面,察看测试手机的状态,可以做到远程操控手机,对于测试兼容性具有较大帮助。部署方便,支持docker-compose部署 - Appetizer
可以进行APP UI自动化测试,也可以支持APP稳定性测试,提供GUI界面操作,易用性极强,满足日常UI自动化需要。但是只有部分组件开源。 - robotium:是一款国外的 Android 自动化测试框架,主要针对 Android 平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑动等)、查找和断言机制的 API,能够对各种控件进行操作。
1.3.2 APP稳定性测试工具:
- UICrawler
基于Appium的App UI遍历 & Monkey 工具,支持iOS和Android - Maxim
号称是智能monkey,用过的人都觉得真香。支持原生monkey、遍历控件、黑白名单等功能,而且也封装了更加易解析的日志文件。有了它之后,已经可以不需要再用原生monkey了 - AppCrawler
一个基于自动遍历的app爬虫工具. 支持android和iOS, 支持真机和模拟器. 最大的特点是灵活性. 可通过配置来设定遍历的规则。
1.3.3 APP性能测试工具:
- SoloPi
SoloPi是一个无线化、非侵入式的Android自动化工具,公测版拥有录制回放、性能测试、一机多控三项主要功能,能为测试开发人员节省宝贵时间(官方介绍)。一般用于APP的性能测试比较多。 - GT
腾讯开源的APP的随身调试平台,可对APP进行快速的性能测试(CPU、内存、流量、电量、帧率/流畅度等等)、开发日志的查看、Crash日志查看、网络数据包的抓取、APP内部参数的调试、真机代码耗时统计等。
1.4 Android 与 web 测试异同点?
1.4.1 相同点
- 测试用例设计按照:等价类、边界值等方法,测试原理也相同;
- 大多数都采用黑盒测试方法来验证业务功能;
- 需要检查界面布局、风格和按钮是否美观、统一等(UI 测试);
- 测试页面载入和翻页的速度、登录时长是否溢出等问题(性能测试);
- 测试应用系统的稳定性。
1.4.2 不同点:
-
手机需要进行中断测试,验证方法包含:
来电中断:呼叫挂断、被呼叫挂断、通话挂断、通话被挂断
短信中断:接收短信、查看短信
其他中断:蓝牙、闹钟、插拔数据线、手机锁定、手机断电、手机问题(系统死机、重启)
-
安装卸载测试:
全新安装新版本
新版本覆盖旧版本安装
卸载旧版本,安装新版本
卸载新版本,安装新版本
-
web 自动化测试使用的工具较常用的是 selenium,而 android 手机自动化测试比较常用的自动化工具是 monkey、Appium等。
-
兼容性测试:在WEB端是兼容浏览器,在App端兼容的是手机设备;
-
性能测试:在WEB测试只需要测试响应时间这个要素,在App测试中还需要考虑流量测试和耗电量测试
-
移动app需要专项测试:流量使用过多、耗电量过大、在某些设备终端上出现崩溃或者闪退的现象等。
1.5 app 测试有哪几种环境?
- 本地环境:app 安装的手机环境和电脑搭建的自动化测试环境(比如安卓 SDK 等);
- 服务器环境:war 包部署的服务器,服务器可以通过浏览器访问。
1.6 Android SDK 的安装步骤是什么?
- 下载 jdk 和安卓 sdk;
- 安装 jdk,配置环境变量(java_home、classpath、 path)。
1.7 介绍移动应用及其服务端的测试点?
- 移动应用主要有:权限、安装运行卸载、UI、功能、性能、中断、兼容性、安全性、 回归、升级更新、用户体验;
- 服务端:接口测试、性能测试、安全测试、稳定性测试。
1.8 如何判断一个 BUG 是客户端还是后台问题?
通常通过以下这些方法来来判断:
- 界面元素显示,按钮,布局 —前端
- 如果没有发送请求,或者请求参数错误 ----前端
- 请求返回的数据有误,展示也错误 ----后端
- 请求返回的数据正确,展示错误----前端
- 逻辑错误----后端
- 兼容问题 ----前端
1.9 安卓系统如何取出日志信息
- 把安卓系统日志信息实时导入到本地:adb logcat -v time > d:\mylog.log;
- 运行使用某个 app,实时获取该 app 的日志信息(cmd 里面的返回信息) :adb shell monkey -p com.android.calendar -v 1000 > d:\mylog2.log。
1.10 常见的 adb 命令
- 查看当前连接的设备:adb devices;
- 安装软件:adb install 路径\xx.apk;
- 卸载软件:adb uninstall <包名>;
- 从电脑上发送文件到设备:adb push <本地路径> <远程路径> adb push C:\test1.txt /sdcard/;
- 从设备上下载文件到电脑:adb pull <远程路径> <本地路径> adb pull /sdcard/test1.txt D:
- 实时获取日志:adb logcat -v time > D:\mylog.log;
- 登录终端设备 shell:adb shell;
- 查找包名/活动名:adb logcat | findstr START (脚本中, cmp= 后面的值就是 包名/activity 名称);
- 启动 APP 启动;
- adb shell am start -n packageName/activity;
- 关闭 app 语法:adb shell am force-stop 包名;
- 监控 APP 启动时间 adb shell am start -W packageName/activity;
- Monkey 命令:adb shell monkey -v -p mypackage 50。
1.11 一款APP 如何兼容众多主流机型进行测试
- 公司购买主流机型;
- 借用同事的手机进行测试
- 申请云真机测试
1.12 App 崩溃(闪退)原因
引起原因:
- 缓存垃圾过多:由于安卓系统的特性如果长时间不清理垃圾文件,会导致越来越卡也会出现闪退情况,运行的程序过多导致内存不足。
- 应用版本兼容问题:如果应用版本太低,会导致不兼容,造成闪退。此外,有些新版本 在调试中,也会造成应用闪退。
解决方法:
- 如果是版本太旧,更新为新版本即可;
- 如果是新版本闪退, 可能是应用在改版调试,可卸载后安装旧版。
- 检查 APP 中访问网络的地方,组件中的 ImageView 是否可以正常的下载并显示到 app 页面上。
- 检查 APP 的 sdk 和手机的系统是否兼容。
- 在一些特定情况下的闪退,比如播放视频,在 Android5.0 升级到 Android6.0 的时候, 有些系统 API 老版本有,新版本没有,到时回去对象的时候失败,报空,系统就会出现闪退。
1.13 Appium 都有哪些启动方式
1.14 Android 手机和 IOS 系统区别
通过两点回答,即:系统架构 和 渲染机制
1) 系统和架构:
- Android系统的底层建立在Linux系统之上;而ios基于UNIX系统
- 编程语言:Android的编程语言是Java和KotLin;而ios的则为ObjectC和Swift。
- 运行机制:ios采用的是沙盒运行机制;安卓采用的是虚拟机运行机制
2)渲染机制
- iOS最先响应屏幕
–>IOS的UI渲染采用实时优先级,Android的UI渲染遵循传统电脑模式的主线程普通优先级。
–>IOS的响应顺序依次为Touch–Media–Service–Core架构
–>Android系统的优先级响应层级是Application–Framework–Library–Kernal架构 - iOS系统优先处理Touch层级
–>优先级的不同导致了iOS产品以及Android手机在操控过程中的表现差异,当你滑动屏幕进行操控的时候,iOS系统会优先处理Touch层级,而Android系统则是第三个才响应Library层级,这是造成它们流畅度不同的因素之一。 - iOS图形特效基于GPU加速渲染
–> iOS系统对图形的各种特效处理基本上正好都是基于GPU硬件进行加速的,它可以不用完全借助CPU或者程序本身,而是通过GPU进行渲染以达到更流畅的操控表现。
–>但是Android系统产品则并非如此,因为Android需要适应不同的手机硬件,需要满足各种差异配置,所以很多图形特效大多都要靠程序本身进行加速和渲染,并严重依赖CPU运算的操作自然会加大处理器的负荷,从而出现卡顿的问题。