iOS自動化單元測試之Xcode自帶工具xcodebuild與xccov(一)

為了提高ipa測試包的質(zhì)量芥牌,準(zhǔn)備在項目中集成自動化單元測試寸爆,于是對Xcode的自動化單元測試做了一些研究替废,準(zhǔn)備用幾篇博客與大家分享一下兴革。

  • iOS自動化單元測試之Xcode自帶工具xcodebuild與xccov
  • iOS自動化單元測試之fastlane中xcodebuild與xcov
  • iOS自動化單元測試之生成覆蓋率網(wǎng)頁與發(fā)送釘釘消息
  • iOS自動化單元測試之問題總結(jié)

預(yù)期達(dá)到的效果绎晃,可以設(shè)定單元測試的覆蓋率最低值,終端只輸入一條命令杂曲,就可以實現(xiàn)自動化單元測試及消息通知

1庶艾、釘釘消息,如果達(dá)到最低覆蓋率標(biāo)準(zhǔn)就可收到覆蓋率和ipa的地址擎勘,達(dá)不到只收到覆蓋率的通知咱揍。

0_0.png

2、網(wǎng)頁查看覆蓋率

0_1.png

一棚饵、單元測試準(zhǔn)備工作

1煤裙、創(chuàng)建一個含有Unit Tests的項目

  • 前期創(chuàng)建項目時直接添加
1_1_1.png
  • 創(chuàng)建項目是未添加,可后期添加噪漾。 xcode -> file -> new -> target -> iOS Unit Testing bundle


    1_1_2.png

2硼砰、創(chuàng)建XCTestCase的測試文件

  • xcode -> file -> new -> file -> Unit Test case class


    1_2.png

3、書寫單元測試

- (void)testPerson {
    // This is an example of a functional test case.
    // Use XCTAssert and related functions to verify your tests produce the correct results.
    [self.p sleep];
    //    [self.p eat];
    NSString *name  = [self.p getName];
    XCTAssertTrue([name isEqualToString:@"BJT"],@"名字不相等");
}

4欣硼、單元測試target設(shè)置

info中添加tests题翰,options中勾選Gather coverage框。xcode9.2和xcode9.3位置不太一樣诈胜,下面的圖片是xcode9.3的配置


1_4_1.png
1_4_2.png

多target的時候注意一下豹障,每一個target都需要勾選Gather coverage框,在info里面添加tests焦匈,在manager scheme中勾選shared

1_4_3.png

5血公、執(zhí)行一下common + U可以看到Xcode自帶的覆蓋率,表示配置完成

1_5.png

二缓熟、xcodebuild生成.xccovreport

1坞笙、xcodebuild的終端命令

1、指定執(zhí)行單個文件的用例方法 
bijietaodeMacBook-Pro:BJTUnitTestsDemo bijietao$ xcodebuild test -scheme BJTUnitTestsDemo -target BJTUnitTestsDemo:BJTPersonTests -only-testing:BJTUnitTestsDemoTests/BJTPersonTests -destination 'platform=iOS Simulator,name=iPhone 8 Plus,OS=11.3'

2荚虚、指定執(zhí)行單個文件的一個用例方法 
bijietaodeMacBook-Pro:BJTUnitTestsDemo bijietao$ xcodebuild test -scheme BJTUnitTestsDemo -target BJTUnitTestsDemo:BJTPersonTests -only-testing:BJTUnitTestsDemoTests/BJTPersonTests/testPerson -destination 'platform=iOS Simulator,name=iPhone 8 Plus,OS=11.3'

3、執(zhí)行全部用例方法 
bijietaodeMacBook-Pro:BJTUnitTestsDemo bijietao$ xcodebuild test -scheme BJTUnitTestsDemo -target BJTUnitTestsDemo -destination 'platform=iOS Simulator,name=iPhone 8 Plus,OS=11.3'

具體參數(shù)的講解可以看下面的官網(wǎng)描述

How do I run unit tests from the command line?

xcodebuild provides several options for running unit tests.
To build and run unit tests from the command line, execute the following command in Terminal:

xcodebuild test [-workspace <your_workspace_name>]
                [-project <your_project_name>]
                -scheme <your_scheme_name>
                -destination <destination-specifier>
                [-only-testing:<test-identifier>]
                [-skip-testing:<test-identifier>]

To build unit tests without running them from the command line, execute the following command in Terminal:

xcodebuild build-for-testing [-workspace <your_workspace_name>]
                             [-project <your_project_name>]
                             -scheme <your_scheme_name>
                             -destination <destination-specifier>

To run unit tests without building them from the command line, execute any of the following command in Terminal:

xcodebuild test-without-building [-workspace <your_workspace_name>]
                                 [-project <your_project_name>]
                                 -scheme <your_scheme_name>
                                 -destination <destination-specifier>
                                 [-only-testing:<test-identifier>]
                                 [-skip-testing:<test-identifier>]

xcodebuild test-without-building -xctestrun <your_xctestrun_name>.xctestrun
                                 -destination <destination-specifier>
                                 [-only-testing:<test-identifier>]
                                 [-skip-testing:<test-identifier>]

2籍茧、查看效果

  • 終端會看到運(yùn)行效果版述,及test succeeded的成功提示
2_2_1.png
  • 可以通過文件路徑,查找覆蓋率文件

在 ~/Library/Developer/Xcode/DerivedData/ 路徑下的 Logs/Test中可以查看代碼覆蓋率文件.xccovreport和.xccovarchive寞冯。

在Logs/Test目錄中渴析,有擴(kuò)展名為.xccovreport的覆蓋率報告文件晚伙,和擴(kuò)展名為.xccovarchive的覆蓋率數(shù)據(jù)歸檔文件。蘋果應(yīng)用手冊中注釋說明如下:“覆蓋率報告包含有每個target俭茧,源文件咆疗,以及具有覆蓋信息功能/方法的線性覆蓋百分比等內(nèi)容。覆蓋率數(shù)據(jù)歸檔文件包含有每個文件的原始執(zhí)行次數(shù)“母债。

三午磁、xccov生成覆蓋率(支持最低版本Xcode9.3)

因為.xccovreport 與 .xccovarchive,這些文件并不適用于用戶查閱毡们,這就是我們需要使用xccov來查看這些文件迅皇,并以完美的樣式顯示報告。

  • 從終端查看代碼覆蓋率報告衙熔;
  • 從代碼覆蓋率報告中解析出JSON樣式數(shù)據(jù)登颓;
  • 列出已生成代碼覆蓋率的所有文件;
  • 查看一個特定文件的代碼覆蓋率報告红氯。

1框咙、查看報告 -Default

我們可以以默認(rèn)格式查看代碼覆蓋率報告,這種格式并不是很好痢甘,但根據(jù)Apple的說明喇嘱,它是用戶可讀的。在我們的演示項目中产阱,我們可以使用以下命令生成報告:
$ xcrun xccov view Logs/Test/*.xccovreport
執(zhí)行上面命令時婉称,需要先前往DerivedData的項目文件夾下,或者寫全路徑(/Users/bijietao/Library/Developer/Xcode/DerivedData/BJTUnitTestsDemo-dycoddwyqpwfaqeybquzsxriqrfn/Logs/Test/*.xccovreport )构蹬。

效果如下:


3_1_1.png

2王暗、查看報告 - JSON

xccov真正強(qiáng)大的地方,就是能夠以JSON格式生成代碼覆蓋率報告庄敛。我們可以使用以下命令來生成JSON格式的報告:
$ xcrun xccov view Logs/Test/*.xccovreport --json

效果如下:


3_2_1.png

3俗壹、列出所有文件

$ xcrun xccov view --file-list Logs/Test/*.xccovreport --json

4、特定文件的代碼覆蓋率

$ xcrun xccov view --file /Users/bijietao/Desktop/Unittest/5/BJTUnitTestsDemo/BJTUnitTestsDemo/AppDelegate.m Logs/Test/*.xccovarchive

四藻烤、總結(jié)

1绷雏、如果你的項目是多target,配置會有所不同怖亭,參考上文涎显。

2、github上的demo 代碼傳送門兴猩。

3期吓、準(zhǔn)備工作完成,下篇博客準(zhǔn)備寫【iOS自動化單元測試之fastlane中xcodebuild與xcov】倾芝,一條命令讨勤,執(zhí)行單元測試箭跳,輸出測試報告,發(fā)送釘釘通知潭千。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谱姓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子刨晴,更是在濱河造成了極大的恐慌屉来,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件割捅,死亡現(xiàn)場離奇詭異奶躯,居然都是意外死亡哎媚,警方通過查閱死者的電腦和手機(jī)证薇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門臀稚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來图筹,“玉大人裸扶,你說我怎么就攤上這事疾嗅∮糯玻” “怎么了蛤售?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵疼邀,是天一觀的道長喂江。 經(jīng)常有香客問我,道長旁振,這世上最難降的妖魔是什么获询? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮拐袜,結(jié)果婚禮上吉嚣,老公的妹妹穿的比我還像新娘。我一直安慰自己蹬铺,他們只是感情好尝哆,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著甜攀,像睡著了一般秋泄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上规阀,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天恒序,我揣著相機(jī)與錄音,去河邊找鬼谁撼。 笑死奸焙,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播与帆,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼墨榄!你這毒婦竟也來了玄糟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤袄秩,失蹤者是張志新(化名)和其女友劉穎阵翎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體之剧,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡郭卫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了背稼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贰军。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蟹肘,靈堂內(nèi)的尸體忽然破棺而出词疼,到底是詐尸還是另有隱情,我是刑警寧澤帘腹,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布贰盗,位于F島的核電站,受9級特大地震影響阳欲,放射性物質(zhì)發(fā)生泄漏舵盈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一球化、第九天 我趴在偏房一處隱蔽的房頂上張望秽晚。 院中可真熱鬧,春花似錦赊窥、人聲如沸爆惧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扯再。三九已至,卻和暖如春址遇,著一層夾襖步出監(jiān)牢的瞬間熄阻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工倔约, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留秃殉,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像钾军,于是被迫代替她去往敵國和親鳄袍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

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