1. 程式人生 > >TestFlight——完美的iOS app測試方案

TestFlight——完美的iOS app測試方案

轉載本文請保留以下原作者資訊: 


2014.5.3補充

TestFlight 現在已經修成正果,被 Apple 高價收購。雖然很遺憾不能再支援 Android 版本,但是有理由相信在 Apple 旗下的 TestFlight 將被深度整合進 Apple 開發的生態體系,並且承擔更加重要的作用。不妨期待一下今年的 WWDC 上 Apple 在 CI 方面的進一步動作,預測應該會有 OSX Server 和 TestFlight 的協作方面內容。對於 CI 方面的一些其他介紹,可以參看 objc 中國的這篇帖子

2013.3.31補充

在整理以前寫的內容,想不到還有機會再對這篇帖子進行一些更新。當時寫這篇帖子的時候,app內部測試以及對應的crash報告類的服務相對很少,而且並不成熟。TestFlight算是在這一領域的先行者,而隨著app市場的不斷膨脹,相應的類似服務也逐漸增多,比較常用的有:

崩潰報告類:

  • Crittercism 個人用了一段時間,表現很穩定,但是版本更新時設定比較麻煩
  • Crashlytics 相當優雅方便,最近被Twitter收購。十分推薦

使用者行為統計類:

  • Flurry 這個太有名了,不多說了
  • Countly 好處是輕量開源,資料可以自己掌控

但是在“釋出前”測試分發這個環節上,基本還沒有出現能與TestFlight相匹敵的服務出現,因此如果有這方面的測試需求的話,TF依然是開發人員的首選。

當然,這一年多來,TF也進步了很多。從整個隊伍建立和開發者新增開始,到桌面客戶端的出現以及打包上傳的簡化,可以說TF也逐漸向著一個更成熟易用的方向發展。本文雖然寫的時間比較早,但是整個TF的基本流程並沒有發生變化,依然可以作為入門的參考。

前言

iOS開發的測試一直是令人頭疼的問題。app開發的短週期和高效率的要求註定了一款app,特別是小公司的app,不會留給開發人員很多測試的時間。而在測試時往往又遇到crash報告提交困難,測試人員與開發人員溝通不便等等問題,極大延緩了測試進度。TestFlight即是為了解決iOS開發時測試的種種困難而生的服務,使用TestFlight可以十分便利地完成版本部署,測試使用者Log提交,收集Carsh Log和收集使用者反饋等工作,而這一切居然連一個iDP賬號都不需要!

基本使用

註冊

TestFlight介面友好,文件齊全,開發者在使用上不會遇到很多問題。到TestFlight官網註冊賬號即可開始使用。

註冊賬號

註冊時記得勾選I am a developer,之後便可以以開發者身份管理開發和測試團隊,提交測試版本和檢視報告等,若沒有勾選則是以測試者身份註冊。若在註冊時沒有選上,之後在帳號設定中也可以進行更改。

勾選開發者

確認

註冊完成以後會在註冊郵箱中收到確認郵件。使用你的iDevice用郵件內的帳號登陸,並且完成設備註冊,加入TestFlight的描述檔案。關於設備註冊和可能遇到的問題,可以參看這篇帖子

建立團隊

登陸TestFlight後在自己的Dashboard可以新建一個團隊。團隊包括了開發者、測試者和相應的測試版本。建立團隊後可以通過選擇團隊來檢視團隊的資訊等情況。

建立團隊

新增測試者

在團隊管理介面可以為團隊新增成員。填寫受邀者的郵件和簡單的說明,一封包含註冊連結的郵件將被髮送到指定郵箱。受邀者通過類似的註冊和確認流程即可加入團隊,參與共同開發和測試。

新增測試者

上傳測試版本

上傳的版本必須是包含簽名的ipa,成功上傳版本後即可選擇給團隊內的成員發郵件或推送邀請他們進行新版本的安裝和測試。之後在版本管理中即可看到關於該版本的測試資訊。該部分具體內容參看本文最後。

收集測試資訊

在build介面中選擇需要檢視的版本的對應按鈕即可看到收集到的測試資訊,包括一般的session資訊,裝置使用TFLog進行的輸出(需要TestFlight SDK),crash報告,是否通過了預先設定的檢查點,測試人員的安裝情況等資訊。

結合SDK來使用,一切測試機彷彿都變成了你自己的終端,所有的Log和裝置的狀態盡在掌握,而這樣的便利僅僅需要點選下滑鼠和寫幾行程式碼,這便是TestFlight的強大之處。

收集資訊

TestFlight SDK使用

下載

不使用TestFlight的SDK的話,可以說就連這個強大的平臺的一成功力都發揮不出來。點選這裡從官方網站下載SDK,官方文件提供了關於SDK的很全面的說明,在支援頁面也能找到很多有用的資訊。

之後將以Xcode4為例,簡介SDK的使用,更多資訊可以參考TestFlight官網。

配置

  • 將標頭檔案加入工程:File->Add Files to 

    • 找到包含SDK的資料夾
    • 勾選"Copy items into destination folder (if needed)"
    • 選擇"Create groups for any added folders"
    • 勾上想要使用TestFlight SDK的Target
  • 驗證libTestFlight.a是否被加到link部件中 

    • 在Project Navigation裡選中工程檔案
    • 選中想要應用SDK的Target
    • 選擇Build Phase欄
    • 開啟Link Binary With Libraries Phase
    • 如果libTestFlight.a不在欄內,從Project Navigation裡將其拖到欄內
  • 開始使用 

    • 在需要用到TestFlight SDK的檔案中引入標頭檔案:#import “TestFlight.h”,方便起見,您也可以在工程的預編譯檔案中的#ifdef OBJC塊中引入
    • 獲取團隊token:在這個頁面中對應的團隊下選取TeamInfo,獲取團隊的token。
    • 在AppDelegate中啟動TestFlight 
–(BOOL)application:(UIApplication *_)application didFinishLaunchingWithOptions:(NSDictionary  _*)launchOptions {  
    // start of your application:didFinishLaunchingWithOptions  
    // …  
    [TestFlight takeOff:@“團隊Token”];  
    // The rest of your application:didFinishLaunchingWithOptions method  
    // …  
}

為了能得到有用的crash log(掛載過的),必須在生成ipa的時候不剝離.dSYM檔案。在Project Navigation裡選中工程檔案,選中需要使用TestFlight SDK的Target,在Building Setting的Deployment塊下,將以下三項設為NO 

  • Deployment Post Processing
  • Strip Debug Symbols During Copy
  • Strip Linked Product

檢查點

開發者可以在程式碼的任意位置設定檢查點,當測試者通過檢查點時,session裡將會對此記錄。比如測試者通過了某個關卡,或者提交了某個分數,或者向資料庫加入了某條資訊等。通過驗證檢查點,一方面可以檢測程式碼是否正確,另一方面也可以作為遊戲的平衡性調整和測試,用來檢測使用者的普遍水平。

加入檢查點

[TestFlight passCheckpoint:@“CHECKPOINT_NAME”];  

檢查點問題

配合檢查點可以向測試者提出問題,比如“是否正確地通過了演示介面?”或者“分數榜的提交正常嗎?”這樣的問題。在build management下可以找到Question選項,為檢查點新增問題。問題的回答分為多選,是/否以及任意回答,如果選擇多選的話,還需要指出問題的可能的選項。 
當測試者通過問題所對應的檢查點時,一個modalViewController形式的問題和選項列表會出現供測試者選擇。開發者可以在build的Question選項卡中看到反饋。

反饋

TestFlight提供了一個預設的反饋介面,測試者可以填寫他們想寫的任何內容並將這個反饋傳送給你。呼叫一個反饋:

–(IBAction)launchFeedback {  
    [TestFlight openFeedbackView];  
}

一般來說可以在主介面或者最常見的介面上設定一個“反饋”按鈕,這樣測試者可以很方便地將他們的感受和意見傳送給你。

遠端Log

太棒了…配合TestFlight,現在開發者可以拿到遠端客戶端的Log。使用TFLog代替NSLog即可,任何TFLog的輸出將被上傳到TestFlight的伺服器。如果需要詳細一些的輸出資訊,可以用內建的引數的方式輸出資訊,比如:

#define NSLog(__FORMAT__, ...) TFLog((@"%s [Line %d] " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)

將會得到類似這樣的輸出

-[HTFCheckpointsController showYesNoQuestion:] [Line 45] Pressed YES/NO

所有的TFLog都不會阻塞主執行緒,所有的TFLog都將完成以下三種Logger工作

  • TestFlight logger
  • Apple System Log logger
  • STDERR logger

配合以前介紹過的NSLogger(參見這篇文章),將Log發揮到極致,讓你永遠掌控自己的程式碼吧~

Log將會在客戶端進入後臺或者被退出的時候上傳到伺服器,如果沒有看到應該有的Log的話,很有可能是還在上傳中。視Log檔案大小而定,一般這個過程需要若干分鐘。當然,巨量上幾M甚至10+M的Log可能會被TestFlight拒絕哦..畢竟沒有那麼多儲存空間..

當然,客戶端必須有可用的網路環境這個功能才會啟用。得到的Log會儲存在Session下。

Session頁面

生成和上傳測試版本

打包ipa

..做過部署的童鞋對這個應該很熟了,官方也有一個詳細的guide,總之照著做就沒錯了

上傳測試版本

打包好ipa後就到版本上傳介面,把做好的ipa拖過去就萬事大吉了。

上傳ipa包

最後一步是邀請團隊內的測試者進行測試。把你想邀請的測試者打上勾然後OK,包含連結的邀請郵件將會發到他們的郵箱。然後~等待測試結果和大家的反饋,並且根據反饋完善app吧~

寫在最後

TestFlight是一個很棒的工具,而且關鍵,它現在還是免費的~

雖然有趨勢以後將會收費,但是這套方案確實是方便易用..希望多支援吧~