版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第第頁現(xiàn)在開始把UITesting用起來!現(xiàn)在開始把UITesting用起來!
發(fā)表于:2023-06-01來源:不詳:iHugo點擊數(shù):標簽:Testing
一直很關(guān)注自動化測試,因為手動進行測試很枯燥,而且容易遺漏相關(guān)測試。蘋果在Xcode7中引入了UITesting,目前使用起來感覺良好。
一直很關(guān)注(自動化)(測試),因為手動進行(測試)很枯燥,而且容易遺漏相關(guān)測試。蘋果在Xcode7中引入了UITesting,目前使用起來感覺良好。
UI測試并不是什么新鮮的東西。在過去我們一直在手動的進行UI測試,在運行中的App上進行操作并驗證有沒有問題。如果一個(測試(用例))反復的進行手動測試是很枯燥的一件事情。所以就有人想出了利用計算機來做這些枯燥的工作。
UI(自動化測試)就是讓計算機以用戶角度自動化地進行測試,然后給出測試結(jié)果。
優(yōu)秀的程序員可能會有編寫(單元測試)的習慣。(單元測試)一般是由程序員針對某一塊代碼進行編寫,用來驗證代碼邏輯是否正確。編寫起來比較直接。
UI測試由于要以用戶角度進行測試,所以編寫起來不是那么直接,需要切換思考角度。
一些測試框架的對比。
框架地址語言派系TuneupJs/vkolgi/tuneup_js(Java)ScriptUIAutomationynm3k/douban/ynm3kJavaScriptUIAutomationiOSDriverhttp://ios-driver.github.io/ios-driver/index.htmlJavaUIAutomationAppiumhttp://appium.io多語言支持UIAutomationKIF/kif-framework/KIFObjective-C,Swift私有api型Frank/index.htmlCucumber注入編譯型Calabashhttp://calaba.shCucumber,Ruby注入編譯型XCTest/xcode/features/cn/Objective-C,SwiftXCTestEarlGrey/google/EarlGreyObjective-C,SwiftXCTestUIAutomation是Xcode7之前在iOSInstrument中的一個工具??梢跃帉懀╦ava)script腳本供UIAutomation調(diào)用來對UI進行測試。但是Xcode7之后這個就被UITesting替代了。
上面表格中UIAutomation系的UI測試框架,因為和Xcode整合的并不好,使用起來并不方便。而且需要使用javascrip去編寫測試腳本,增加了學習成本。所以pass掉。
KIF由于使用了私有API,導致每次SDK升級KIF都可能需要大量修改代碼,來適應新版本。個人覺得如果沒有xctest這個框架那么它是比較好的選擇。
Frank,Calabash這是由兩個個著名提供敏捷咨詢公司維護的,但是也要額外學習語言,增加了學習成本。并且代碼沒有(開源),所以還是放棄吧。
還有谷歌的EarlGrey這個框架我還沒有使用過,暫時不考慮。
最后我選擇了XCTest框架。Apple在Xcode7中新加入了一套UITesting的工具,其目的就是解決自動化UI測試這個問題。新的UITesting比以往的解決方案要簡單不少,特別是在創(chuàng)建測試用例的時候更集成了錄制的功能,這有希望讓UITesting變得更為普及。
UITesting和XCode整合的也比較好,能直接在Xcode中運行測試,也可以在命令行下進行測試,這就使得在持續(xù)集成中有了用武之地。同時相比使用Instruments中的UIAutomation調(diào)用JavaScript腳本與app交互,我們現(xiàn)在可以用Swift或者Objective-C直接在Xcode里編寫和運行UI測試。
為什么用UI自動化測試?站在用戶角度幫助我們理解(需求)
UI測試需要模擬用戶操作對App進行測試。所以我們能借此來梳理一遍需求。
減少修改代碼引入的(bug)
一直以來我們都是手動的進行UI測試。每次對代碼有改動,我們就會對受影響的界面手動進行UI測試。但是我們往往會忽略其他相關(guān)UI的測試。
減少測試工作量,增加測試效率。
一遍一遍過UI測試用例是很枯燥的事情,如果能讓計算機去做重復的事情能極大的解放我們的雙手,增加測試效率。另外在持續(xù)集成過程中,我們能進行測試保證代碼的正確性。
增加測試緯度
可能有的同學已經(jīng)比較習慣編寫單元測試了。我們常常會用單元測試來進行邏輯測試。增加了自動化UI測試,就會增加一個測試緯度,從用戶角度對UI進行測試。
使用UITesting時有一個附加的好處:測試輔助功能
之所以能使用UITesting進行UI測試,有一個幕后英雄"Accessibility'。Accessibility這個是給殘疾人士提供服務的一個功能。比如通過它盲人能聽到機器朗讀視圖內(nèi)容,從而可以像正常人一樣使用app。其實我們的計算機也是比較"殘疾'(智商不高)的,所以正好利用這個功能,可以讀取到UI的內(nèi)容。我們在使用UITesting進行測試的同時也對App的輔助功能進行了測試,一舉兩得。:)
如何使用UITesting?Talkischeap.Showmethecode.
到了實戰(zhàn)的環(huán)節(jié)了。我會先通過一個例子來簡單的介紹下UITesting。然后會對UITesing的具體使用進行介紹。本來還有一個實戰(zhàn)的,但是使用的公司項目就刪掉了。我怕公司紅線啊。:)
登陸Demo的UI自動化測試
這個demo的源碼您能在這里(下載)到。你可以(下載)干凈的源碼然后跟著下面的內(nèi)容一起來體驗下UITesting的魅力。如果你想直接看看效果請點擊這里下載。
UITesingDemo.png
你可以點擊這里觀看(視頻)演示。
Demo介紹
這個app很簡單。只有一個用戶名輸入框、密碼輸入框和一個登錄按鈕。用戶輸入用戶名和密碼之后可以點擊登錄按鈕進行登錄。登錄成功會彈出成功的提示。
demo.png
開始測試
這是我們編寫的一個登錄的測試用例。
用例名:登錄前置條件:無后置條件:無步驟:1.輸入用戶名abc2.輸入密碼1233.點擊登錄按鈕期待結(jié)果:彈出登錄成功對話框首先我們添加一個Target。
addtarget.png
然后增加一個函數(shù)叫l(wèi)oginSuccess。我們把鼠標光標放在函數(shù)體內(nèi)。點擊左下角的紅色圓圈開始錄制。這個時候我們可以正常操作,等操作完成之后。點擊停止錄制按鈕結(jié)束錄制。
錄制測試過程.png
這個是錄制好的代碼。
functestLoginSuccess(){letapp=XCUIApplication()app.textFields[name].tap()app.textFields[name]letpasswordTextField=app.textFields[password]passwordTextField.tap()passwordTextField.tap()app.textFields[password]app.buttons[Login].tap()letsuccessAlert=app.alerts[success]successAlert.staticTexts[success].tap()successAlert.collectionViews.buttons[OK].tap()}接下來我們修改下代碼。
functestLoginSuccess(){letapp=XCUIApplication()app.textFields[name].tap()app.textFields[name].typeText(abc)app.textFields[password].tap()app.textFields[password].typeText(123)app.buttons[Login].tap()letsuccessAlert=app.alerts[success]letexists=NSPredicate(format:exists==true)expectationForPredicate(exists,evaluatedWithObject:successAlert,handler:nil)waitForExpectationsWithTimeout(5,handler:nil)XCTAssert(successAlert.exists)}改寫完成之后,我們按住cmd+u就可以開始測試了。也可以在左側(cè)的視圖選中(測試方法)進行測試。
選擇測試.png
測試完成之后我們能在這里看到測試結(jié)果。
測試結(jié)果.png
測試的一些日志能在這里找到。包括一些測試失敗的原因還有截圖信息。
測試日志.png
UITesting
測試某個元素是否存在
XCTAssert(app.staticTexts[Welcome].exists)等待元素出現(xiàn)
letgoLabel=self.app.staticTexts[Go!]XCTAssertFalse(goLabel.exists)letexists=NSPredicate(format:exists==true)expectationForPredicate(exists,evaluatedWithObject:goLabel,handler:nil)app.buttons[Ready,set...].tap()waitForExpectationsWithTimeout(5,handler:nil)XCTAssert(goLabel.exists)點擊按鈕
app.buttons[Add].tap()輸入文字
lettextField=app.textFields[Username]textField.tap()textField.typeText(joemasilotti)取消警告提示框
app.alerts[AlertTitle].buttons[ButtonTitle].tap()處理系統(tǒng)的提示框
addUIInterruptionMonitorWithDescription(LocationServices){(alert)-Boolinalert.buttons[Allow].tap()returntrue}app.buttons[RequestLocation].tap()app.tap()//needtointeractwiththeappagainforthehandlertofireUISlider
app.sliders.element.adjustToNormalizedSliderPosition(0.7)UIPickerView
app.pickerWheels.element.adjustToPickerWheelValue(PickerWheelItemTitle)有多個section的UIPickerView操作。
letfirstPredicate=NSPredicate(format:labelBEGINSWITHFirstPicker)letfirstPicker=app.pickerWheels.elementMatchingPredicate(firstPredicate)firstPicker.adjustToPickerWheelValue(firstvalue)letsecondPredicate=NSPredicate(format:labelBEGINSWITHSecondPicker)letsecondPicker=app.pickerWheels.elementMatchingPredicate(secondPredicate)secondPicker.adjustToPickerWheelValue(secondvalue)點擊(web)view的超鏈接
app.links[Tweetthis].tap()驗證視圖控制題的標題
XCTAssert(app.navigationBars[Details].exists)移動TabviewCell
lettopButton=app.buttons[ReorderTopCell]letbottomButton=app.buttons[ReorderBottomCell]bottomButton.pressForDuration(0.5,thenDragToElement:topButton)XCTAssertLessThanOrEqual(bottomButton.frame.maxY,topButton.frame.minY)下拉刷新
letfirstCell=a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 臨床微生物檢驗標本的采集課件
- 2024版國際貿(mào)易合同履行稅務籌劃服務協(xié)議2篇
- 俄語跨文化交際知到智慧樹章節(jié)測試課后答案2024年秋山東外國語職業(yè)技術(shù)大學
- 2025年度廠房租賃合同書(含設(shè)施設(shè)備維護責任)2篇
- 大數(shù)據(jù)分析服務租賃合同文本
- 城市人工打水井施工合同
- 湖景別墅交易合同模板
- 建筑排水勞務分包協(xié)議模板
- 醫(yī)療技術(shù)推廣協(xié)議
- 2024碼頭安全防范與應急救援服務合同范本3篇
- 初二家長會課件下載
- 能源崗位招聘筆試題及解答(某大型國企)2024年
- 浙江省杭州市西湖區(qū)2023-2024學年九年級上學期期末語文試題(解析版)
- 人員車輛物品進出管理考核試卷
- 高三沖刺畢業(yè)家長會課件2024-2025學年
- 山區(qū)道路安全駕駛
- 小學四年級數(shù)學思維訓練應用題100道及答案解析
- 二年級乘加乘減口算100題
- 《論語》導讀(復旦版)學習通超星期末考試答案章節(jié)答案2024年
- 營運經(jīng)理招聘筆試題與參考答案2024年
- DB3301∕T 65.28-2024 反恐怖防范系統(tǒng)管理規(guī)范 第28部分:硬質(zhì)隔離設(shè)施
評論
0/150
提交評論