如何为iOS应用自动创建性能报告?

18
对于我的一些iOS应用项目,我希望我的CI服务器能够报告以下属性:
  • 启动时间
  • 帧率

两者都可以作为随时间变化的图表展示,并且具有“低水位标记”,这样如果测量结果不符合某些标准,构建就会失败。我已经找到了一些需要的东西。

  • CI服务器将是Jenkins。
  • 我可以使用Transporter Chief将构建的应用程序传输到iPad上。
  • 要测量启动时间,可以找到在启动main()和离开application:didFinishLaunchingWithOptions:之间持续的时间。
  • 要测量帧率,可以将CADisplayLink放入应用程序中并采样其duration属性。
  • 如果这些测试输出JMeter XML,则Jenkins可以通过Performance插件显示输出。

我还没有解决的问题是,我应该如何将这些测试嵌入到我的应用程序中并在iPad上启动它?如上所述,我可以将应用程序部署到iPad上,但是我不知道如何启动它以收集测试结果。我的单元测试在模拟器上运行-显然我不想在那里运行性能测试:-)。

我想象中有一种解决方案涉及越狱iPad并通过SSH控制应用程序,如果可能的话,我希望不要走这条路。如果您已经这样做过并可以解释其工作原理,我仍然希望听到相关内容。


我知道你不太认同在模拟器中进行性能测试的想法,但如果你对相对性能数字或随时间变化的趋势感兴趣,那么这可能是一个不错的权宜之计。我不知道如何在设备上自动启动应用程序 :/ - Ben Scheirman
@BenScheirman我不相信从模拟器中得到的任何数字,即使是相对数字。 “嘿,在我的8核Mac上,带着20GB它没有变得更糟”并不能告诉我在第一代iPad上的行为如何。 - user23743
是的,你说得对。我真的很想看到这个问题的结果 :) - Ben Scheirman
我可能能够帮助你进行越狱过程,就个人而言,我不明白为什么有人会在非越狱手机上开发,它对于开发来说非常有帮助。 - creativeKoder
2个回答

9

我也在CI中使用fruitstrap来在设备上安装应用程序。关于启动应用程序,我知道两种方法:

  1. 使用已连接调试器的fruitstrap

  2. 使用带有UIAutomation的instruments命令行工具

    • 我知道instruments工具可以在CI中自动在设备上启动应用程序(我希望它也能安装它们,但是在Apple修复之前我们有fruitstrap)。因此,您可以编写一个非常简单的UIAutomation测试,为您的应用程序提供足够的时间进行性能分析。
    • Jonathan Penn有一个很好的UIAutomation演示项目和构建脚本,可以与使用fruistrap的“安装”步骤集成,以在设备上尝试它

在这两种情况下,我使用了一个小包装器来围绕libusb获取连接设备的设备ID,因此我将更多的设备插入我的CI机器,它就会在更多的设备上运行测试,https://github.com/sgleadow/iphone_detect


2
刚看到有人提到了我的名字。 :) 这是一个链接,可以让你从命令行运行UI自动化的示例代码:https://github.com/jonathanpenn/AutomationExample我正在努力编写更详细的说明,并探索在设备上触发运行的方法。你可能也会发现我在这里写的一些东西很有帮助:http://cocoamanifest.net/features/ - Jonathan Penn

1
你能否使用lldb在设备上启动应用程序?
如果可以的话,它也可能能够捕获日志输出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接