三十張圖了解如何簡(jiǎn)單搭配Jenkins+KIF實(shí)現(xiàn)自動(dòng)化測(cè)試

本文主要講解如何使用開源社區(qū)的一個(gè)CI工具Jenkins來(lái)搭建iOS的的CI環(huán)境

1.下載并運(yùn)行Jenkins

在Mac環(huán)境下抑片,我們需要先安裝JDK,然后在Jenkins的官網(wǎng).下載最新的war包。
下載完成后该默,打開終端案糙,進(jìn)入到war包所在目錄,執(zhí)行以下命令:

java -jar jenkins.war --httpPort=8080

進(jìn)行安裝

圖一.png

圖二.png
圖三.png

httpPort指的就是Jenkins所使用的http端口送粱,這里指定8080褪贵,可根據(jù)具體情況來(lái)修改。待Jenkins啟動(dòng)后,在瀏覽器頁(yè)面輸入以下地址:

http://localhost: 8080

安裝完成之后重新打開[http://localhost: 8080](http://localhost: 8080) 此時(shí)需要用戶輸入密碼

圖四.png

該密碼文件在路徑 /Users/Shared/Jenkins/Home/secrets 下無(wú)法直接打開 可以終端輸入

sudo cat /Users/Shared/Jenkins/Home/secrets/initialAdminPassword 

獲取內(nèi)容

2.Jenkins自動(dòng)配置安裝

圖五.png

圖六.png

設(shè)置用戶名密碼

圖七.png

3.安裝插件

設(shè)置完畢后進(jìn)入[http://localhost: 8080](http://localhost: 8080) 再配置一些我們所需要的插件

圖八.png

通過(guò)過(guò)濾搜索脆丁,我們安裝幾個(gè)后續(xù)需要使用的插件(可根據(jù)自己實(shí)際需要安裝其他的輔助插件)

  • GitLab Plugin
  • Gitlab Hook Plugin
  • Xcode integration
  • Keychains and Provisioning Profiles Management
  • Credentials Plugin
圖九.png

4.配置SSH與KeyChain

添加SSH.

在Jenkins管理頁(yè)面世舰,選擇“Credentials”,然后選擇“Global credentials”槽卫,點(diǎn)擊“Add Credentials”跟压,進(jìn)行添加SSH.

圖十.png

Private Key的獲取是在路徑 /Users/管理員用戶名/.ssh 里面,可以通過(guò)終端輸入 open ~/.ssh 打開文件夾,找到id_rsa (注意不是id_rsa.pub
) 將里面內(nèi)容全部復(fù)制 填寫時(shí)
開頭是-----BEGIN RSA PRIVATE KEY-----

結(jié)尾是-----END RSA PRIVATE KEY-----

iOS打包需要簽名文件和證書

在系統(tǒng)管理頁(yè)面歼培,選擇剛剛安裝好的插件“Keychains and Provisioning Profiles Management”震蒋。

圖十一.png

上傳keychain

先將鑰匙串登錄里面的相關(guān)開發(fā)者證書復(fù)制到系統(tǒng)目錄下


圖十二.png

然后

圖十三.png

點(diǎn)擊選取文件 選擇路徑/Users/管理員用戶名/Library/keychains/login.keychain 然后點(diǎn)擊Upload

Code Signing Identity 填寫復(fù)制的內(nèi)容

圖十四.png

然后再點(diǎn)擊選取文件 選擇路徑/Users/管理員用戶名/Library/MobileDevice/Provisioning Profiles下自己項(xiàng)目所需要的配置文件

成功后如下所示

圖十六.png

理論上Jenkins會(huì)把這個(gè)Keychain拷貝到/Users/Shared/Jenkins/Library/keychains這里,(Library是隱藏文件)躲庄。Provisioning Profiles文件也直接拷貝到/Users/Shared/Jenkins/Library/MobileDevice文件目錄下查剖。

執(zhí)行上述操作后查看是否有路徑Users/Shared/Jenkins/Library/keychainsUsers/Shared/Jenkins/Library/MobileDevice 如果不存在這兩個(gè)文件夾,自己先創(chuàng)建兩條路徑 然后將login.keychain與login.keychain-db和配置文件夾復(fù)制到相應(yīng)的文件夾內(nèi)

否則容易出現(xiàn)問(wèn)題:

No profile matching 'getgetsetset5CommonTest' found: Xcode couldn't find a profile matching 'getgetsetset5CommonTest'. Install the profile (by dragging and dropping it onto Xcode's dock item) or select a different one in the General tab of the target editor

即 Jenkins 在指定的目錄下沒(méi)有找到對(duì)應(yīng)的profile文件

解決方案:
/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles 看看這個(gè)目錄下面噪窘,有沒(méi)有對(duì)應(yīng)的profile文件笋庄,如果沒(méi)有,可以手動(dòng)拷貝相應(yīng)的profile文件效览,如果中間某些目錄(例如 :MobileDevice)缺失无切,也可以自己手動(dòng)創(chuàng)建

或是下面問(wèn)題

FATAL: Unable to unlock the keychain. Will not set default: file /Users/Shared/Jenkins/Library/Keychains/login.keychain

10.12系統(tǒng)后 keychain變成keychain-db

所以最好將login.keychain與login.keychain-db 都復(fù)制過(guò)去

5.構(gòu)建

插件全部安裝完畢后,下面就可以正式開始自動(dòng)化構(gòu)建了Xね鳌6呒!

1)點(diǎn)擊新建進(jìn)行構(gòu)建新的項(xiàng)目

圖十七.png

2)設(shè)置參數(shù)

圖十八.png

為了方便舉例子瘦锹,這里使用GitHub上的項(xiàng)目示损,具體情況可以使用自己公司的項(xiàng)目地址

圖十九.png

如果出現(xiàn)上述的紅色警告忽冻,請(qǐng)檢查SSH是否配置正確,配置成功如下圖


圖二十.png

Poll SCM (poll source code management) 輪詢?cè)创a管理
需要設(shè)置源碼的路徑才能起到輪詢的效果,因?yàn)檫@個(gè)項(xiàng)目主要是用來(lái)測(cè)試符衔,因此時(shí)間設(shè)置為60分鐘才查詢一下

圖二十一.png

3)添加腳本

Xcode integration也是可以進(jìn)行打包測(cè)試的,但xcode8.0之后老是有一下問(wèn)題失暴,因此直接使用腳本構(gòu)建

圖二十二.png

點(diǎn)擊 增加構(gòu)建步驟 選擇 Execute shell 填寫
xcodebuild clean build test -workspace JenkinsWithKIFDemo.xcworkspace -scheme JenkinsWithKIFDemo -destination 'platform=iOS,name=coderOnePolo'

本來(lái)是在模擬器進(jìn)行測(cè)試的 但是老是報(bào)錯(cuò)
iPhoneSimulator: Could not launch simulator: -10810邀层,即使按照SETTING UP JENKINS CI ON A MAC的設(shè)置依舊有問(wèn)題,所以現(xiàn)在先用真機(jī)進(jìn)行測(cè)試

圖二十三.png

到目前為止 基本的構(gòu)建已經(jīng)完成 后面可以根據(jù)需要再添加遠(yuǎn)程測(cè)試或者添加報(bào)表等需求椅挣。

3.使用KIF進(jìn)行測(cè)試

使用Cocoapod管理头岔,在項(xiàng)目的Podfile file中添加KIF

# Uncomment the next line to define a global platform for your project
 platform :ios, '9.0'

target 'JenkinsWithKIFDemo' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!
   pod 'AFNetworking','~>2.5.4'
end
target 'JenkinsWithKIFDemoTests' do
    #inherit! :search_paths
     pod 'KIF', :configurations => ['Debug']

    # Pods for testing
end
圖二十四.png

如果是在舊的項(xiàng)目引入Test,則需要添加以下幾個(gè)配置


圖二十五.png

圖二十六

圖二十七.png

圖二十八

圖二十九.png

之后就是添加測(cè)試代碼了,簡(jiǎn)單的測(cè)試效果如下

測(cè)試.gif

使用Jenkins實(shí)現(xiàn)自動(dòng)化測(cè)試

接下來(lái)就是見(jiàn)證成果的時(shí)候了鼠证,可以自己馬上點(diǎn)擊立即構(gòu)建進(jìn)行測(cè)試


圖三十.png

圖三十一.png

配置好后當(dāng)自己的代碼修改提交到遠(yuǎn)程倉(cāng)庫(kù)后峡竣,Jenkins就能馬上自動(dòng)化測(cè)試代碼。(__)

補(bǔ)充 配置時(shí)候的一些坑

qustion:1.A build only device cannot be used to run this target

I get this error when I trying to test an app.
A build only device cannot be used to run this target.
No supported iOS devices are available. Connect a device to run your application or choose a simulated device as the destination.

add -destination 'platform=iOS Simulator,name=iPhone 6,OS=9.3' to your xcodebuild

qustion:2.Could not launch simulator: -10810.

I had exact same issue. It happens because Mac OS X doesn't allow an iOS simulator to run in the BACKGROUND.

If you are constructing a Jenkins CI environment, and trying to unit test via the simulator, you can't run the simulator, because Jenkins is basically run as a DAEMON. This also happens if you're running the tests behind environments like tmux or screen.

Here is a great tutorial to read that can help you fix this.

Cheers!

qustion:3 The target … overrides the OTHER_LDFLAGS build setting defined in `Pods/Pods.xcconfig

在那個(gè)target下就去設(shè)置哪個(gè)target的setting

This definitely works most of the time:

Go to your target Build Settings -> Other linker flags -> double click . Add $(inherited) to a new line.

If you have problem with "...target overrides the GCC_PREPROCESSOR_DEFINITIONS build setting defined in..." then you must add $(inherited) to your target Build Settings -> Preprocessor Macros

qustion:4 出現(xiàn)錯(cuò)誤 Failed to connect to repository : Command "git ls-remote -h

選擇SSH Username with private key
直接輸入私鑰量九,要完整復(fù)制 ~/.ssh/id_isa里面的內(nèi)容适掰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末颂碧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子类浪,更是在濱河造成了極大的恐慌载城,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戚宦,死亡現(xiàn)場(chǎng)離奇詭異个曙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)受楼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門垦搬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人艳汽,你說(shuō)我怎么就攤上這事猴贰。” “怎么了河狐?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵米绕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我馋艺,道長(zhǎng)栅干,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任捐祠,我火速辦了婚禮碱鳞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘踱蛀。我一直安慰自己窿给,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布率拒。 她就那樣靜靜地躺著崩泡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪猬膨。 梳的紋絲不亂的頭發(fā)上角撞,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音勃痴,去河邊找鬼谒所。 笑死,一個(gè)胖子當(dāng)著我的面吹牛召耘,可吹牛的內(nèi)容都是我干的百炬。 我是一名探鬼主播褐隆,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼污它,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起衫贬,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤德澈,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后固惯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梆造,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年葬毫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了镇辉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贴捡,死狀恐怖忽肛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烂斋,我是刑警寧澤屹逛,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站汛骂,受9級(jí)特大地震影響罕模,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜帘瞭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一淑掌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧图张,春花似錦锋拖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至适袜,卻和暖如春柄错,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苦酱。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工售貌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疫萤。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓颂跨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親扯饶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恒削,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1 全局配置 1.1 Keychain全局配置 1.1.1配置Provisioning Profiles 1池颈、將/...
    Kevin_Junbaozi閱讀 13,221評(píng)論 3 29
  • 前言 從前文Jenkins(一)初步認(rèn)識(shí)我們已經(jīng)初步認(rèn)識(shí)了Jenkins。接下來(lái)我們將通過(guò)一些配置來(lái)實(shí)現(xiàn)利用Jen...
    dvlproad閱讀 7,303評(píng)論 9 7
  • 搭建Jenkins前钓丰,請(qǐng)確認(rèn)mac系統(tǒng)上已經(jīng)搭建好了Java環(huán)境躯砰。從零開始一步一步構(gòu)建,遇到了很多坑携丁,好在最終su...
    kamto閱讀 16,764評(píng)論 12 35
  • 前言 眾所周知琢歇,現(xiàn)在App的競(jìng)爭(zhēng)已經(jīng)到了用戶體驗(yàn)為王,質(zhì)量為上的白熱化階段梦鉴。用戶們都是很挑剔的李茫。如果一個(gè)公司的推廣...
    偏偏就是禰閱讀 8,983評(píng)論 34 59
  • 美國(guó)人言必稱領(lǐng)導(dǎo)力。從幼兒園小孩子就開始bibi領(lǐng)導(dǎo)力肥橙,上大學(xué)的錄取的時(shí)候要看學(xué)生有沒(méi)有領(lǐng)導(dǎo)力涌矢,到了成年工作了自不...
    正宗毛利大五郎閱讀 275評(píng)論 0 2