具有代码覆盖率的UIAutomation

时间:2012-11-19 12:20:29

标签: ios ios-ui-automation

我目前正在jenkins上进行iOS测试自动化。到目前为止,我没有遇到运行单元测试,将OCUnit转换为JUnit并以Cobertura格式生成代码覆盖(大量谷歌搜索但没有难题)的问题。

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

是否有可能产生它们?如果没有,你能解释一下原因吗?

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

  1. 将UIAutomation附加到iOS模拟器上已经运行的应用程序。
    • 这似乎不可能。正在运行的应用程序被仪器杀死,并且重新启动新实例或打印出含义错误的消息。
  2. 使用osascript和UIAHost. performTaskWithPathArgumentsTimeout的组合在js脚本末尾退出模拟器。
    • 应用程序正常结束但未生成覆盖。
  3. 修改的 在使用不同的框架进行一些测试后,我意识到退出模拟器是不够的,你必须从应用程序中明确地调用exit()。使用UI自动化这有点棘手,但您可以声明一个应用程序,例如, my-app://exit并使用UIAHost.performTaskWithPathArgumentsTimeout通过MobileSafari进行调用。将检查这是否足以生成文件。

2 个答案:

答案 0 :(得分:2)

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

首先将“生成测试覆盖率文件”和“仪器程序流程”构建设置设置为“是”。每次在模拟器中运行应用程序并退出应用程序时,这将生成代码覆盖文件。在Info.plist文件中添加UIApplicationExitsOnSuspend,并将此选项设置为“是”'。运行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

答案 1 :(得分:0)

根据我的理解,代码覆盖文件会在应用程序退出时生成,但您不能只是杀死模拟器。

您是否尝试为应用创建单独的目标,其中info.plist属性“UIApplicationExitsOnSuspend”设置为true?

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