自动化与单元测试iOS 开发每天分享优质文章

iOS自动化单元测试之fastlane中xcodebuild与x

2018-09-13  本文已影响136人  TechAlleyBoy

上一篇文章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)可以看到工程目录下多了一个文件
4_3_1.png
2)终端的效果
4_3_2.png
3)html文件的效果
4_3_3.png

五、参考资料

fastlane官网地址 (有详细教程)

fastlane源码

xcov的源码

上一篇下一篇

猜你喜欢

热点阅读