简介

上一篇文章 Jenkins 自动化打包 iOS 项目 已经介绍了 Jenkins,以及在 mac 上安装 Jenkins。本文来介绍一下使用 Jenkins 来完成自动化测试,并输出测试覆盖率。
有关 iOS 单元测试的内容,可以查看之前的文章 iOS 单元测试 - XCTest


iOS 测试覆盖率

首先在 Xcode 中开启 Coverage ,可以选择你要收集覆盖率的 target,那些 pods 里面的第三方的库就不要勾选了,只需测试查看项目中的覆盖率。

打开之后,点击测试,测试执行完成后就可以看到代码的覆盖率了。


Jenkins 自动化测试

有关 Jenkins 安装在上篇文章中已经介绍了,这里我们直接看一下在 Jenkins 上自动化测试的流程。

安装工具

首先需要在 mac 上安装一下 OCUnit2JUnit 和 slather。

1、安装 OCUnit2JUnit
OCUnit2JUnit 是一个脚本,可将 OCUnit 的输出转换为 JUnit 使用的格式。 主要目的是能够在 Jenkins 上解析 OCUnit 测试用例的输出。

1
sudo gem install ocunit2junit -n /usr/local/bin

2、安装 slather
slather 为 Xcode 项目生成测试覆盖率报告,并将其挂接到 Jenkins 上。

1
2
sudo gem install nokogiri
sudo gem install slather -n /usr/local/bin

Jenkins 配置

首先在 Jenkins 插件管理中,搜索安装插件 JUnit 和 HTML Publisher。

插件安装完成之后,就可以进行后面的操作了。
1、在 Jenkins 中新建任务。
2、在配置构建中,添加 执行 shell,输入命令:

1
2
3
4
5
6
7
8
9
cd ${WORKSPACE}/my-test

# 进行测试并通过 ocunit2junit 转化为 JUnit 格式的结果
xcodebuild test -project MyTestProject.xcodeproj -scheme MyTestProject -destination 'platform=iOS Simulator,name=iPhone 11' -configuration Debug -enableCodeCoverage YES 2>&1 | /usr/local/bin/ocunit2junit

# 创建 xml 报告,默认 xml 报告保存在当前目录 test-reports 文件夹
/usr/local/bin/slather coverage --scheme MyTestProject MyTestProject.xcodeproj
# 创建 html 报告,默认 html 报告保存路径为前目录 html 文件夹
/usr/local/bin/slather coverage --html --scheme MyTestProject MyTestProject.xcodeproj

注意上面的 ${WORKSPACE} 就是项目文件夹所在的位置,如果项目代码就在这个文件夹里,后面就不用跟路径了,不然就重复了。
然后注意 scheme 名称,和 workspace 名称,如果项目没有使用 pod,只有 .xcodeproj 文件就不用加 –workspace 选项了,–ignore 忽略第三方的代码。

还有 /usr/local/bin/slather,/usr/local/bin/ocunit2junit 这个前面要加上文件路径,不然报错说找不到 slather 和 ocunit2junit。

3、添加构建后的操作
添加 publish JUnit test result report

测试报告 xml 文件路径你就写,test-reports/*.xml 就行,不用管项目中有没有这个文件夹,运行时会自动生成,test-reports 这个文件夹,然后生成的 xml 文件放在这里,你写别的文件夹运行会报错,说找不到文件,最好每次运行把这个 test-reports 文件夹删除,遇到重复运行的会报错。

添加 publlish html reports

输入导出的 html 文件名,这个直接写个名字就行了,导出的 html 就是在项目代码文件夹下面,会自动生成你输入的名字文件,然后生成成功后会导入到 .jenkins/jobs/项目名/htmlreports/CodeCoverage 文件夹中,你看到的报告网页就是这个,不知为何,在Jenkins 只能打开 index.html 的页面链接点击定位错误,直接在文件夹里点击 index.html 网页显示正常。

4、立即构建
配置完成之后,就可以构建了,任务执行完成之后会生成代码覆盖率的报告,可以查看各个代码文件的覆盖率。

构建执行完在项目文件夹下生成有关 html 文件,你可以打开网页查看。


References

https://xiaoye220.github.io/Jenkins-UnitTest/