除了在開發(fā)過程中交互運(yùn)行測試汞窗,還可以使用服務(wù)器自動運(yùn)行測試。
基于服務(wù)器的連續(xù)集成測試
交互使用Xcode測試功能,保證你的代碼保持特定要求,并確保開發(fā)中的bug容易發(fā)現(xiàn)和修復(fù)贬媒。一套快速運(yùn)行的功能測試保證你的工作并確保app功能有效運(yùn)行。
即肘习,成功的開發(fā)項(xiàng)目往往不止有一個(gè)開發(fā)人員實(shí)現(xiàn)和管理际乘。像源代碼管理,基于服務(wù)自動化測試有這些好處:使開發(fā)精力集中在團(tuán)隊(duì)高效漂佩。
使用基于服務(wù)器測試有以下好處:
- 使用服務(wù)器脫機(jī)生成和測試脖含,使你的開發(fā)系統(tǒng)可以執(zhí)行和調(diào)試,特別是在完整測試需要很長時(shí)間運(yùn)行的情況下投蝉。
- 使用相同的配置养葵,開發(fā)團(tuán)隊(duì)的所有程序可以在服務(wù)器上運(yùn)行相同的測試,這樣提高測試的一致性墓拜。服務(wù)器也生成產(chǎn)品給整個(gè)團(tuán)隊(duì)港柜,就像生成和測試報(bào)告一樣请契。
- 你可以根據(jù)項(xiàng)目和團(tuán)隊(duì)的需要調(diào)整配置咳榜。例如,團(tuán)隊(duì)任何成員提交新工作到源代碼管理系統(tǒng)或定期在設(shè)置時(shí)間段中提交新工作時(shí)爽锥,可以啟動運(yùn)行測試涌韩。運(yùn)行測試也可以在需要時(shí)手動啟動。
- 服務(wù)器以相同方式運(yùn)行測試氯夷。服務(wù)器報(bào)告提供一段時(shí)間內(nèi)構(gòu)建問題臣樱、構(gòu)建警告和測試決議的圖片。
- 你的項(xiàng)目可以在更多的目標(biāo)上測試腮考,自動運(yùn)行測試系統(tǒng)比手動方式更經(jīng)濟(jì)雇毫。例如,你可以將任意數(shù)量的iOS設(shè)備連接到服務(wù)器踩蔚,使用一個(gè)配置棚放,該系統(tǒng)可以構(gòu)建和測試庫、應(yīng)用程序,并在所有設(shè)備上運(yùn)行測試馅闽,同時(shí)測試多個(gè)版本的模擬器飘蚯。
命令行測試
使用Xcode命令行工具馍迄,你可以使用腳本自動構(gòu)建和測試你的項(xiàng)目。
使用xcodebuild測試
xcodebuild
命令行工具像Xcode IDE一樣驅(qū)動測試局骤。運(yùn)行xcodebuild攀圈,
使用destination
參數(shù)指定不同的目標(biāo)。例如峦甩,為了測試本地OS X的MyApp赘来,使用這個(gè)命令指定目標(biāo)。
<pre><code>
xcodebuild test -project MyAppProject.xcodeproj -scheme MyApp -destination 'platform=OS X,arch=x86_64'
</pre></code>
如果你連接了開發(fā)功能可用的設(shè)備穴店,你可以通過名字或id調(diào)用撕捍。例如你有一個(gè)名為“開發(fā)iPod touch”的ipod touch連接設(shè)備,你可以使用下面的命令測試你的代碼:
<pre><code>
xcodebuild test -project MyAppProject.xcodeproj -scheme MyApp -destination 'platform=iOS,name=Development iPod touch'
</pre></code>
可以在模擬器上運(yùn)行測試泣洞。使用模擬器以針對不同因素忧风,操作系統(tǒng)和系統(tǒng)版本。模擬器的目標(biāo)可以指定名稱或id球凰。例如:
<pre><code>
xcodebuild test -project MyAppProject.xcodeproj -scheme MyApp -destination 'platform=Simulator,name=iPhone,OS=8.1'
</pre></code>
destination
參數(shù)可以連接在一起狮腿,一個(gè)命令在指定共享配置目標(biāo)上執(zhí)行測試。例如呕诉,下面的命令鏈將前面三個(gè)例子結(jié)合在一起變成一個(gè)命令:
<pre><code>
xcodebuild test -project MyAppProject.xcodeproj -scheme MyApp
-destination 'platform=OS X,arch=x86_64'
-destination 'platform=iOS,name=Development iPod touch'
-destination 'platform=Simulator,name=iPhone,OS=9.0'
</pre></code>
如果測試失敗缘厢,xcodebuild
返回非零退出代碼。
關(guān)于命令行運(yùn)行測試甩挫,你需要知道一些基本要素贴硫。關(guān)于xcodebuild
的詳細(xì)信息,在終端應(yīng)用窗口使用man
:
<pre><code>
man xcodebuild
</pre></code>
使用xcodebuild的ssh
從ssh遠(yuǎn)程登錄(或啟動守護(hù)進(jìn)程)調(diào)用xcodebuild
會失敗伊者,除非主機(jī)上創(chuàng)建正確會話環(huán)境英遭。
當(dāng)你作為用戶登陸到你的OS X系統(tǒng)時(shí)會創(chuàng)建“Aqua會話”環(huán)境。Aqua會話初始化OS X交互環(huán)境亦渗,為了可以運(yùn)行OS X應(yīng)用挖诸,這些是必需的。更具體來說法精,使用UI框架(APPKit或UIKit)代碼需要運(yùn)行Aqua會話多律。因?yàn)檫@個(gè)要求,在OS X上測試(或測試模擬器或OS X 應(yīng)用)需要Aqua會話搂蜓。
默認(rèn)情況下狼荞,當(dāng)你使用ssh登陸沒有運(yùn)行用戶會話的OS X系統(tǒng),會創(chuàng)建命令行會話帮碰。為了確保ssh登陸時(shí)創(chuàng)建了Aqua會話相味,你必須有用戶登陸到遠(yuǎn)程OS X主機(jī)系統(tǒng)。遠(yuǎn)程系統(tǒng)上有運(yùn)行的用戶時(shí)收毫,會強(qiáng)制ssh登陸創(chuàng)建Aqua會話攻走。
一旦有一個(gè)用戶在主機(jī)系統(tǒng)上運(yùn)行殷勘,從ssh登陸為所有類型測試運(yùn)行xcodebuild。例如昔搂,下面終端應(yīng)用命令運(yùn)行測試開發(fā)系統(tǒng)上的“
MyApp”:
<pre><code>
ssh localhost
cd ~/Development/MyAppProject_Folder
xcodebuild test -project MyApp.xcodeproj -scheme MyApp -destination 'platform=Simulator,name=iPhone 6'
</pre></code>
需要深入了解ssh玲销,啟動守護(hù)進(jìn)程和啟動代理,以及他們?nèi)绾闻c系統(tǒng)交互摘符,參見技術(shù)說明文檔守護(hù)進(jìn)程和代理及守護(hù)進(jìn)程和服務(wù)變成指南(Daemons and Agents and Daemons and Services Programming Guide)贤斜。
使用Xcode服務(wù)器并持續(xù)集成
通過Xcode服務(wù)器,Xode支持完全集成基于服務(wù)器持續(xù)集成工作流逛裤。Xcode服務(wù)器可用于OS X 服務(wù)器瘩绒,自動構(gòu)建、分析带族、測試和歸檔app锁荔。Xcode服務(wù)器和持續(xù)集成工作流對于交互式開發(fā)工作是無縫和透明的。
學(xué)習(xí)所有關(guān)于設(shè)置并使用Xcode服務(wù)器蝙砌,參見Xcode服務(wù)器并持續(xù)集成指南( Xcode Server and Continuous Integration Guide)阳堕。