【问题标题】:How do I automatically create performance reports for an iOS app?如何为 iOS 应用程序自动创建性能报告?
【发布时间】:2012-07-20 21:50:11
【问题描述】:

对于我的一些 iOS 应用程序项目,我希望我的 CI 服务器能够报告以下属性:

  • 启动时间
  • 帧率

两者都是随时间变化的图表,并且带有“低水位标记”,因此如果测量结果不在特定标准内,则构建会失败。我已经找到了一些我需要的东西。

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

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

我想有一个解决方案涉及越狱 iPad 并通过 SSH 控制应用程序,如果可能的话,我宁愿不走这条路。如果您已经做到了这一点并且可以解释它是如何工作的,我仍然很想听听。

【问题讨论】:

  • 我知道您对在模拟器中进行性能测试的想法不屑一顾,但如果您对相对性能数字或一段时间内的趋势感兴趣,那可能是一个不错的权宜之计。我不知道你如何在设备上自动启动应用程序:/
  • @BenScheirman 我不相信我从模拟器中得到的任何数字,即使是相对数字。 “嘿,这在我的 20GB 的 8 核 Mac 上并没有变得更糟”并没有告诉我任何关于第一代 iPad 的行为。
  • 是的,你是对的。让我真正渴望看到这个问题的结果:)
  • 我也许可以帮助越狱过程,我个人不知道任何人如何在未越狱的手机上开发,这对开发非常有帮助

标签: ios continuous-integration performance-testing


【解决方案1】:

我还使用 fruitstrap 在 CI 中的设备上安装应用程序。在启动应用方面,我知道有两种方法:

  1. 使用带有调试器的fruitstrap

  2. 在 UIAutomation 中使用 instruments 命令行工具

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

在这两种情况下,我都在 libusb 周围使用了一个小包装器来为我提供连接设备的设备 ID,因此我插入 CI 机器的设备越多,它运行测试的设备就越多,https://github.com/sgleadow/iphone_detect

【讨论】:

  • 刚刚看到我的名字被提及。 :) 这是我的示例代码的链接,用于从命令行运行 UI 自动化:github.com/jonathanpenn/AutomationExample 我也在研究更详细的说明,并制定触发它在设备上运行的方法。你可能会发现我在这里写的一些东西也很有帮助:cocoamanifest.net/features
【解决方案2】:

您可以使用 lldb 在设备上启动应用程序吗?

如果是这样,它也可能能够捕获日志输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    相关资源
    最近更新 更多