带代码覆盖率的UIAutomation
我目前正在jenkins上自动化我们的iOStesting。 到目前为止,我没有运行unit testing的问题,将OCUnit转换成JUnit,并生成Cobertura格式的代码覆盖(大量的search,但没有困难)。
但是,当创buildUIAutomation作业,我卡住了。 testing正在成功运行(从命令行调用instruments
)。 生成junit报告是棘手的,但可能的。 问题是,运行UIAutomation时,不会生成代码覆盖率文件。
有没有可能产生它们? 如果没有,请解释为什么?
我到目前为止所尝试的是:
- 将UIAutomation附加到iOS模拟器上已经运行的应用程序。
- 这似乎不可能。 正在运行的应用程序被杀死的仪器和新的实例重新启动或一个神秘的错误消息打印。
- 使用osascript和
UIAHost. performTaskWithPathArgumentsTimeout
的组合,在js脚本的结尾退出模拟器UIAHost. performTaskWithPathArgumentsTimeout
UIAHost. performTaskWithPathArgumentsTimeout
。- 应用程序优雅地结束,但没有产生覆盖。
编辑使用不同的框架进行了一些testing之后,我意识到退出模拟器是不够的,你必须明确地从应用程序调用exit()
。 使用UI自动化,这是有点棘手,但你可以声明一个应用程序的scheme,例如my-app://exit
并通过UIAHost.performTaskWithPathArgumentsTimeout
使用UIAHost.performTaskWithPathArgumentsTimeout
调用它。 将检查这是否足以生成文件。
遵循这些步骤,我能够从UI Automation生成代码覆盖率文件,并通过cobertura Jenkins插件显示信息。
首先将“生成testing覆盖率文件”和“仪器程序stream量”构build设置设置为是。 这将在您每次在模拟器中运行应用程序并退出应用程序时生成代码覆盖率文件。 在Info.plist文件中添加UIApplicationExitsOnSuspend,并将此选项设置为“YES”。 运行UI自动化testing,最后可以通过手动按下模拟器中的HOMEbutton或使用UIATarget.localTarget()。deactivateAppForDuration()方法退出应用程序。 请注意,如果您的应用程序具有任何依赖于deactivateAppForDuration()方法的UI自动化testing,则testing将在运行该命令时终止。
一旦你有了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
从我理解的代码覆盖率文件得到应用程序退出时生成,但你不能只杀死模拟器。
你有没有尝试为你的应用程序创build一个单独的目标,你有info.plist属性“UIApplicationExitsOnSuspend”设置为true?
但是,还有一个更广泛的问题。 生成的覆盖率文件不会累积,每次应用程序退出时都会被覆盖。 所以,根据你的testing结构(即你是否在为每个不同的testing而开发应用程序),你可能很难获得体面的代码覆盖率。
- 裁剪区域与iOS中的选定区域不同?
- iOS 11. KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED是什么意思?
- 中心写入特性到外设(iOS Core蓝牙)
- 在Xcode 6中使用XCTest进行sortingunit testing
- 反别名,UIImage和性能
- 应用程序传输安全例外IOS9
- iOS Swift:谷歌login错误
- 如何在iOS中按名称,位置搜索本地商家?
- 使用UIImagePickerController获取图像 – 如何知道是否保存PNG或JPEG?