一、Android
Android 是google公司主导的一个开放的手机操作系统,不过目前已经超过了手机的局限,而定位于移动设备的操作系统。目前用于手机,平板,智能电视,智能导航,智能手环,智能眼镜以及智能家居设备
底层以Linux内核工作为基础,由C语言开发,只提供基本功能
1.1、Android四层架构
● Applications:应用程序层
● Application Framework:应用程序架构层
● Libraries:android运行库层
● linux kernel:底层linux内核
1.2、Android各版本特点
1.3、Android SDK
Android SDK,即Android Software Development Kit,是android的软件开发工具包。
它提供了在Windows/Linux/Mac平台上开发Android应用的开发组件。包含了在Android平台上开发移动应用程序的各种工具集。
1.3.1、下载并配置SDK
● 环境变量配置
○ 新建ANDROID_HOME :sdk路径
○ path添加三个变量
■ %ANDROID_HOME%
■ %ANDROID_HOME%\platform-tools
■ %ANDROID_HOME%\tools
● 验证adb
○ 只要不提示内部或外部命令,即表示配置成功
1.3.2、ADB介绍
● ADB全称Android Debug Bridge(安卓调试桥), 是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备(手机 平板 电视 智能导航…)
● 它的主要功能有:
○ 运行设备的shell(命令行)
○ 管理模拟器或设备的端口映射
○ 计算机和设备之间上传/下载文件
○ 将本地apk软件安装至模拟器或android设备
1.3.3、ADB常用命令
1.3.3.1、查看设备
adb devices //查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示
1.3.3.2、安装apk
adb install <apk文件路径>
adb install -r <apk文件路径> //覆盖安装,保留缓存
adb install -t <debug包文件路径> //安装debug包
1.3.3.3、卸载apk
adb uninstall <包名>
adb uninstall -k <包名> //若加 -k 参数,则卸载软件但是保留配置和缓存文件
1.3.3.4、查看应用包名
adb shell pm list packages //列出手机中所有应用的包名
adb shell pm list packages -s //列出系统应用的包名 -s=system系统
adb shell pm list packages -3 //列出第三方应用的包名
adb shell pm list packages <关键词> //根据关键词搜索包名
1.3.3.5、打开应用查看包名以及打开页面的名称
//activity页面 findstr根据字符串进行查找 mResumed当前显示的Activity页面
adb shell dumpsys activity | findstr mResumedActivity
adb shell dumpsys activity | findstr mFocusedActivity
1.3.3.6、登陆设备shell
adb shell //因为Android手机的内核就是一个轻量级的Unix内核,可以进行命令行式的交互要退出交互式 shell,按 Ctrl + D 键或输入 exit
adb shell <command命令> //后面加<command命令>将是直接运行设备命令, 等同于执行远程命令
1.3.3.7、adb logcat
Android的Java 崩溃基本都会包含着这个字段FATAL EXCEPTION
adb logcat -v time process | findstr 包名 > D:/log/aa.txt(v表示详细程度-v –v -v) //获取某个应用的日志输出到本地文件中
adb -s 设备名称 logcat -v time process | findstr 包名 > D:/log/bb.txt //有多台设备时adb选择设备 -s
adb logcat *:W //显示所有优先级大于等于“warning”的日志//-- V : Verbose (明细);//-- D : Debug (调试);//-- I : Info (信息);//-- W : Warn (警告);//-- E : Error (错误);//-- F: Fatal (严重错误);//-- S : Silent(Super all output) (最高的优先级, 可能不会记载东西)
1.3.3.8、清除应用缓存
adb shell pm clear <packageName> //清除应用数据和缓存
1.3.3.9、截图
adb shell screencap /sdcard/screen.png
//然后可以使用 adb pull /sdcard/screen.png copy下来
//前两年的直播答题就是利用不断的截屏和图像分析完成的
1.3.3.10、录制屏幕
screenrecord 实用程序的局限性:
● 音频不与视频文件一起录制。
● 不支持在录制时旋转屏幕。如果在录制期间屏幕发生了旋转,则部分屏幕内容在录制时将被切断。
adb shell screenrecord /sdcard/demo.mp4
//按 Ctrl + C 键(在 Mac 上,按 Command + C 键)可停止屏幕录制;如果不手动停止,到三分钟或 --time-limit 设置的时间限制时,录制将会自动停止。
1.3.3.11、启动停止adb
adb start-server //启动adb
adb kill-server //停止adb
1.3.4、随机压力测试Monkey
1.3.4.1、Monkey介绍
Monkey就是猴子,Monkey测试,就像一只猴子, 在电脑面前,乱敲键盘在测试。猴子什么都不懂,只知道乱敲(随机测试)
通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试(足够多次),检测程序多久的时间会发生异常
1.3.4.2、Monkey的用途
Monkey 主要用于Android 的随机压力测试,是一个自动的压力测试小工具,主要目的就是为了测试android app是否会Crash(崩溃)
1.3.4.3、Monkey命令详解
adb shell monkey -p <packageName> --ignore-crashes --ignore-timeouts --throttle 100 --pct-touch 50 --pct-motion 50 --pct-syskeys -v -v -v -s 666 1000 >D:\login\monkey.log
1.3.4.4、Monkey实例
● -p 指定应用的包名
● --throttle事件之间的延时毫秒 一般100
● --ignore忽略-crashes崩溃,默认情况下monkey遇到crash会自动退出
● --ignore-timeouts超时,默认情况下monkey遇到超时自动退出
● --pct分配-touch点击事件,70—>70%
● --pct-motion滑动事件,20—>20%
● --pct-syskeys 系统事件比例
● -v -v -v日志详细程度
○ verbose详细
● -s=seed种子 ,复现bug,种子一样monkey事件一致的1.3.4.5、Monkey异常日志分析
Monkey 测试出现错误后,一般的分析步骤:
● 看Monkey的日志
○ 程序无响应的问题: 在日志中搜索 “ANR”
○ 崩溃问题:在日志中搜索 CRASH/Exception(例如果出现空指针NullPointerException)
■ Monkey 执行中断,在log最后也能看到当前执行次数
1.3.5、app性能数据
1.3.5.1、CPU
adb shell top //获取全部CPU信息
adb shell dumpsys cpuinfo //查看手机整个CPU消耗
adb shell dumpsys cpuinfo | findstr <packageName> //查看应用CPU消耗
PID:progress identification,应用程序ID
进程的状态:其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数
THR:程序当前所用的线程数 thread
VSS:Virtual Set Size虚拟耗用内存(包含共享库占用的内存)
RSS:Resident Set Size实际使用物理内存(包含共享库占用的内存)
PCY:前台(foreground)和后台(background)进程
UID:User Identification,用户身份ID
Name:应用程序名称
1.3.5.2、内存
adb shell dumpsys meminfo <packageName> //查看某个应用内存使用情况
dalvik:dalvik使用的内存
native:native堆上的内存,指C\C++堆的内存(android 3.0以后bitmap就是放在这儿)
other:除了dalvik和native的内存,包含C\C++非堆内存······
Pss:该内存指将共享内存按比例分配到使用了共享内存的进程
allocated:已使用的内存
free:空闲的内存
private dirty:非共享,又不能被换页出去的内存(比如linux系统中为了提高分配内存速度而缓冲的小对象,即使进程已经退出,该内存也不会被释放)
share dirty:共享,但有不能被换页出去的内存
1.3.5.3、启动时长
手机APP的启动时长是一个很容易被用户感知的性能指标,启动时长过长会让用户极不愿意继续等待。因此启动时长是一项比较靠前的性能指标。
APP的启时长分为两种情况:
一种是冷启动时间(通常是系统重启,即在启动前没有该App进程的情况)
一种是热启动,即App从后台被切换到前台(点back退出后再点击图标启动)
adb shell dumpsys activity | findstr mFocusedActivity //查看当前显示界面所属包名及名称
adb shell am start -W com.kwad.kwadsdk/com.kwad.demo.open.splash.TestSplashScreenViewActivity
WaitTime:就是总的耗时,包括前一个应用Activity pause的时间和新应用启动的时间
ThisTime:表示一连串启动Activity 的最后一个 Activity 的启动耗时
TotalTime:表示新应用启动的耗时,包括新进程的启动和 Activity 的启动,但不包括前一个应用Activity pause 的耗时。也就是说,一般只要关心 TotalTime 即可,这个时间才是自己应用真正启动的耗时
总结:这种测试方法简单容易,并且可以准确的计算出系统启动这个Activity的时间。但是缺点是不包括点击icon到系统接收到消息的时间,也就是说这个时间并不能完整的模拟用户操作场景的启动时间
1.3.5.4、帧率——有无卡顿
手机帧速率(fps)是帧速率也称为FPS(Frames Per Second)的缩写——帧/秒。
手机帧速率是指每秒钟刷新的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次。
如果具体到手机上就是指每秒钟能够播放(或者录制)多少格画面。同时越高的帧速率可以得到更流畅、更逼真的动画。
每秒钟帧数(FPS)越多,所显示的动作就会越流畅。捕捉动态视频内容时,此数字愈高愈好。
进入开发者选项 开启GPU呈现分析:各种颜色的线表示渲染这一帧用了多长时间,时间越长表示卡顿明显,绿色横线为标准线,app流畅运行应该在标准线以下。
https://www.zhihu.com/question/288980837
1.3.5.5、获取电量
adb shell dumpsys battery //查看电量
adb shell dumpsys battey set status 1 //将充电模式改为非充电模式,status=2代表充电
有的手机设置菜单里面会有流量和电量统计类,只需在测试前后记录下电量值,亦可获取消耗电量数值。
1.3.6、真机测试
● 数据线依次连接手机与电脑(原装数据线)
● 打开设置,找到关于手机,连续点击8—10次版本号,打开隐藏的开发者模式
● 进入开发者模式,开启开发者选项及USB调试选项
● 状态栏中USB传输切换为“传输文件”或“传输照片”
● 界面弹出是否允许USB调试时,选择确认
● 执行adb devices查看手机与电脑是否连接
● 注意:以上操作如果电脑与手机还不能够连接,电脑上下载对应手机助手软件(例如华为手机助手,Oppo手机助手),使用手机助手连击,驱动将会自动安装到电脑上,再次使用adb指令依次杀死adb和打开adb即可连接(推荐360手机助手)
二、IOS
iOS是由苹果公司开发的移动操作系统。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad上。iOS与苹果的macOS操作系统一样,属于类Unix的商业操作系统。
2.1、IOS架构
● UI层: 主要有SpringBoard、Spotlight等UI交互界面
● 应用框架层:主要有 Cocoa Touch
● 核心框架层:主要有 OpenGL、Quartz等图形、多媒体组件
● Darwin:操作系统核心,包括XNU内核和UNIX shell
2.2、手机品牌国内占比
2.3、IOS系统版本占比
2.4、IOS日志查看
● 在mac电脑上,直接使用xcode工具(ios开发的工具)进行查看
● 在windows电脑上,可以下载安装itools,通过itools—工具箱,工具箱中有一个实时日志和崩溃日志,查看
2.5、IOS monkey了解
https://blog.csdn.net/czc1009/article/details/49513359
三、手机云端兼容性测试
Android App兼容性测试,是一个比较重要的App评价内容,兼容性测试主要是对App在各类机型上的兼容、适配等情况进行测试。搞清楚这一阶段的测试重点后,因此,Android App在进行兼容性测试前,一定要做好其前序测试内容,否则兼容性测试效果将会较差。
3.1、机型适配问题
Android兼容测试一定要做到宽范围覆盖,如果做不到这个,那么就违背了兼容性测试的目标——测试App在各类机型、系统上的运行是否兼容、适配。
因此,兼容性测试必须要在各个机型、系统上对App进行运行、测试,查看相关UI是否适配、功能是否正常。所以,必须要为兼容性测试配备尽可能多的机型。这是不是意味着,你的公司要去购置各类机型设备?当然不是。对于一般的公司或者开发者,这将会是一大笔开销,为了节约资金而造成进行覆盖率较低的话,则失去了兼容性测试的意义。另外,这也是没必要的,因为往往你就一个或两三个App,为了这少量App测试,而去购置如此大量的设备,无疑是一种资源浪费。除此,还有一个原因,将在兼容性测试如何展开里去说。除此,机型量的多少也是一个权衡的过程,目前,通用的兼容性测试一般覆盖Top100-300的机型,对于实在是小量机型或者老旧机型,用户量非常小,在一定程度上,是否需要覆盖则需要权衡,总的来说,Top排名的手机基本足够。
3.2、兼容性测试如何展开
这是一个经验性的过程,可以去借鉴业界大型互联网公司的成熟App的测试方法。目前,无论是国际知名App,还是国内知名App,谷歌、Facebook,BAT等,他们都有大量的App对外推出,对于App兼容性要求非常高,因此,他们的做法是非常值得借鉴的。这些公司的兼容性测试,都有一个相同的解决方案,那就是自动化测试框架与平台的实现。通过浏览上述公司在各种大会公布的内容,或者通过论坛知识分享,都能看到,他们不仅有自己的测试实验室,拥有大量的手机,除此,还有一整套的自动化测试平台,来完成兼容性测试。
目前很多的公司,已经提供了兼容性云测服务,例如TestIn、TestBird,除此,大型公司也对外推出自己的测试工具,比如谷歌、腾讯WeTest、百度MTC、阿里MQC等等…
举例腾讯WeTest使用:
1.使用QQ登录腾讯WeTest
2.选择云测兼容性,上传测试的apk文件,选择机型,等待2-4小时,查看兼容性测试报告
3.3、App崩溃率标准
四、第三方应用性能测试
4.1、PerfDog之Android/IOS/小程序测试
4.2、SoloPi之android/IOS测试
(业界大多采用perfdog与solopi收集分析客户端性能指标,但由于性能狗不仅支持收集客户端性能数据,还支持小程序测试;由于工作原因:听说快手新组成了一个名为“最懂小程序的小程序团队”,故个人偏向性能狗稍多些)
SoloPi也是一个不错的选择,这里不再赘述。