ios開發(fā)中自動化測試的集中方法(沒完成)

實(shí)際開發(fā)過程中尖淘,軟件工程師有責(zé)任去編寫一些測試用例颈将,保證我們程序的健壯性驹针。這里殖告,探討一下在ios和安卓不同的測試用例的區(qū)別和用法阿蝶。

iOS篇

  • 以下是幾種比較靠譜的測試框架
  • 1.NSAssert (斷言,和普通代碼在一起書寫)
  • 2.WIKI,是從行為的角度思考問題黄绩。測試用例都遵循三段式Given-When-Then的描述羡洁,清晰地表達(dá)測試用例是測試什么樣的對象或數(shù)據(jù)結(jié)構(gòu),在基于什么上下文或情景爽丹,然后做出什么響應(yīng)筑煮。
  • 3.XCTest(Unit Test)(又稱為模塊測試, Unit Testing)單元測試非常適合用來做 app 的邏輯以及網(wǎng)絡(luò)接口方面的測試,Xcode提供單元測試的是從測試的角度思考問題
  • 4.比如專注于提供 Mock 和 Stub 的 OCMock(建議使用GHUnit + OCMock組合進(jìn)行單元測試)
  • 5.UITest

具體的使用方法和介紹

1.NSAssert(斷言)

什么是斷言?
程序運(yùn)行時防止某些數(shù)據(jù)不符合預(yù)期粤蝎,直接在使用數(shù)據(jù)的時候咆瘟,對他用斷言判斷一下,保證數(shù)據(jù)的正確性

使用場景
在程序的任何位置诽里,只要是對任何數(shù)據(jù)或者對象的懷疑袒餐,就可以對他們進(jìn)行斷言判斷(只在debug模式開啟,release默認(rèn)關(guān)閉)

優(yōu)點(diǎn)
和程序同步,當(dāng)開發(fā)和測試人員使用app的時候灸眼,走到程序的任何位置卧檐,都時刻有斷言給你保證你所使用的數(shù)據(jù)是符合你預(yù)期的,如有違背焰宣,直接就崩潰提醒霉囚,簡單粗暴

當(dāng)你要去使用一個變量的時候,你害怕他不對或者為空匕积,通常你會判斷一下

    GEUser * user =[GEUserTool userInfo];
    if (user.Token.length) {
        NSLog(@"用戶的token不為空");
    }

這是我們正常的使用過程盈罐,沒問題。如果測試測完了闪唆,說對盅粪,這很好,當(dāng)下一個版本的時候悄蕾,我們突然改動了些東西票顾,這個位置的token為空了,測試又走到這里帆调,沒注意到無打印奠骄,那么這個隱藏的bug就這樣放著,一直不會發(fā)現(xiàn)番刊。我舉得例子是比較小的含鳞,如果是個大的bug珍策,測試忘了回歸測試姑隅,責(zé)任是很大的圆裕,所以胳蛮,為了保險起見烫堤,我們可以使用斷言躯砰,哪怕測試沒有發(fā)現(xiàn)活箕,我們可以自定義的對錯誤做一個處理(自定義直接崩潰或者打印輸出)魂仍!

    GEUser * user =[GEUserTool userInfo];
    NSAssert(user.Token.length != 0, @"用戶的token不能是空的");
    if (user.Token.length) {
        NSLog(@"用戶的token不為空");
    }

如果是這個樣子沃但,及時測試人員沒有測試出來磁滚,系統(tǒng)會自動奔潰,打印出出錯的斷言的位置宵晚,方便我們調(diào)試垂攘,給開發(fā)人員和測試人員提供了諸多便利,具體內(nèi)容請到我的另一篇文章看看詳情.

2.UintTest(單元測試淤刃,屬于TDD)

什么是單元測試晒他?

蘋果親兒子,直接在app的UITestCase類中測試業(yè)務(wù)邏輯逸贾,集中化管理測試用例陨仅,將測試的對象設(shè)置成最小的單元津滞,方便開發(fā)人員測試

使用場景
測試一些純業(yè)務(wù)邏輯的東西,還有就是網(wǎng)絡(luò)接口返回的數(shù)據(jù)是否符合預(yù)期的判斷

優(yōu)點(diǎn)

統(tǒng)一化管理灼伤,書寫代碼触徐,可以多次的進(jìn)行回歸測試,方便修改狐赡,節(jié)約成本和時間撞鹉,一勞永逸

缺點(diǎn)
缺點(diǎn)是不能和UI交互,屬于TDD類型颖侄,報錯的描述在后面鸟雏,不是特別容易理解,如果是項(xiàng)目轉(zhuǎn)交給新的工程師览祖,可能會費(fèi)比較長的時間去理解測試用例

在TestCase中我們可以寫很多的測試用例孝鹊,可以一次性跑所有的,也可以一個一個來穴墅,可以試想一下惶室,如果有50個網(wǎng)絡(luò)接口温自,或者一些測試的判斷玄货,那么一口氣跑下來,卻都是對的悼泌,那多么的爽歪歪松捉。
具體的內(nèi)容可以參考我的另一篇文章 UITestCase 測試單元的使用

PS:感覺** NSAssertXCTAssert好像啊,語法基本一致馆里,確實(shí)如此隘世,只是他們的使用場景不同,一個是和普通代碼在一起雜糅的寫鸠踪,時時刻刻判斷數(shù)據(jù)丙者,另一個是專門在TestCase類**中去判斷數(shù)據(jù)或者對象是否符合自己的預(yù)期。

3.WIKI(屬于BDD)

什么是WIKI营密?
WIKI是ios測試的開源庫械媒,測試用例都遵循三段式Given-When-Then的描述,清晰地表達(dá)測試用例是測試什么樣的對象或數(shù)據(jù)結(jié)構(gòu)评汰,在基于什么上下文或情景纷捞,然后做出什么響應(yīng),報錯的描述在前邊被去,然后才是具體的邏輯判斷主儡,寫完之后,就像是讀一個句子一樣惨缆,非常的方便糜值,即使項(xiàng)目交給新的工程師丰捷,他們也會非常快速的接手測試

使用場景
應(yīng)該是測試Case中

優(yōu)點(diǎn)
統(tǒng)一化管理臀玄,書寫代碼瓢阴,可以多次的進(jìn)行回歸測試,方便修改健无,節(jié)約成本和時間荣恐,而且寫完之后,堆起來行云流水累贤,轉(zhuǎn)交給新的測試人員叠穆,也可以很快的入手,方便后期的維護(hù)測試臼膏。2.語法簡單硼被,功能強(qiáng)大,

缺點(diǎn)
語法全面渗磅,但是問題是語句太多了嚷硫,造成寫的東西比較多

describe(@"Team", ^{
    context(@"when newly created", ^{
        it(@"should have a name", ^{
            id team = [Team team];
            [[team.name should] equal:@"Black Hawks"];
        });

        it(@"should have 11 players", ^{
            id team = [Team team];
            [[[team should] have:11] players];
        });
    });
});
3.WIKI(屬于BDD)

什么是WIKI?
WIKI是ios測試的開源庫始鱼,測試用例都遵循三段式Given-When-Then的描述仔掸,清晰地表達(dá)測試用例是測試什么樣的對象或數(shù)據(jù)結(jié)構(gòu),在基于什么上下文或情景医清,然后做出什么響應(yīng)起暮,報錯的描述在前邊,然后才是具體的邏輯判斷会烙,寫完之后负懦,就像是讀一個句子一樣,非常的方便柏腻,即使項(xiàng)目交給新的工程師纸厉,他們也會非常快速的接手測試

使用場景
應(yīng)該是測試Case中

優(yōu)點(diǎn)
統(tǒng)一化管理五嫂,書寫代碼颗品,可以多次的進(jìn)行回歸測試,方便修改贫导,節(jié)約成本和時間抛猫,而且寫完之后,堆起來行云流水孩灯,轉(zhuǎn)交給新的測試人員闺金,也可以很快的入手,方便后期的維護(hù)測試峰档。2.語法簡單败匹,功能強(qiáng)大寨昙,

缺點(diǎn)
語法全面,但是問題是語句太多了掀亩,造成寫的東西比較多

4.GH+Unit

GH+Unit
一套可視化測試框架舔哪,可以在手機(jī),或者電腦的控制臺看到打印槽棍,更加人性化的服務(wù)

使用場景
應(yīng)該是測試Case中

優(yōu)點(diǎn)
GUI開發(fā)捉蚤,可以一目了然看到項(xiàng)目中測試了什么項(xiàng)目,那些項(xiàng)目測試了炼七,那些項(xiàng)目還沒有測試缆巧!

缺點(diǎn)
沒有過,我哪知道


Android篇*

以下是幾種比較靠譜的測試框架

  • 1.NSAssert (斷言豌拙,和普通代碼在一起書寫)
  • 2.WIKI,是從行為的角度思考問題陕悬。測試用例都遵循三段式Given-When-Then的描述,清晰地表達(dá)測試用例是測試什么樣的對象或數(shù)據(jù)結(jié)構(gòu)按傅,在基于什么上下文或情景捉超,然后做出什么響應(yīng)。
  • 3.XCTest(Unit Test)(又稱為模塊測試, Unit Testing)單元測試非常適合用來做 app 的邏輯以及網(wǎng)絡(luò)接口方面的測試,Xcode提供單元測試的是從測試的角度思考問題
  • 4.比如專注于提供 Mock 和 Stub 的 OCMock(建議使用GHUnit + OCMock組合進(jìn)行單元測試)
  • 5.UITest

具體的使用方法和介紹

1.NSAssert(斷言)

什么是斷言唯绍?
程序運(yùn)行時防止某些數(shù)據(jù)不符合預(yù)期拼岳,直接在使用數(shù)據(jù)的時候,對他用斷言判斷一下推捐,保證數(shù)據(jù)的正確性

使用場景
在程序的任何位置裂问,只要是對任何數(shù)據(jù)或者對象的懷疑侧啼,就可以對他們進(jìn)行斷言判斷(只在debug模式開啟牛柒,release默認(rèn)關(guān)閉)

優(yōu)點(diǎn)
和程序同步,當(dāng)開發(fā)和測試人員使用app的時候痊乾,走到程序的任何位置皮壁,都時刻有斷言給你保證你所使用的數(shù)據(jù)是符合你預(yù)期的,如有違背哪审,直接就崩潰提醒蛾魄,簡單粗暴

當(dāng)你要去使用一個變量的時候,你害怕他不對或者為空湿滓,通常你會判斷一下

    GEUser * user =[GEUserTool userInfo];
    if (user.Token.length) {
        NSLog(@"用戶的token不為空");
    }

這是我們正常的使用過程滴须,沒問題。如果測試測完了叽奥,說對扔水,這很好,當(dāng)下一個版本的時候朝氓,我們突然改動了些東西魔市,這個位置的token為空了主届,測試又走到這里,沒注意到無打印待德,那么這個隱藏的bug就這樣放著君丁,一直不會發(fā)現(xiàn)。我舉得例子是比較小的将宪,如果是個大的bug绘闷,測試忘了回歸測試,責(zé)任是很大的较坛,所以簸喂,為了保險起見,我們可以使用斷言燎潮,哪怕測試沒有發(fā)現(xiàn)喻鳄,我們可以自定義的對錯誤做一個處理(自定義直接崩潰或者打印輸出)!

    GEUser * user =[GEUserTool userInfo];
    NSAssert(user.Token.length != 0, @"用戶的token不能是空的");
    if (user.Token.length) {
        NSLog(@"用戶的token不為空");
    }

如果是這個樣子确封,及時測試人員沒有測試出來除呵,系統(tǒng)會自動奔潰,打印出出錯的斷言的位置爪喘,方便我們調(diào)試颜曾,給開發(fā)人員和測試人員提供了諸多便利,具體內(nèi)容請到我的另一篇文章看看詳情.

2.UintTest(單元測試秉剑,屬于TDD)

什么是單元測試泛豪?
蘋果親兒子,直接在app的UITestCase類中測試業(yè)務(wù)邏輯侦鹏,集中化管理測試用例诡曙,將測試的對象設(shè)置成最小的單元,方便開發(fā)人員測試

使用場景
測試一些純業(yè)務(wù)邏輯的東西略水,還有就是網(wǎng)絡(luò)接口返回的數(shù)據(jù)是否符合預(yù)期的判斷

優(yōu)點(diǎn)

統(tǒng)一化管理价卤,書寫代碼,可以多次的進(jìn)行回歸測試渊涝,方便修改慎璧,節(jié)約成本和時間,一勞永逸

缺點(diǎn)
缺點(diǎn)是不能和UI交互跨释,屬于TDD類型胸私,報錯的描述在后面,不是特別容易理解鳖谈,如果是項(xiàng)目轉(zhuǎn)交給新的工程師岁疼,可能會費(fèi)比較長的時間去理解測試用例

在TestCase中我們可以寫很多的測試用例,可以一次性跑所有的蚯姆,也可以一個一個來五续,可以試想一下洒敏,如果有50個網(wǎng)絡(luò)接口,或者一些測試的判斷疙驾,那么一口氣跑下來凶伙,卻都是對的,那多么的爽歪歪它碎。
具體的內(nèi)容可以參考我的另一篇文章 UITestCase 測試單元的使用

PS:感覺** NSAssertXCTAssert好像啊函荣,語法基本一致,確實(shí)如此扳肛,只是他們的使用場景不同傻挂,一個是和普通代碼在一起雜糅的寫,時時刻刻判斷數(shù)據(jù)挖息,另一個是專門在TestCase類**中去判斷數(shù)據(jù)或者對象是否符合自己的預(yù)期金拒。

3.WIKI(屬于BDD)

什么是WIKI?
WIKI是ios測試的開源庫套腹,測試用例都遵循三段式Given-When-Then的描述绪抛,清晰地表達(dá)測試用例是測試什么樣的對象或數(shù)據(jù)結(jié)構(gòu),在基于什么上下文或情景电禀,然后做出什么響應(yīng)幢码,報錯的描述在前邊,然后才是具體的邏輯判斷尖飞,寫完之后症副,就像是讀一個句子一樣,非常的方便政基,即使項(xiàng)目交給新的工程師贞铣,他們也會非常快速的接手測試

使用場景
應(yīng)該是測試Case中

優(yōu)點(diǎn)
統(tǒng)一化管理腋么,書寫代碼咕娄,可以多次的進(jìn)行回歸測試亥揖,方便修改珊擂,節(jié)約成本和時間,而且寫完之后费变,堆起來行云流水摧扇,轉(zhuǎn)交給新的測試人員,也可以很快的入手挚歧,方便后期的維護(hù)測試扛稽。2.語法簡單,功能強(qiáng)大滑负,

缺點(diǎn)
語法全面在张,但是問題是語句太多了用含,造成寫的東西比較多

describe(@"Team", ^{
    context(@"when newly created", ^{
        it(@"should have a name", ^{
            id team = [Team team];
            [[team.name should] equal:@"Black Hawks"];
        });

        it(@"should have 11 players", ^{
            id team = [Team team];
            [[[team should] have:11] players];
        });
    });
});
3.WIKI(屬于BDD)

什么是WIKI?
WIKI是ios測試的開源庫帮匾,測試用例都遵循三段式Given-When-Then的描述啄骇,清晰地表達(dá)測試用例是測試什么樣的對象或數(shù)據(jù)結(jié)構(gòu),在基于什么上下文或情景瘟斜,然后做出什么響應(yīng)缸夹,報錯的描述在前邊,然后才是具體的邏輯判斷螺句,寫完之后虽惭,就像是讀一個句子一樣,非常的方便蛇尚,即使項(xiàng)目交給新的工程師芽唇,他們也會非常快速的接手測試

使用場景
應(yīng)該是測試Case中

優(yōu)點(diǎn)
統(tǒng)一化管理取劫,書寫代碼披摄,可以多次的進(jìn)行回歸測試,方便修改勇凭,節(jié)約成本和時間疚膊,而且寫完之后,堆起來行云流水虾标,轉(zhuǎn)交給新的測試人員寓盗,也可以很快的入手,方便后期的維護(hù)測試璧函。2.語法簡單傀蚌,功能強(qiáng)大,

缺點(diǎn)
語法全面蘸吓,但是問題是語句太多了善炫,造成寫的東西比較多

4.GH+Unit

GH+Unit
一套可視化測試框架,可以在手機(jī)库继,或者電腦的控制臺看到打印箩艺,更加人性化的服務(wù)

使用場景
應(yīng)該是測試Case中

優(yōu)點(diǎn)
GUI開發(fā),可以一目了然看到項(xiàng)目中測試了什么項(xiàng)目宪萄,那些項(xiàng)目測試了艺谆,那些項(xiàng)目還沒有測試!

缺點(diǎn)
沒有過拜英,我哪知道


網(wǎng)球家客戶端要解決的問題

1.如何確定后臺幾十個接口返回數(shù)據(jù)是否符合我們的預(yù)期?
推薦使用 XCTest,(有異步處理的方法)静汤,或者使用WIKI

2.如何在項(xiàng)目中可以一直監(jiān)視著系統(tǒng)的各種數(shù)據(jù)的正確性?
推薦使用NSAssert,在項(xiàng)目中的任何位置都可以隨時監(jiān)聽數(shù)據(jù)的正確性虫给,一旦和預(yù)期數(shù)據(jù)不同藤抡,我們可以打印,或者直接使項(xiàng)目崩潰

3.如何對UI界面用戶操作做回歸測試抹估?
在iOS的框架中杰捂,UITest專門做UI層面的測試,可以多次回歸棋蚌,但是目前這種技術(shù)并不是特別的靠譜


寫在最后
最后那嫁佳,推薦一下onevcat(VVDocument的作者)關(guān)于測試的兩篇文章,寫的非常棒谷暮!
1.TDD的iOS開發(fā)初步以及Kiwi使用入門
2.Kiwi 使用進(jìn)階 Mock, Stub, 參數(shù)捕獲和異步測試

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蒿往,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子湿弦,更是在濱河造成了極大的恐慌瓤漏,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颊埃,死亡現(xiàn)場離奇詭異蔬充,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)班利,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門饥漫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人罗标,你說我怎么就攤上這事庸队。” “怎么了闯割?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵彻消,是天一觀的道長。 經(jīng)常有香客問我宙拉,道長宾尚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任谢澈,我火速辦了婚禮煌贴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘澳化。我一直安慰自己崔步,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布缎谷。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪列林。 梳的紋絲不亂的頭發(fā)上瑞你,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機(jī)與錄音希痴,去河邊找鬼者甲。 笑死,一個胖子當(dāng)著我的面吹牛砌创,可吹牛的內(nèi)容都是我干的虏缸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嫩实,長吁一口氣:“原來是場噩夢啊……” “哼刽辙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起甲献,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤宰缤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后晃洒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慨灭,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年球及,在試婚紗的時候發(fā)現(xiàn)自己被綠了氧骤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡吃引,死狀恐怖语淘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情际歼,我是刑警寧澤惶翻,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站鹅心,受9級特大地震影響吕粗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旭愧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一颅筋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧输枯,春花似錦议泵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春碉京,著一層夾襖步出監(jiān)牢的瞬間厢汹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工谐宙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烫葬,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓凡蜻,卻偏偏與公主長得像搭综,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子划栓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理兑巾,服務(wù)發(fā)現(xiàn),斷路器茅姜,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 關(guān)于iOS的UI自動化測試闪朱,是從Xcode7之后才支持的比較好,使用XCTest.framework钻洒,Xcode可...
    房小房MT閱讀 5,240評論 4 13
  • 前言 如果有測試大佬發(fā)現(xiàn)內(nèi)容不對奋姿,歡迎指正,我會及時修改素标。 大多數(shù)的iOS App(沒有持續(xù)集成)迭代流程是這樣的...
    默默_David閱讀 1,673評論 0 4
  • 大多數(shù)的iOS App (沒有持續(xù)集成)迭代流程是這樣的: 也就是說称诗,測試是發(fā)布之前的最后一道關(guān)卡。如果bug不能...
    伯牙呀閱讀 4,893評論 1 22
  • 文章來自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鵬閱讀 9,192評論 2 126