上一篇文章iOS自动化单元测试之Xcode自带工具xcodebuild与xccov,已将讲了用xcode自带工具进行单元测试,但是存在一些问题,测试结果在终端,可视化太差,而且拿不到解析的json文件。接下来我们讲解一个自动化单元测试的工具fastlane。
一、环境检查:
1、检查ruby版本
查看本机已安装的ruby版本号,要求版本>2.0
$ ruby -v
显示
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]
2、使用rvm管理ruby版本
安装rvm $ curl -L https://get.rvm.io | bash -s stable
使用rvm
$ source /Users/xiaonan/.rvm/scripts/rvm
列出ruby可安装版本列表
$ rvm list known
安装ruby 2.5.1
$ rvm install 2.5.1
安装过程中会检查系统是否有安装Homebrew,按照默认路径安装Homebrew,输入回车键
使用ruby 2.5.1
$ rvm use 2.5.1 --default
3、检查Xcode的CLT是否安装
安装Command Line Tools
$ xcode-select --install
如果没有安装则自动安装,否则会显示一下错误
xcode-select: error: command line tools are already installed, use "Software Update" to install updates
二、fastlane的安装
1、安装fastlane
$ [sudo] gem install fastlane -NV
查看安装的fastlane版本
$ fastlane --version
显示
fastlane installation at path:
/Users/bijietao/.rvm/gems/ruby-2.5.1/gems/fastlane-2.103.1/bin/fastlane
-----------------------------
[✔]
fastlane 2.103.1
2、在iOS项目中初始化fastlane
首先在终端进去项目根目录
然后初始化fastlane
$ fastlane init
初始化时出现4个选项,选4手动设置
1\. Automate screenshots
2\. ✈️ Automate beta distribution to TestFlight
3\. Automate App Store distribution
4\. Manual setup - manually setup your project to automate your tasks
之后初始化命令会自动执行bundle update
下载项目需要的依赖库
初始化完成后,项目的根目录会多2个文件:Gemfile、Gemfile.lock, Gemfile里面定义了该项目的软件包依赖的相关事项,和Podfile、Podfile.lock类似
三、xcov的安装
1、安装xcov
sudo gem install xcov
显示
Password:
Fetching: xcov-1.4.3.gem (100%)
Successfully installed xcov-1.4.3
Parsing documentation for xcov-1.4.3
Installing ri documentation for xcov-1.4.3
Done installing documentation for xcov after 0 seconds
1 gem installed
2、项目中添加xcov
xcode9.3不需要添加
xcode9.2需要在Gemfile中添加 gem "xcov"
四、执行fastlane自动化测试
1、项目中需先创建xcworkspace,file -> new ->workspace,创建好后将.xcodeproj 拖到xcworkspace下,否则后面执行时命令时会报下面的错
[18:22:18]: ▸ xcodebuild: error: 'BJTUnitTestsDemo.xcworkspace' does not exist.
+------------------------------+--------------+
| Lane Context |
+------------------------------+--------------+
| DEFAULT_PLATFORM | ios |
| PLATFORM_NAME | ios |
| LANE_NAME | ios unittest |
| XCODEBUILD_DERIVED_DATA_PATH | |
+------------------------------+--------------+
[18:22:18]: Exit status of command 'set -o pipefail && xcodebuild test -scheme "BJTUnitTestsDemo" -workspace "BJTUnitTestsDemo.xcworkspace" -destination "platform=iOS Simulator,name=iPhone 8 Plus,OS=11.3" | tee '/Users/bijietao/Library/Logs/fastlane/xcbuild/2018-09-13/61665/xcodebuild.log' | xcpretty --color --test' was 66 instead of 0.
xcodebuild: error: 'BJTUnitTestsDemo.xcworkspace' does not exist.
2、在Fastfile中添加下面的脚本代码
1)xcodebuild说明可参考上一篇文章:iOS自动化单元测试之Xcode自带工具xcodebuild与xccov
2)xcov说明,挑选几个重要的讲解一下xcov的源码
Key Description Default workspace 项目的workspace project 项目的project scheme 项目的scheme output_directory 覆盖率输出路径 html_report 是否输出html文件 true markdown_report 是否输出markdown文件 false json_report 是否输出json文件 false ignore_file _path 忽略文件的路径 * 3) Fastfile中的脚本代码
default_platform(:ios)
platform :ios do
desc "自动化测试"
lane :unittest do
UI.message("start xcodebuild")
xcodebuild(
test: true,
scheme: "BJTUnitTestsDemo",
workspace: "BJTUnitTestsDemo.xcworkspace",
destination: "platform=iOS Simulator,name=iPhone 8 Plus,OS=11.3"
)
UI.message("success xcodebuild")
UI.message("start xcov")
xcov(
workspace: "BJTUnitTestsDemo.xcworkspace",
scheme: "BJTUnitTestsDemo",
html_report: "true",
json_report: "true",
output_directory:"BJTUnitTests"
)
UI.message("success xcov")
desc "读取覆盖率"
file = File.read(File.expand_path("/Users/bijietao/Desktop/BJTUnitTestsDemo/BJTUnitTests/report.json"))
if file
data = JSON.parse(file)
UI.message(data)
UI.message(data["coverage"])
else
UI.error("Unable to open file!")
return
end
end
end
3、终端进去项目根目录 执行 fastlane unittest
1)可以看到工程目录下多了一个文件
2)终端的效果
3)html文件的效果