一、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也是一个不错的选择,这里不再赘述。

Android与IOS的相爱相杀之客户端测试相关推荐

  1. 关于“稳定”的相爱相杀:负载测试和压力测试

    ① 负载测试:是通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量的测试: ② 压力测试:是通过逐步增加系统负载,测试系统性能的变化,并最终确定在什么 ...

  2. 人类一败涂地电脑版_iOS账号分享 |人类一败涂地 我们继续相爱相杀,PC大火游戏移植!...

    「 改变能改变的一切,接受不能改变的一切!」 ▼ PC 平台上爆火的多人物理益智游戏<人类一败涂地>(Human: Fall Flat)移动版正式登陆 iOS 和 Android 平台,游 ...

  3. 阿里云CDN技术掌舵人文景:相爱相杀一路狂奔的这十年

    提到阿里云CDN,不得不提技术掌舵人姚伟斌(文景),虽然他不是团队中最"老"的同学,但他却历经了淘宝业务发展最为飞速的几年,见证了从最初服务淘宝和集团内部的CDN,到如今国内服务客 ...

  4. 美团支付宝互探腹地 相爱相杀再度升级

    文章原创来自洞见网:http://www.localonline.com.cn/view/ec/735.html,转载请注明出处.​ 20年前,网络还未盛行,曾有人做过一场行为艺术"不出门, ...

  5. 无责任猜想#冰桶挑战#大佬们相爱相杀众生相

    看#冰桶挑战#大佬们点名的关系图谱,无意中发现很多有趣的关系啊,下面为八妹子自娱自乐无责任猜想,认真你就输了哦! 1.  微软谷歌苹果Facebook,老大哥.新小弟之间的相互厮杀 FACEBOOK的 ...

  6. Anchor Based和Anchor Free的相爱相杀与ATSS的诞生

    前言 我们都知道按照是否出现RPN可将目标检测算法分为two-stage和one-stage,其中one-stage的一个主要代表便是YOLO系列,而根据是否存在先验锚框的定义我们也可以将其分为Anc ...

  7. 支付宝与微信转战刷脸支付,多年相爱相杀情归何处?

    说起阿里巴巴与腾讯,似乎怎么也绕不开马云跟马化腾. 两马同台,自是不同凡响. 有次,两人同台颁奖. 主持人问马云:"你们都信马,你觉得两人之间最显著的区别是什么?" 马云笑答:&q ...

  8. 30年「相爱相杀」 :30张照片回顾乔布斯和比尔盖茨之间「不得不说」的故事

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 来源丨BI 来源公众号丨新智元(ID:AI_era) ...

  9. 30年「相爱相杀」 :30张照片回顾乔布斯和比尔盖茨之间「不得不说」的故事...

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 来源丨BI 来源公众号丨新智元(ID:AI_era) ...

最新文章

  1. 大量删除的表、查询卡顿的表,重建索引
  2. python3 协程 写法_理解Python的协程(Coroutine)
  3. Math.toRadians
  4. oracle 建立一个游戏库,Power Designer怎么新建Oracle数据?建立Oracle数据教程分享
  5. 安卓rom制作教程_【教程】一加5/5T刷入第三方ROM教程
  6. [网络安全自学篇] 十.论文之基于机器学习算法的主机恶意代码
  7. 国产智多晶FPGA下载器(调试器)的驱动安装方法
  8. 立体栅格地图_基于滑动窗口的室内三维立体栅格地图特征点提取方法与流程
  9. C语言中cvpoint后运行出错,c++ - 使用cvCreateSeq时出现未处理的异常 - 堆栈内存溢出...
  10. 专访「算法之父」Michael Saunders:人工智能未来的突破点可能在自动驾驶
  11. 三分钟带你详解SSL认证与加密技术
  12. no.4京东话费充值系统架构演讲读后感
  13. 【精品计划0】蓝桥杯 摔手机
  14. socket套接字各个接口
  15. 使用pandas清洗携程旅游数据
  16. 图解HTTP----web的攻击技术
  17. Vue-cli构建步骤
  18. 珂朵莉与妖精仓库的妖精们
  19. 社区里的志愿者与专业人员
  20. [附源码]SSM计算机毕业设计某城市参军和退役军人信息管理系统JAVA

热门文章

  1. Roku TV成为美国和加拿大最畅销的智能电视操作系统(OS)
  2. 用Vue+Node搭建网上购物商城——记录篇
  3. 蓝桥杯 十六进制转化为十进制
  4. 自制的 .net framework 强命名工具(支持.net4)
  5. 网络安全笔记-Web服务器
  6. 太厉害了:雄霸美国的黑市拳王,竟然是中国人!
  7. ueeshop 如何对接IMPAY PayPal stripe 轮询系统?
  8. vue 后台管理系统实现字体自适应element ui
  9. 新书介绍《安全信息与事件管理(SIEM)系统实现》
  10. FRP|利用FRP完成内网穿透进行windows远程连接的步骤汇总