App性能测试之SoloPi
SoloPi简介
SoloPi是蚂蚁金服开发的一款无线化、非侵入、免Root的Android专项测试工具。直接操控安卓系统的手机或智能设备,即可完成自动化的功能、性能、兼容性、以及稳定性测试等工作,降低广大测试开发者的测试成本,提升测试效率。
SoloPi特点
1、免费开源
2、纯Java开发
3、可跨平台
4、轻量级,apk仅4.50 MB
5、使用adb命令 ,安装简单
6、本身对CPU、内存占用极小,基本可以忽略不计
7、操作简单
8、使用Apache-2.0授权协议
SoloPi的主要功能
SoloPi拥有录制回放、性能测试、一机多控三项主要功能。同时,SoloPi还支持性能加压,能够对CPU、内存与网络环境进行限制,复现应用在性能较差、网络环境不佳场景下的表现。除了常规性能指标,SoloPi还提供了启动耗时计算工具,测试同学只需要点击两次按钮,就可以得到最贴近用户体验的启动耗时数据。同时,启动耗时计算工具还可以通过广播调用,可以非常方便地与UI自动化测试打通。
下载SoloPi
1、安卓桌面
链接:https://pan.baidu.com/s/1MVi6gbiFPC7Ds9ySwbz2lQ
提取码:zq6v
2、SoloPi(版本0.11.1)
链接:https://pan.baidu.com/s/18mTpsMMb20FU5N4GGPslsQ
提取码:ss2a
SoloPi 最新版本下载地址: https://github.com/alipay/SoloPi/releases
安装SoloPi
1、安装并配置ADB环境变量
2、用数据线连接电脑和被测安卓手机或智能设备
3、输入cmd回车,打开命令行窗口,执行如下命令安装桌面:
C:\Users\User>adb install -r C:\Users\User\Desktop\小康安装工具\desktop.apk
Success
说明:如果是安卓手机,请跳过此步骤。
4、执行如下命令安装SoloPi
C:\Users\User>adb install -r C:\Users\User\Desktop\小康安装工具\SoloPi.apk
Success
说明:可以在安装命令后直接将本地apk文件拖拽进去,回车执行安装命令。出现Success说明安装成功。
5、安装好SoloPi以后,首次打开需要进行一些授权操作。
(1)申请ADB权限

在命令行窗口输入adb tcpip 5555 命令后,点击【重试】即可。
(2)申请浮窗权限
请点击【前往授权】,授予SoloPi显示悬浮窗的权限,然后返回该界面点击【我已授权】。SoloPi在运行过程中需要悬浮窗来展示实时数据或者通过操作悬浮窗来执行操作。

(3)添加到后台白名单
SoloPi需要长时间在后台运行以监控应用的性能或者执行操作,为防止Android系统将SoloPi进程回收,需要用户手动将SoloPi添加到后台白名单中。可以选择不再提示,之后SoloPi将不再对添加白名单进行提示。

(4)申请相机、录制屏幕权限
对于一机多控,SoloPi需要额外申请相机、录制屏幕权限,用于主从机的扫描连接和响应耗时计算。

使用SoloPi进行性能测试
1、介绍
记录待测应用的各项性能指标,支持实时观察模式与录制模式,支持通过图表展示以往录制的数据,另外支持性能加压与响应耗时计算功能。


性能数据查看与记录
勾选性能项,Solopi会展示对应的性能指标

在进入应用前,Solopi会显示全局指标,进入应用后,Solopi会显示应用最上层进程的相关性能指标。
CPU、内存指标为进程维度,响应耗时、帧率、网络为应用维度,电池为全局指标。
具体性能指标描述请参考后文性能指标一段。
点击悬浮窗中的应用标题,进入目标应用,切换为进程维度数据

点击开始按钮(绿色三角),进行性能数据录制,可进行相关操作

结束录制,点击终止按钮(红色圆形),Solopi会提示录制数据存放的位置,数据保存在
/sdcard/solopi/records/XXX目录下
录制数据为csv格式,包含三列,第一列为Unix时间戳,第二列为数据数值,第三列为额外字段
点击悬浮窗右上角关闭键(红色"X")可关闭悬浮窗,需要手动回到性能测试页面,可在录制数据查看一项中查看之前录制过的数据。

在录制项筛选中,可以选择之前录制的各项数据进行观看,内存与CPU会记录在顶层出现过的进程的数据。如果发生了进程切换,会记录前后10次数据。

当录制项过多时,可以点击右上角删除图标,对旧数据进行删除。

环境加压
Solopi提供了环境加压的功能,可以提供CPU与内存加压
由于android系统的调度,CPU与内存加压均存在一定限制,当应用处于后台状态时,CPU加压占比会遭到一定程度的限制,而内存加压过大可能导致Solopi被系统进行回收,敬请谅解。
内存加压

CPU加压

响应耗时计算工具
Solopi响应耗时计算工具,通过录屏分帧的方式自动识别起始点和结束点,精确计算耗时。
视频演示
特性
- 模拟用户视觉,计算结果更贴近用户体验
- 自动记录点击起始点,自动识别屏幕变化结束点
- 通过OpenCV进行图像识别
- 支持原生应用、H5、游戏
- 支持启动耗时、页面跳转耗时、列表滑动耗时、动画耗时
使用方法
进入Solopi性能测试页面,点击启动耗时计算。

建议默认参数无需修改,点击启动按钮,会弹出录制浮窗。

切换至待测应用,并进入操作路径的起始页面。
如果不需要关注细微的动画,请将二值对比差异设置为2%

点击开始录制(按钮会变为结束录制),然后在被测应用界面执行操作

当页面停止变化后,点击结束录制。几秒后会显示测试结果。

注意事项
- 结束页存在轮播图?
- 请在进入结果页后,在轮播图变化前点击结束录制
- 测试结果异常:过大,过小,或为负数?
- 本次结果失效,请重新测算。结果以多次测算后稳定的结果为准。
- 结束录制后,一直阻塞在计算中?
- 请关闭浮窗,退出Solopi,重新打开耗时计算工具进行测算。
Solopi提供的各项性能指标介绍
CPU

包含应用顶层Activity所在进程的CPU占用百分比与全局CPU占用百分比,对于单进程应用,该数据表示该应用的CPU占用情况;对于多进程进程应用,该数据表示顶层UI进程的CPU占用情况,当发生进程切换时,Solopi能够自动切换到新的进程数据。
内存

包含应用顶层Activity所在进程的PSS(Proportional Set Size,即实际使用内存)内存、Private Dirty(私有内存)内存与全局占用内存,对于单进程应用,该数据表示该应用的内存占用情况;对于多进程进程应用,同CPU一样,Solopi也支持自动切换顶层进程。
帧率

包含应用实际帧率,延迟帧数、1秒内单帧最长延迟时间与延迟帧数占所有帧数的百分比。属于应用维度数据。目前Solopi是根据设备gfxinfo信息计算1秒内超时帧时间,从而反推出实际帧率,所以在接近静止的情况下, 部分帧率可能显示有误。推荐在滑动或页面切换等动态场景下进行帧率测试。
网络

包含应用上下行速率与累计流量以及全局上下行速率与累计流量。属于应用维度数据。点击右侧清零按钮可以清空累计数据。
响应耗时

包含应用点击的响应耗时与刷新耗时数据。属于应用维度数据。从用户点击开始,到系统第一次发出界面更新时间为响应耗时,到系统停止界面刷新的时间为刷新耗时。
当目标页面存在动画时,可能影响响应耗时计算的准确性。
电池

包含设备瞬时电流与电流均值。属于全局维度数据。点击右侧清零按钮可以清空电流累计数据。
部分设备存在瞬时电流更新缓慢的情况,这种情况下均值意义较小。
参考博文:
https://github.com/alipay/SoloPi/wiki/Performance
https://mp.weixin.qq.com/s?__biz=MzUyMDk2MzUzMQ==&mid=2247484525&idx=1&sn=bbffc3fe4e04dd1d6bf95fad931138e2&chksm=f9e310c9ce9499df7a3907f9cf4e502d7048548d27de9737b2197a0ec19b774feee6a1cdb151&token=1461221376&lang=zh_CN#rd
https://mp.weixin.qq.com/s?__biz=MzUyMDk2MzUzMQ==&mid=2247484490&idx=1&sn=01fd42b863299d47cc79e8ed054b0c61&chksm=f9e310eece9499f89d582aa2a1f00dc2cad11c5ffc0acd7fb69e9bc79c1f0e6af217ef636a96&mpshare=1&scene=1&srcid=&pass_ticket=ATq1haXijWPlAUX+24MQZWKiWMmfI4kFXnO3KG9KHVvJQkOcZZZrYSIFDXlplIB1#rd
App性能测试之SoloPi的更多相关文章
- Android App性能测试之adb命令
本篇文章总结了Android App性能测试过程中常用的adb命令.通过这些adb命令,可以查看App的性能数据,为评判性能好坏作参考. CPU相关 显示占用CPU最大的5个应用 adb shell ...
- Android App性能测试之二:CPU、流量
CPU---监控值的获取方法.脚本实现和数据分析 1.获取CPU状态数据 adb shell dumpsys cpuinfo | findstr packagename 自动化测试脚本见cpustat ...
- App性能测试之启动时间(安卓)手动+脚本
这个测试可以使用adb工具,adb的安装方式 测试策略 安装后首次启动 常规冷启动 热启动(一般这个都很少测试) 针对1和2的测试方法 步骤1:在cmd中输入如下命令 adb logcat * > ...
- Android APP 性能测试之 GT 工具
一.介绍: GT(随身调)是 APP 的随身调测平台,它是直接运行在手机上的"集成调测环境"(IDTE, Integrated Debug Environment).利用 GT,仅 ...
- APP性能测试之卡顿比(FPS)
fps概念: FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数.FPS是测量用于保存.显示动态视频的信息数量.每秒钟帧数愈多,所显示的动作就会愈流畅. 卡顿人体感觉标准 ...
- [Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)
[Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)开学典礼](https://ke.qq.com/course/453802)**测试交流群:549376944**0 ...
- APP 性能分析工作台——你的最佳桌面端性能分析助手
目前 MARS-App 性能分析工作台版本为开发者提供Fastbot桌面版的服务. 旨在帮助开发者们更快.更便捷地开启智能测试之旅,成倍提升稳定性测试的效率. 作者:字节跳动终端技术--王凯 背景 F ...
- fir.im Weekly - 如何进行 Android App 性能优化
关于 Android App 的优化,@anly-jun 用 3 个月完成了这一系列文章,从 性能分析工具 到 ANR .Layout .消除卡顿 到 内存优化.内存分析工具大概十五六篇,并对此做一个 ...
- Android APP性能分析方法及工具
近期读到<Speed up your app>一文.这是一篇关于Android APP性能分析.优化的文章.在这篇文章中,作者介绍他的APP分析优化规则.使用的工具和方法.我觉得值得大家借 ...
- 25条提高iOS App性能的建议和技巧
这篇文章来自iOS Tutorial Team 成员 Marcelo Fabri, 他是 Movile 的一个iOS开发者. Check out his personal website or fol ...
随机推荐
- Spring配置类为什么要分Full和Lite模式
本文基于Spring 5.2.15-RELEASE 关于Spring配置类的Full模式和Lite模式,如果没有仔细阅读过源码或者官方文档的话,估计很多人都不知道这个概念.所以我们先来解释下这两个概念 ...
- 算法学习笔记(20): AC自动机
AC自动机 前置知识: 字典树:可以参考我的另一篇文章 算法学习笔记(15): Trie(字典树) KMP:可以参考 KMP - Ricky2007,但是不理解KMP算法并不会对这个算法的理解产生影响 ...
- 记录关于Chromium系浏览器密码安全问题的一些思考
首先就是在此之前就看到有相关报道讲到Chrome等浏览器密码都在本地明文存储,而且权限要求很低,任何程序都可以随意读取,这方面的安全问题暂且不表. 今天使用Edge时候发现浏览器储存的密码,在我已经设 ...
- 【Diary】CSP-S 2020 游记
一年 好快 从三百多天倒计时 一点一点掂着 又回来了 但是时间永远不会等待你. --??? CSP-J1/S1 CSP-J1/S1 Day0 请了一上午假. 这段时间都在摸鱼,作业没写( 多备赛一个上 ...
- 【SpringMVC】(三)
HTTPMessageConverter HttpMessageConverter报文信息转换器,将请求报文转换为java对象,或将java对象转换为响应报文. 1 @ResquestBody Res ...
- 面试最常问的数组转树,树转数组 c++ web框架paozhu实现
刚毕业同学,找工作常被问 二维数组转树,树转二维数组 需要支持无限层级实现,如果你了解这个语言那么实现起来还要一番思考 c++ web框架 paozhu使用 需要实现数据库表数据到前台菜单实现,就是这 ...
- ts中报错信息收集
1. 错误代码 参考:https://www.mmbyte.com/article/92849.html 1 state.localuserInfo = JSON.parse(localStorage ...
- 基于.Net开发的数据库导入导出的开源项目
在项目开发过程中,我们经常碰到从数据库导入导出的需求,虽然这样的功能不是很复杂,但是往往我们都会碰到一些问题. 比如导入的Excel格式问题.Excetl中图片导入问题,导出的需求为了方便客户查看,会 ...
- ai问答:使用 Vue3 组合式API 和 TS 父子组件共享数据
这是一个使用 Vue3 组合式 API 和 TypeScript 的简单父子组件共享数据示例 父组件 Parent.vue: <template> <div> <p> ...
- map和multimap
map相对于set区别,map具有键值和实值,所有元素根据键值自动排序,pair的第一个值被称为键值key,pair的第二个值被称为实值value.map也是以红黑树为底层实现机制,根据key进行排序 ...