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