本文章轉(zhuǎn)載于搜狗測試
說完了UITest和Appium我們這次來介紹一下忍宋,被廣泛認可的一個三方的UI測試框架KIF汤求。
KIF是一個開源的專為iOS設(shè)計的移動應(yīng)用測試框架,使用Objective-C語言開發(fā),能和應(yīng)用的代碼工程完美結(jié)合。
它是使用私有API對UI界面進行操作的自動化測試框架贪磺,這種類型的測試框架已大行其道,非常受歡迎诅愚,KIF就是其中出色的一個寒锚,同時,KIF還繼承了XCTest违孝,很多大的軟件公司比如Google都在用這個測試框架刹前。可見雌桑,KIF的認可度還是蠻高的喇喉。
下面小編帶著大家來簡述一下KIF在使用過程中的優(yōu)缺點,進而大概的了解一下這個框架的工作方式和功能特點
優(yōu)點:
(1) 繼承XCTest校坑,UI測試可以和白盒測試相結(jié)合 (這點跟UITest比較像)
(2) 適合做持續(xù)集成 (持續(xù)集成一直被測試的發(fā)展之路拣技,所以一個能做可持續(xù)集成的框架衅鹿,生命力將會很頑強)
(3) 開源 (這是我最喜歡它的一個重要因素,對于一個開發(fā)者來說过咬,一個開源的項目是一個非常幸福的事情)
(4) 單用例調(diào)試大渤,編碼調(diào)試輕松愉快 (因為集成自XCTest,所以在xcode中調(diào)試掸绞,能輕松實現(xiàn)單個用例調(diào)試)
當(dāng)然 KIF的有點很明確泵三,缺點也是相當(dāng)明確。
缺點:
(1) 需要被測試工程源碼 (這對于外包公司的人來說衔掸,或者說對于一個代碼要求嚴(yán)格的公司來說烫幕,這無疑是一個沉重的打擊)
(2) 對自定義的控件支持不好 (這個應(yīng)該不用做太多解釋)
(3) 不支持UIWebView (其實這個缺點應(yīng)該影響不大,大多數(shù)框架對UIWebView的支持都不太好)
(4) 測試框架和被測試app在同一進程敞映,測試框架的問題可能會影響被測試app (這個缺點有可能被開發(fā)質(zhì)疑较曼,有的時候出現(xiàn)問題,開發(fā)會認為是你的測試代碼有問題振愿,所以做好心理準(zhǔn)備捷犹,和要對自己的代碼有自信)
適用場景:
(1) 較為復(fù)雜的UI測試或者是UI測試和白盒測試相結(jié)盒的測試
測試代碼:
配置
(1) 下載好KIF框架工程文件后,把KIF.xcodeproj文件拉進被測試工程里
(2) 新建一個測試target冕末,點“Add Target”萍歉,選擇iOS -> Test -> iOS Unit Testing Bundle。
(3) 對于這個target,把KIF里的靜態(tài)庫libKIF.a和系統(tǒng)的IOKit.framework和它關(guān)聯(lián)
(4) 對于這個target档桃,在Build Settings中的Other Linker Flags選項加一個值-ObjC
(5) 可以編寫測試用例了枪孩,有兩個重要的KIF測試類KIFTestCase(XCTestCase的子類)以及KIFUITestActor,看名字就知道哪個是做什么事的了藻肄。
執(zhí)行操作
首先說明一下蔑舞,KIF的UI控件操作和獲取都是封裝在一起的,每個接口里都包含了以什么屬性獲取控件嘹屯,以及對這個控件執(zhí)行什么操作兩個部分攻询。所以就沒有獲取控件這個部分的說明了。也因為這個原因抚垄,KIF的操作接口會非常的多蜕窿,這里列舉幾個常用的。
(1)點擊某個位置
tapScreenAtPoint:(CGPoint)screenPoint
(2) 點擊以label命名的控件
tapViewWithAccessibilityLabel:(NSString )label
(3) 長按以label命名的控件呆馁,時間長為duration
longPressViewWithAccessibilityLabel:(NSString)label duration:(NSTimeInterval)duration;
(4) 在一個控件里輸入一段字符
enterText:(NSString)text intoViewWithAccessibilityLabel:(NSString *)label
(5) 滑動某個控件
swipeViewWithAccessibilityLabel:(NSString)label inDirection:(KIFSwipeDirection)direction
驗證機制
(1) UI層面
if(tryFindingViewWithAccessibilityLabel:”label” error:error)
{ //test pass}
else { //test fail}
(2) 非UI層面
由于是繼承XCTest的桐经,所以XCTest所具有的那些斷言在KIF里都是可以通用的。共有18個浙滤。
XCTFail(format…) 生成一個失敗的測試阴挣;
XCTAssertNil(a1, format…)為空判斷,a1為空時通過纺腊,反之不通過畔咧;
XCTAssertNotNil(a1, format…)不為空判斷茎芭,a1不為空時通過,反之不通過誓沸;
XCTAssert(expression, format…)當(dāng)expression求值為TRUE時通過梅桩;
XCTAssertTrue(expression, format…)當(dāng)expression求值為TRUE時通過;
XCTAssertFalse(expression, format…)當(dāng)expression求值為False時通過拜隧;
XCTAssertEqualObjects(a1, a2, format…)判斷相等宿百,[a1 isEqual:a2]值為TRUE時通過,其中一個不為空時洪添,不通過垦页;
XCTAssertNotEqualObjects(a1, a2, format…)判斷不等,[a1 isEqual:a2]值為False時通過干奢;
XCTAssertEqual(a1, a2, format…)判斷相等(當(dāng)a1和a2是 C語言標(biāo)量痊焊、結(jié)構(gòu)體或聯(lián)合體時使用,實際測試發(fā)現(xiàn)NSString也可以);
XCTAssertNotEqual(a1, a2, format…)判斷不等(當(dāng)a1和a2是 C語言標(biāo)量忿峻、結(jié)構(gòu)體或聯(lián)合體時使用)薄啥;
XCTAssertEqualWithAccuracy(a1, a2, accuracy, format…)判斷相等,(double或float類型)提供一個誤差范圍炭菌,當(dāng)在誤差范圍(+/-accuracy)以內(nèi)相等時通過測試罪佳;
XCTAssertNotEqualWithAccuracy(a1, a2, accuracy, format…) 判斷不等逛漫,(double或float類型)提供一個誤差范圍黑低,當(dāng)在誤差范圍以內(nèi)不等時通過測試
XCTAssertThrows(expression,format…)異常測試,當(dāng)expression發(fā)生異常時通過酌毡;反之不通過克握;(很變態(tài)
XCTAssertThrowsSpecific(expression, specificException, format…) 異常測試,當(dāng)expression發(fā)生specificException異常時通過枷踏;反之發(fā)生其他異称邪担或不發(fā)生異常均不通過;
XCTAssertThrowsSpecificNamed(expression, specificException, exception_name, format…)異常測試旭蠕,當(dāng)expression發(fā)生具體異常停团、具體異常名稱的異常時通過測試,反之不通過掏熬;
XCTAssertNoThrow(expression, format…)異常測試佑稠,當(dāng)expression沒有發(fā)生異常時通過測試;
XCTAssertNoThrowSpecific(expression, specificException, format…)異常測試旗芬,當(dāng)expression沒有發(fā)生具體異常舌胶、具體異常名稱的異常時通過測試,反之不通過疮丛;
XCTAssertNoThrowSpecificNamed(expression, specificException, exception_name, format…)異常測試幔嫂,當(dāng)expression沒有發(fā)生具體異常辆它、具體異常名稱的異常時通過測試,反之不通過
KIF就介紹到這里履恩,不知道大家的感悟怎么樣锰茉,是不是有了一種別樣的體會呢?