Xcode命令行執行單元測試


1 xcodebuild簡介

在介紹xcodebuild之前,需要先弄清楚一些在XCode環境下的一些概念:
- Workspace:簡單來說,Workspace就是一個容器,在該容器中可以存放多個你創建的Xcode Project, 以及其他的項目中需要使用到的文件。
使用Workspace的好處有:
(1)擴展項目的可視域,即可以在多個項目之間跳轉,重構,一個項目可以使用另一個項目的輸出。Workspace會負責各個Project之間提供各種相互依賴的關系;
(2)多個項目之間共享Build目錄。
- Project:指一個項目,該項目會負責管理生成一個或者多個軟件產品的全部文件和配置,一個Project可以包含多個Target。
- Target:一個Target是指在一個Project中構建的一個產品,它包含了構建該產品的所有文件,以及如何構建該產品的配置。
- Scheme:一個定義好構建過程的Target成為一個Scheme。可在Scheme中定義的Target的構建過程有:Build/Run/Test/Profile/Analyze/Archive
- BuildSetting:配置產品的Build設置,比方說,使用哪個Architectures?使用哪個版本的SDK?在Xcode Project中,有Project級別的Build Setting,也有Target級別的Build Setting。Build一個產品時一定是針對某個Target的,因此,XCode中總是優先選擇Target的Build Setting,如果Target沒有配置,則會使用Project的Build Setting。
弄清楚上面的這些概念之后,xcodebuild就很好理解了,官網上對其作用的描述如下:
xcodebuild builds one or more targets contained in an Xcode project, or builds a scheme contained in an Xcode workspace or Xcode project.
xcodebuild就是用了構建產品的命令行工具,其用法可以歸結為3個部分:
• 可構建的對象
• 構建行為
• 一些其他的輔助命令
可以構建的對象有,默認情況下會運行project下的第一個target:
• workspace:必須和“-scheme”一起使用,構建該workspace下的一個scheme。
• project:當根目錄下有多個Project的時候,必須使用“-project”指定project,然后會運行
• target:構建某個Target
• scheme:和“-workspace”一起使用,指定構建的scheme。
構建行為包括:
• clean:清除build目錄下的
• build: 構建
• test: 測試某個scheme,必須和”-scheme”一起使用
• archive:打包,必須和“-scheme”一起使用
輔助命令包括:
• -sdk:指定構建使用的SDK
• -list:列出當前項目下所有的Target和scheme。
• -version:版本信息

2 xcodebuild基本命令使用

2.1查看xcode的版本號和build版本

$xcodebuild –version
顯示內容:
Xcode 9.0
Build version 9M137d

2.2顯示當前系統的sdk及其版本

$xcodebuild -showsdks
顯示內容:
iOS SDKs:
iOS 11.0 -sdk iphoneos11.0
iOS Simulator SDKs:
Simulator - iOS 11.0 -sdk iphonesimulator11.0
macOS SDKs:
macOS 10.13 -sdk macosx10.13
tvOS SDKs:
tvOS 11.0 -sdk appletvos11.0
tvOS Simulator SDKs:
Simulator - tvOS 11.0 -sdk appletvsimulator11.0
watchOS SDKs:
watchOS 4.0 -sdk watchos4.0
watchOS Simulator SDKs:
Simulator - watchOS 4.0 -sdk watchsimulator4.0

2.3顯示工程項目信息

先cd到工程目錄下(有*.xcodeproj的目錄,比如CMBUnitAutoTestProject3.xcodeproj),然后輸入命令:
$ xcodebuild –list
顯示內容:
Information about project “CMBUnitAutoTestProject”:
Targets:
CMBUnitAutoTestProject
CMBUnitAutoTestProjectTests
CMBOCHamcrestTest
CMBOHHttpStubsTest
Build Configurations:
Debug
Release
If no build configuration is specified and -scheme is not passed then “Release” is used.
Schemes:
CMBFoundation
CMBUnitAutoTestProject
CMBFoundationUniversal
注:如果未指定Configurations,默認為release

2.4用模擬器建立工程

此處選擇ios11.0模擬器(iphonesimulator11.0),輸入命令:
$ xcodebuild -sdk iphonesimulator11.0
輸出一堆編譯過程,最后輸出* BUILD SUCCEEDED 表示創建成功;若輸出 BUILD FAILED *表示創建失敗。成功后界面如下:

成功后會在當前工程目錄下創建build目錄,結構如下:
這里寫圖片描述
CMBUnitAutoTestProject.app就是編譯生成的可執行文件,而CMBUnitAutoTestProject.build文件夾下是一些中間文件:
這里寫圖片描述

2.5設置成Debug模式

默認是Release工程,要設置成Debug模式如下:
$ xcodebuild -sdk iphonesimulator5.0 -configuration Debug

2.6 clean創建的工程

輸入命令:
$ xcodebuild clean -sdk iphonesimulator5.0 -configuration Debug
clean成功之后成功輸出CLEAN SUCCEEDED界面如下:
這里寫圖片描述

2.7運行unit test

執行測試用例需要的命令是xcodebuild test,如果直接運行,會報如下的錯誤:
這里寫圖片描述
從中我們可以了解到,需要在命令行中指定scheme參數,此外,根據官方文檔的描述,我們還要根據scheme參數的配置情況,靈活設置destination參數。
如官網示例:
xcodebuild test -project MyAppProject.xcodeproj -scheme MyApp -destination ‘platform=OS X,arch=x86_64’
而在我的配置環境下
xcodebuild -scheme CMBUnitAutoTestProject -target CMBOHHttpStubsTest test -destination ‘platform=iOS,name=張楠的 iPhone’
-project在project當前目錄下,且只有一個project文件,是可選參數,可以不寫。

2.8 xcodebuild缺陷

xcodebuild的主要缺陷:
• 從上圖直接可以得到的感覺,其腳本輸出的可讀性極差
• 只能要么完整的運行一個target或者scheme,要么全部不運行。不能指定運行Target中特定的測試。
XCode 4中的xcodebuild居然不支持iOSUnitTest的Target,當我嘗試運行一個iOS App的測試target時,得到如下的錯誤:
這里寫圖片描述
對於上面提到的缺陷,Facebook給出了他們的解決方案:xctool。

2.9 遇到的問題

執行test的時候,必須指定scheme,但是有時候在list中並未顯示完整的scheme列表,此時,需要在Xcode中進行設置:

這里寫圖片描述
隨后,Schemes 管理頁面:
這里寫圖片描述
將需要的scheme后的share勾上即可。

3 xctool

3.1 xctool目的

xctool在 其主頁直接表明了其目的:
xctool is a replacement for Apple’s xcodebuild that makes it easier to build and test iOS and Mac products. It’s especially helpful for continuous integration.
其作用是替代xcodebuild,目的是讓構建和測試更加容易,更好的支持持續集成。從個人感受來看,它的確成功取代了xcodebuild。但是xctool說到底只是對xcodebuild的一個封裝,只是提供了更加豐富的build指令,因此,使用xctool的前提是xcodebuild已經存在,且能正常工作。

3.2 安裝

xctool的安裝非常簡單,只需要clone xctool的repository到項目根目錄就可以使用, 如果你的機器上安裝有Homebrew,可以通過“brew install xctool”命令直接安裝。(注意:使用xctool前一定要首先確認xcodebuild已安裝且能正確工作)。
brew –list:查看安裝的所有軟件列表;
brew info xctool:查看xctool軟件信息

3.3 使用

關於xctool的用法就更加人性化了,幾乎可以重用所有的xcodebuild的指令,配置。只需要注意以下幾點:
• xctool不支持target構建,只能使用scheme構建。
• 支持“-only”指令運行指定的測試。
• 支持多種格式的build報告。
例子:
path/to/xctool.sh -workspace YourWorkspace.xcworkspace -scheme YourSchemetest -only SomeTestTarget:SomeTestClass/testSomeMethod
關於xctool的使用,會在之后再詳細介紹。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com