7

我目前正在自动化我们在 jenkins 上的 iOS 测试。到目前为止,我在运行单元测试、将 OCUnit 转换为 JUnit 以及以 Cobertura 格式生成代码覆盖率方面没有任何问题(很多谷歌搜索,但没有困难的问题)。

但是,在创建 UIAutomation 作业时,我被卡住了。instruments测试运行成功(从命令行调用)。生成 junit 报告很棘手,但可能。问题是在运行 UIAutomation 时,没有生成代码覆盖率文件。

是否有可能生成它们?如果不是,你能解释一下为什么吗?

到目前为止我尝试了什么:

  1. 将 UIAutomation 附加到 iOS 模拟器上已经运行的应用程序。
    • 这似乎是不可能的。正在运行的应用程序被工具杀死并重新启动新实例或打印出神秘的错误消息。
  2. 使用 osascript 和UIAHost. performTaskWithPathArgumentsTimeout.
    • 应用程序正常结束,但没有生成覆盖。

编辑 在使用不同的框架进行一些测试后,我意识到退出模拟器是不够的,您必须exit()从应用程序中显式调用。使用 UI 自动化这有点棘手,但您可以声明一个应用程序方案,例如my-app://exit并通过 MobileSafari 使用UIAHost.performTaskWithPathArgumentsTimeout. 将检查这是否足以生成文件。

4

2 回答 2

2

按照这些步骤,我能够从 UI 自动化生成代码覆盖率文件,并通过 cobertura Jenkins 插件显示信息。

首先将“Generate Test Coverage Files”和“Instrument Program Flow”构建设置设置为Yes。这将在您每次在模拟器中运行应用程序并退出应用程序时生成代码覆盖率文件。在 Info.plist 文件中添加 UIApplicationExitsOnSuspend 并将此选项设置为“YES”。运行 UI 自动化测试,最后您可以通过手动按下模拟器中的 HOME 按钮或使用 UIATarget.localTarget().deactivateAppForDuration() 方法退出应用程序。请注意,如果您的应用程序有任何依赖于 deactivateAppForDuration() 方法的 UI 自动化测试,则测试将在运行该命令时终止。

获得 gcda 文件后,您可以通过下载 gcovr ( https://software.sandia.gov/trac/fast/wiki/gcovr ) 并运行命令来生成 cobertura xml 文件

gcovr -r your_root_directory --object-directory path_to_gcda_files --xml > coverage.xml

有了它,您可以设置 Jenkins cobertura 插件以根据需要显示信息。

来源:http ://blog.octo.com/en/jenkins-quality-dashboard-ios-development/#step2-2

于 2013-07-09T15:25:42.743 回答
0

据我了解,当应用程序退出时会生成代码覆盖率文件,但你不能仅仅杀死模拟器。

您是否尝试过为您的应用程序创建一个单独的目标,将 info.plist 属性“UIApplicationExitsOnSuspend”设置为 true?

然而,还有一个更广泛的问题。生成的覆盖文件不是累积的,每次应用程序退出时都会被覆盖。因此,根据您的测试的结构(即您是否为每个不同的测试杀死并启动应用程序),您可能很难获得体面的代码覆盖率。

于 2012-12-31T08:49:22.320 回答