xccov:人类的Xcode代码覆盖率报告

最初在 这里 发布在XCBlog上

苹果已经发布了带有Xcode 9.3的新命令行工具xccov,用于检查Xcode代码覆盖率报告的内容。 不幸的是,还没有任何Web文档,因此我们必须在终端中键入man xccov以获得有关此命令行工具的更多信息。 此实用程序需要Xcode 9.3和Xcode 9.3附带的命令行工具。 使用xccov,我们可以使用人类可读格式以及机器可表示格式(例如JSON)生成Xcode代码覆盖率报告,而无需使用第三方工具。 在本文中,我们将探讨如何使用带有演示iOS应用的新命令行实用工具生成和查看Xcode代码覆盖率报告。

注意名字

命令行工具xccov是Xcode 9.3附带的本地Apple开发人员工具。 但是,很少有名称相似的开源工具可能会使您感到困惑。

  • 不是xcov

有一个名为xcov的Ruby库可生成美观的代码覆盖率报告,可与Fastlane和Danger等工具一起使用。

  • 不是hiroakit / xccov

还有另一个纯粹的Swift库可以生成Xcode代码覆盖率报告,也称为xccov,但由Hiroaki ENDOH编写

这些库的名称与Apple发行的新实用程序相似或几乎相似,巧合的是,它们正在执行相同的工作,即为Xcode生成不错的代码覆盖率报告。 随着苹果公司xccov的发布,可能不需要这些库。

生成代码覆盖率报告

为了探索xccov,让我们使用带有单元和UI测试目标的“ Tabbed App”模板创建一个新的iOS应用,并将其命名为“ XCCov-Demo”。 这将创建Xcode项目方案“ XCCov-Demo”。 我们可以通过编辑方案并在“测试”操作中选中“代码覆盖率”框来明确启用该方案的代码覆盖率。 如果我们不想包括UITest的覆盖范围,我们也可以过滤目标,如下所示

现在,我们为方案启用了代码覆盖率。 一旦我们使用Xcode中的CMD + U按钮构建并测试了该方案,这将生成代码覆盖率报告到默认的派生数据目录中,该目录位于〜/ Library / Developer / Xcode / DerivedData中,您将看到在Logs / Test中生成的代码覆盖率报告目录。 但是,对于此演示,我们将在项目内部生成派生数据,以便我们可以轻松查看报告。

让我们使用xcodebuild从项目根目录使用以下命令来构建和测试我们的应用程序

  $ xcodebuild -project XCCov-Demo.xcodeproj / -scheme XCCov-Demo -derivedDataPath Build / -destination'platform = iOS Simulator,OS = 11.3,name = iPhone 7'-enableCodeCoverage是clean build test CODE_SIGN_IDENTITY =“” CODE_SIGNING_REQUIRED = NO 

这会将所有DerivedData转储到Build目录中。

这将在Build / Logs / Test路径下生成代码覆盖率数据。 我们将看到扩展名为.xccovreport和.xccovarchive的代码。

什么是内部承保范围报告

在Logs / Test目录中,有一个扩展名为.xccovreport的覆盖率报告,以及一个扩展名为.xccovarchive的coverage存档。 按照此实用程序的手册页,“覆盖率报告包含每个目标,源文件以及具有覆盖率信息的功能/方法的行覆盖率百分比。 Coverage存档包含报告中每个文件的原始执行计数”。 但是,它们不是人类可读的文件,因此我们需要xccov才能查看这些文件并以美观的格式显示报告。

查看代码覆盖率报告

现在,我们已经生成了代码覆盖率日志,我们可以使用xccov来以人类可读的格式查看代码覆盖率。 为了访问xccov,我们将其放在$ PATH内,或者可以使用xcrun命令行实用程序轻松地访问它,而无需麻烦。 目前,我们可以使用xccov实现以下目的

  • 从终端查看代码覆盖率报告
  • 从代码覆盖率报告中吐出JSON。
  • 列出所有已生成代码覆盖率的文件
  • 查看一个特定文件的代码覆盖率报告。

让我们探索使用xccov实现这些命令

查看报告-默认

我们可以查看默认格式的代码覆盖率报告,该格式虽然不是特别出色,但是对于Apple来说,它是人类可读的。 在我们的演示项目中,我们可以使用以下命令生成报告

  $ xcrun xccov视图Build / Logs / Test / *。xccovreport 

查看报告-JSON

xccov真正的强大之处在于它可以生成JSON格式的代码覆盖率报告。 根据手册页上Apple的文档,其机器可表示格式。 我们可以将这些JSON结果挂钩到我们喜欢的任何位置,或者在此之上构建另一个工具。 我们可以使用以下命令生成JSON报告

  $ xcrun xccov视图Build / Logs / Test / *。xccovreport --json 

我们刚刚在命令末尾添加了标志json以获取JSON报告。

列出所有文件

我们还可以列出所有具有代码覆盖率数据的文件。

  $ xcrun xccov视图-文件列表Build / Logs / Test / *。xccovarchive / 

这将显示具有绝对路径的所有项目文件。

特定文件的代码覆盖率

我们还可以对特定文件的覆盖率进行编码,该文件以某种符号逐行显示报告。 不知道那有多有用,但是在那里。

  $ xcrun xccov视图--file〜/ Desktop / XCCov-Demo / XCCov-Demo / AppDelegate.swift Build / Logs / Test / *。xccovarchive / 

我们必须提供文件的完整路径,您将获得带符号的报告。

观看实战

观看包含xccov功能的GIF

源代码

Github XCCov-Demo上有带有完整说明的README文件的源代码。 随时检查项目并自己尝试。

结论

在Xcode 9.3中,Apple发行了xccov,以减轻使用第三方工具以美观的格式显示Xcode代码覆盖率报告的麻烦。 目前,默认格式看起来并不好用,但真正的强大之处在于它会生成JSON。 使用JSON格式,我们可以将这些报告挂接到Continuous Integration Server上。

像XCBlog的 XCTEQ 发布的帖子一样 您可能还喜欢我们的一些服务,例如访客博客或Mobile DevOps(CI / CD)或测试自动化。 Github 搜索我们的 服务 ,开源项目, 或者在 Twitter Facebook Youtube LinkedIn 上关注我们 下载我们的 XCBlog iOS应用程序以离线阅读博客。

X CTEQ 一家专门从事基于Mobile DevOps,CI / CD,Mobile,AI / ML的测试自动化Checkout XCTEQ产品和服务的公司, 网址 http://www.xcteq.co.uk 或写信给我们info@xcteq.co。英国..