美文网首页自动化与单元测试iOS 开发每天分享优质文章
iOS自动化单元测试之fastlane中xcodebuild与x

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

作者: TechAlleyBoy | 来源:发表于2018-09-13 19:42 被阅读136次

    上一篇文章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的源码

    相关文章

      网友评论

        本文标题:iOS自动化单元测试之fastlane中xcodebuild与x

        本文链接:https://www.haomeiwen.com/subject/kceggftx.html