iOS 测试 Agora 开源 | MoonLight —— 助你实现更好的 iOS/Mac 自动化性能测试

匿名 · January 28, 2021 · Last by HuangSir replied at November 15, 2021 · 11208 hits
本帖已被设为精华帖!

什么是 MoonLight?

MoonLight 是 iOS/Mac 上的轻量化的性能测试组件,它可以单独集成在任何 App 中实现自动化性能数据的采集,你可以非常轻松的获取到 App CPU、System CPU、App Memory、System GPU 以及 GPU Info 的数据。MoonLight 由声网 Agora 开发,并已开源至 Github。

开源地址:https://github.com/AgoraIO-Community/MoonLight

设置图片宽度

MoonLight 的愿景

MoonLight,它的中文意思名为月光。月光弥漫在地球之上是宁静且自然的,月光会给予地球上的人们以指引。而月光的寓意恰好和我们开发性能测试组件的出发点相契合。

我们希望 iOS/Mac 的性能测试也能像月光一样,轻松且自然。MoonLight 有着更低的性能消耗,更容易的使用方式,更精准的性能数据。它将帮助开发团队更快速更精确的定位性能问题,进而推动性能优化和提升。帮助测试团队更快更准的获取性能数据,提升测试效率。

对比其他的性能测试工具

Instruments

MoonLight 采集到的性能数据是基本和 Instruments 保持一致的。具体的优劣对比如下:

  1. Instruments 无法实现性能自动化,无法将获取到的性能数据提取出来进行分析,最后提供出去的性能数据准确度不够,存在人为误差。MoonLight 可以解决这个问题。

  2. Instruments 无法实现远程性能测试,自然也无法实现高并发的性能测试,通常来说需要一台设备连接 USB 线后测试,然后一台测试完再测试下一台。MoonLight 可以一次性测试非常多台,也没有必须连接数据线的要求。

  3. 高版本的 Instruments 无法测试一些低端系统机器的性能,MoonLight 可以完美支持。

  4. 对于 macOS 上的 App, Instruments 是不支持 GPU 的输出,MoonLight 支持。进过测试,GPU 的输出和 macOS 自带的活动管理器 GPU 输出保持一致。

  5. Instruments 优点是数据可视化,并且可以提供内存泄漏测试。MoonLight 暂时不提供数据可视化,但是由于 MoonLight 是可编程的,当开发者拿到相关的性能数据后, 可以自行实现数据上报或者可视化的处理。

GT

GT 是 Tencent 开源的性能测试工具。

  1. GT 不支持 macOS,MoonLight 支持。

  2. GT 采集到的 App Memory 数据和 Instruments 是不一致的。GT 无法输出 GPU、System CPU, 但是 MoonLight 可以。

  3. GT 集成到 App 中,需要添加非常多的依赖库,取消掉 Bitcode 支持,自身也比较庞大,并且会增加 App 的包大小。MoonLight 更轻量化,对于 iOS 仅仅只需要增加一个系统库,对于 Mac 不需要增加任何的系统库。

Perfdog

  1. Perfdog 无法支持 macOS 上的 App 的性能测试。

  2. Perfdog 并非是一个自动化的性能测试工具,优点是数据可视化。

  3. Perfdog 并非是一个开源的测试工具,之前在 iOS 14 上出现过 App CPU 不准的 Bug, 而我们也并不清楚其实现的原理和代码,未来依旧有可能在某些系统上出现性能项测试不准的情况。

Requirements

  • iOS 8.0+
  • macOS 10.11+

Installation

Cocoapods

  • iOS:

Warning! For iOS, do not use it on AppStore release. Recommend use it on debug mode.

pod 'MoonLight_iOS', :configurations => ['Debug']
  • macOS:
pod 'MoonLight_macOS'

Usage

// Step1: create MoonLight instance and set sampling interval.
    _moonLight = [[MoonLight alloc]initWithDelegate:self timeInterval:1];

// Step2: start timer.
    [_moonLight startTimer];


// Step3: through the callback, you can get all the performance data per interval.
- (void)captureOutputAppCPU:(float)appCPU systemCPU:(float)systemCPU appMemory:(float)appMemory gpuUsage:(float)gpuUsage gpuInfo:(NSString *)gpuInfo {
    NSLog(@"appMemory:%f", appMemory);
    NSLog(@"appCPU:%f", appCPU);
    NSLog(@"gpuUsage:%f", gpuUsage);
    NSLog(@"systemCPU:%f", systemCPU);
    NSLog(@"gpuInfo:%@", gpuInfo);
}

// Step4:if you want to stop capturing the performance data, use "stopTimer".
    [_moonLight stopTimer];

MoonLight 自测的结果

iOS/Mac MoonLight 自身的性能消耗非常低,几乎可以忽略不计;测试的过程中,性能输出稳定;App CPU、System CPU、App Memory、GPU 可以和 Instruments 或者活动监视器结果保持一致。

一、MoonLight VS Instruments

  • iOS

  • macOS

备注:MoonLight 对 CPU 有做归一化处理. CPU(MoonLight) = CPU(Instruments) / 核心数

二、MoonLight 自身的性能消耗

测试 case:

Step1: 打开 App,打开 MoonLight 的检测,测试性能 data1。

Step2: 打开 App, 不打开 MoonLight 的检测,测试性能 data2。性能消耗 = data1 - data2

  • iOS

App Memory 消耗 = 7.38-7.34 = 0.04Mb ;App CPU 消耗 =(2.1%-0.1%)/(6 核)= 0.33% ;GPU = 0% ,并且整个性能测试阶段,数据波动稳定,不会出现 MoonLight 的开启造成性能有不稳定变化。

测试设备:iPhone XS iOS 14.2 六核

  • macOS

App Memory 消耗 = 14.42-14.36 = 0.06Mb ;App CPU 消耗 =(0.08%-0.0%)/(4 核)= 0.02% ;GPU = 0% ,并且整个性能测试阶段,数据波动稳定,不会出现 MoonLight 的开启造成性能有不稳定变化。

测试设备:Macbook Pro 2017 13.3 Intel i5 , System: BigSur 11.0.1

————————————————————————————————————

写在最后

MoonLight 是我们从日常的开发中诞生的开源工具,我们希望它能帮助开发团队更快速更精确的定位性能问题,进而推动性能优化和提升;帮助测试团队更快更准的获取性能数据,提升测试效率。欢迎大家使用。
MoonLight 开源地址:https://github.com/AgoraIO-Community/MoonLight

扫码加入交流群,与开源项目作者交流工具使用与开发的日常
设置图片宽度

声网 Agora Echoo J

共收到 16 条回复 时间 点赞

点赞!

可以在顶部开源版块里也投递一下,让更多人看到?

匿名 #2 · January 28, 2021
陈恒捷 回复

怎么做?

恒温 将本帖设为了精华贴 28 Jan 16:01

感谢关注 PerfDdog,顺便说明下:
1、PerfDog 是移动全平台 iOS/Android 性能测试、分析工具平台。手机无需 ROOT/越狱,手机硬件、游戏及应用 APP 也无需做任何修改,极简化即插即用。
2、PerfDog 是独立工具,和 SDK 的代码集成方式是不一样的。
3、当时刚出的 iOS14 beta 系统,PerfDog 已经及时升级版本支持啦。
另外,目前刚推出 PerfDogService 服务组件,非常方便进行自动化以及云测。传送门:点击这里

6Floor has deleted
7Floor has deleted

今天发现了 tidevice 的神器,你这又给我一个神器,我是你们老板吗 😋

匿名 #9 · January 28, 2021
cmlanche 回复

😬

匿名 #10 · January 28, 2021

这个需要有一些基础 iOS 开发能力,大家如果有碰到一些问题,可以找大家公司的 iOS 开发帮忙,包括 MoonLight 的集成和具体符合业务的自动化性能测试的实现

匿名 #11 · January 28, 2021
腾讯WeTest 回复

Perfdog 现在也很好用,很赞。

哈,我就喜欢轻量的方案。

已收藏 等以后有空看

先收藏,有时间试试。

这个和滴滴的那个性能监控的 sdk 是不是差不多呀
https://github.com/didi/DoraemonKit

Wei Chuang 回复

看起来有一些一样。但是 MoonLight 可以采集到 GPU 和 SystemCPU,这个他们目前还未做到(也有可能他们用了 MoonLight 后就支持了),不过他们也可以做到一些其他的功能,但是相对来说会包体积会大一些。另外滴滴不支持 macOS,但是他们支持一些其他的平台。总的来说,didi 的也很好,大家可以根据业务需求选择。

cmlanche 回复

tidevice 还不支持性能是么

这个好,直接集成到 wda 里

这个支持 ios hybrid 应用吗? 性能的检测数据包括 webkit 进程吗? 还是只支持 nativ 的应用性能数据收集?

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up