对于我的一些 iOS 应用程序项目,我希望我的 CI 服务器能够报告以下属性:
- 启动时间
- 帧速率
两者都是随时间变化的图表,并带有“低水位线”,因此如果测量结果不在特定标准内,构建就会失败。我已经找到了一些我需要的东西。
- CI 服务器将是 Jenkins。
- 我可以使用 Transporter Chief将构建的应用程序安装到 iPad 上。
- 为了测量启动时间,我可以找到启动
main()
和离开application:didFinishLaunchingWithOptions:
之间的持续时间。 - 为了测量帧速率,我可以将
CADisplayLink
放入应用程序中并对其duration
属性进行采样。 - 如果这些测试输出 JMeter XML,那么 Jenkins 可以通过 Performance 显示输出插件。
我还没有弄清楚的是,我应该如何将这些测试嵌入到我的应用程序中并在 iPad 上启动它?如上所述,我可以将应用程序部署到 iPad,但我不知道如何启动它来收集测试结果。我的单元测试在模拟器上运行——我显然不想在那里运行性能测试 :-)。
我想有一个解决方案涉及越狱 iPad 并通过 SSH 控制应用程序,如果可能的话,我宁愿不走那条路。如果您已经做到了并且可以解释它是如何工作的,我仍然很想听听。
最佳答案
我还在 CI 中使用 fruitstrap 在设备上安装应用程序。在启动应用程序方面,我知道两种方式:
使用附带调试器的 fruitstrap
- 我知道有团队这样做是为了在 CI 中的设备上运行 KIF 集成测试。我玩过 fruitstrap 让它在设备上启动应用程序,但我自己还没有采取额外的步骤来自动化整个事情
- 我在 fruitstrap 上的帖子的无耻插件:http://www.stewgleadow.com/blog/2011/11/05/installing-ios-apps-on-the-device-from-the-command-line/
将
instruments
命令行工具与 UIAutomation 结合使用- 我知道 instruments 工具可以在 CI 中自动启动设备上的应用程序(我希望它也安装了它们,但在 Apple 修复它之前我们有水果)。因此,您可以编写一个非常简单的 UIAutomation 小测试,让您的应用有足够的时间进行性能分析。
- Jonathan Penn 有一个不错的 UIAutomation 小演示项目和构建脚本,可以使用 fruistrap 将其与“安装”步骤集成以在设备上试用
在这两种情况下,我都在 libusb 周围使用了一个小包装器来为我提供连接设备的设备 ID,所以我插入 CI 机器的设备越多,它运行测试的设备就越多,https://github.com/sgleadow/iphone_detect
关于ios - 如何自动为 iOS 应用创建性能报告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11599334/