18

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

  • 启动时间
  • 帧率

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

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

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

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

4

2 回答 2

9

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

  1. 使用带有调试器的fruitstrap

  2. instruments命令行工具与 UIAutomation 一起使用

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

在这两种情况下,我在 libusb 周围使用了一个小包装器来给我附加设备的设备 ID,所以我插入 CI 机器的设备越多,它运行测试的设备就越多,https://github.com/sgleadow/ iphone_detect

于 2012-07-26T13:36:07.073 回答
1

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

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

于 2012-07-26T13:08:13.567 回答