用戶界面測試

User Interface Testing
UI測試使您能夠查找應(yīng)用程序的UI并與其進(jìn)行交互璧瞬,以驗(yàn)證UI元素的屬性和狀態(tài)醇蝴。

UI測試包括UI錄制芝发,這使您能夠以與您所做的相同的方式生成演示應(yīng)用程序UI的代碼贡茅,以及可以展開以實(shí)施UI測試谊路。這是快速開始編寫UI測試的好方法。

增強(qiáng)了測試報(bào)告囱挑,以提供有關(guān)UI測試的詳細(xì)信息醉顽,包括測試失敗時(shí)UI狀態(tài)的快照。

UI測試依賴于兩個(gè)核心技術(shù):XCTest框架和輔助功能平挑。

  • XCTest提供與Xcode集成的UI測試功能的框架游添。創(chuàng)建和使用UI測試擴(kuò)展了您對使用XCTest和創(chuàng)建單元測試的了解。您創(chuàng)建一個(gè)UI測試目標(biāo)通熄,創(chuàng)建的UI測試類和UI測試方法唆涝,將作為項(xiàng)目的一部分。您使用XCTest斷言來驗(yàn)證預(yù)期結(jié)果是否正確棠隐。您還可以通過Xcode和XcodeBuild進(jìn)行持續(xù)集成石抡。XCTest與Objective-C和swift完全兼容。
  • 輔助功能是允許殘疾用戶與其他用戶接收的iOS和MacOS的相同的豐富體驗(yàn)的核心技術(shù)助泽。它包含一組豐富的關(guān)于UI的語義數(shù)據(jù)啰扛,用戶可以通過使用該技術(shù)的您的應(yīng)用程序來引導(dǎo)他們使用。輔助功能與UIKit和AppKit集成在一起嗡贺,并具有API隐解,可讓您微調(diào)行為以及外部使用的內(nèi)容。UI測試使用該數(shù)據(jù)來執(zhí)行其功能诫睬。

在源代碼中創(chuàng)建UI測試類似于創(chuàng)建單元測試煞茫。為您的應(yīng)用程序創(chuàng)建一個(gè)UI測試目標(biāo);那么Xcode將實(shí)現(xiàn)文件中使用示例測試方法模板為您創(chuàng)建一個(gè)默認(rèn)的UI測試組合實(shí)現(xiàn)文件摄凡。創(chuàng)建UI測試目標(biāo)時(shí)续徽,您可以指定測試將要處理的應(yīng)用程序。

UI測試的工作原理是通過一個(gè)應(yīng)用程序的UI對象進(jìn)行查詢亲澡,合成事件并將其發(fā)送到這些對象钦扭,并提供豐富的api,使您能夠檢查UI對象的屬性和狀態(tài)床绪,將其與預(yù)期狀態(tài)進(jìn)行比較客情。

要求

UI測試取決于開發(fā)工具中和在操作系統(tǒng)平臺上的服務(wù)和AP。您將需要Xcode 7癞己,macOS 10.11和iOS 9(或更高版本)膀斋。UI測試保護(hù)隱私:

  • 需要啟動iOS設(shè)備進(jìn)行開發(fā)并連接到受信任的主機(jī)。
  • macOS需要授予特殊的Xcode Helper應(yīng)用程序的權(quán)限痹雅。您首次使用UI測試時(shí)仰担,會自動提示您。

需要啟動iOS設(shè)備進(jìn)行開發(fā)并連接到受信任的主機(jī)绩社。macOS需要授予特殊Xcode Helper應(yīng)用程序的權(quán)限(首次使用時(shí)自動提示)惰匙。

概念和API

UI測試和單元測試的基本方法不同技掏。單元測試使您能夠在應(yīng)用程序的范圍內(nèi)工作铃将,并允許您通過完全訪問應(yīng)用程序的變量和狀態(tài)和執(zhí)行功能和方法项鬼。UI測試以與用戶無關(guān)的應(yīng)用程序的內(nèi)部方法,函數(shù)和變量相同的方法執(zhí)行應(yīng)用程序的UI劲阎。這使您的測試能夠以與用戶相同的方式查看應(yīng)用程序绘盟,從而暴露用戶遇到的UI問題。

您的測試代碼作為一個(gè)單獨(dú)的工程運(yùn)行悯仙,合成應(yīng)用程序的UI響應(yīng)的事件龄毡。

APIs

UI測試基于三個(gè)新類的實(shí)現(xiàn):

  • XCUIApplication
  • XCUIElement
  • XCUIElementQuery

開始UI錄制

從UI錄制開始。它將元代買生成可以編輯的測試實(shí)現(xiàn)文件中锡垄,以構(gòu)建測試過播放特定的使用場景沦零。UI記錄對于探索新的UI或?qū)W習(xí)如何編寫UI測試序列也很有用。操作的基本步驟是:

  • 1货岭、使用測試導(dǎo)航器創(chuàng)建UI測試目標(biāo)
  • 2路操、在創(chuàng)建的模板文件中,將光標(biāo)置于測試功能中千贯。
  • 3屯仗、開始UI記錄。
    應(yīng)用程序啟動并運(yùn)行搔谴。應(yīng)用程序執(zhí)行一系列UI操作事件魁袜。Xcode將功能的動作捕獲到源代碼中。
  • 4敦第、完成您想要測試的動作后峰弹,停止UI錄制。
  • 5芜果、向生成的源代碼中添加XCTest斷言鞠呈。

寫UI測試

API測試可以具有功能和性能兩個(gè)方面,UI測試也可以师幕。UI測試在應(yīng)用程序的表面空間運(yùn)行粟按,并且傾向于將許多低級功能集成到用戶看到的界面呈現(xiàn)和響應(yīng)中去。

UI測試從根本上對事件和響應(yīng)的級別進(jìn)行操作霹粥。

  • 查找元素灭将。
  • 了解元素的預(yù)期作為參考。
  • 點(diǎn)擊或者是單擊元素以引出響應(yīng)后控。
  • 測量響應(yīng)與通過/失敗結(jié)果的預(yù)期匹配不匹配庙曙。

使用XCTest 創(chuàng)建UI測試是與創(chuàng)建單元測試相同的編程模型的擴(kuò)展。使用類似的操作和編程方法浩淘,差異給出了UI測試API的基本概念以及它們在用戶界面測試中描述的操作方式捌朴。

在測試類結(jié)構(gòu)中吴攒,提供的setup方法包括setUp單元測試類中的兩個(gè)不同之處。

 - (void)setUp {
    
    [super setUp];
 
    //將設(shè)置代碼放在這里砂蔽。在調(diào)用類中的每個(gè)測試方法之前調(diào)用此方法洼怔。
 
    self.continueAfterFailure = NO;
    [[[XCUIApplication alloc] init] launch];
}

該值self.continueAfterFailure被設(shè)置NO為默認(rèn)值。這通常是正確的配置左驾,因?yàn)閁I測試方法中的每個(gè)步驟傾向于依賴于前一個(gè)的成功; 如果一步失敗镣隶,所有以下測試也將失敗。

該setUp方法的另一個(gè)補(bǔ)充是包括創(chuàng)建一個(gè)實(shí)例XCUIApplication并啟動它诡右。UI測試必須啟動他們測試setUp的應(yīng)用程序安岂,并且由于在每個(gè)測試方法之前運(yùn)行,這樣可以確保每個(gè)測試方法都啟動該應(yīng)用程序帆吻。

在編寫UI測試方法時(shí)域那,您應(yīng)該使用UI錄制功能為您的測試創(chuàng)建一組基本步驟。然后猜煮,為了您的目的次员,您可以編輯此基本步驟,使用XCTest斷言提供單元測試中的通過或者失敗結(jié)果友瘤。

UI測試的一般模式的正確性如下:

  • 使用XCUIElementQuery 查找XCUIElement翠肘。
  • 合并事件并將其發(fā)送到XCUIElement。
  • 使用單元來比較XCUIElement的狀態(tài)與預(yù)期的引用狀態(tài)辫秧。
    為了構(gòu)建性能的UI測試束倍,將可重復(fù)的UI序列包裝到measureBlock中,詳情參考編寫測試類和方法盟戏。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绪妹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子柿究,更是在濱河造成了極大的恐慌邮旷,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝇摸,死亡現(xiàn)場離奇詭異婶肩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)貌夕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進(jìn)店門律歼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人啡专,你說我怎么就攤上這事险毁。” “怎么了?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵畔况,是天一觀的道長鲸鹦。 經(jīng)常有香客問我,道長跷跪,這世上最難降的妖魔是什么馋嗜? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮域庇,結(jié)果婚禮上嵌戈,老公的妹妹穿的比我還像新娘。我一直安慰自己听皿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布宽档。 她就那樣靜靜地躺著尉姨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吗冤。 梳的紋絲不亂的頭發(fā)上又厉,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天,我揣著相機(jī)與錄音椎瘟,去河邊找鬼覆致。 笑死,一個(gè)胖子當(dāng)著我的面吹牛肺蔚,可吹牛的內(nèi)容都是我干的煌妈。 我是一名探鬼主播,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼宣羊,長吁一口氣:“原來是場噩夢啊……” “哼璧诵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起仇冯,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤之宿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后苛坚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體比被,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年泼舱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了等缀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,973評論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柠掂,死狀恐怖项滑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤枪狂,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布危喉,位于F島的核電站,受9級特大地震影響州疾,放射性物質(zhì)發(fā)生泄漏辜限。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一严蓖、第九天 我趴在偏房一處隱蔽的房頂上張望薄嫡。 院中可真熱鬧,春花似錦颗胡、人聲如沸毫深。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哑蔫。三九已至,卻和暖如春弧呐,著一層夾襖步出監(jiān)牢的瞬間闸迷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工俘枫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腥沽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓鸠蚪,卻偏偏與公主長得像今阳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子邓嘹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評論 2 361

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