說說 iOS 自動(dòng)化測試那些事

自動(dòng)化測試是什么?

自動(dòng)化測試是指在預(yù)設(shè)條件下運(yùn)行系統(tǒng)或者應(yīng)用程序,評估運(yùn)行結(jié)果,預(yù)先條件包括正常條件和異常條件。---- 摘自《百度百科》

iOS自動(dòng)化測試的目的?

在進(jìn)行版本迭代的過程,開發(fā)同學(xué)和測試同學(xué)都會app進(jìn)行測試,不管對應(yīng)的業(yè)務(wù)在該版本中有沒有發(fā)生變化,只要有新的bug 產(chǎn)生,那么在以后的發(fā)版中又會重新對該bug 進(jìn)行測試,造成了非常多的人力資源浪費(fèi),而且還不高效。

iOS 自動(dòng)化測試的框架

如果您是iOS 開發(fā),相信您一定會關(guān)注每年的WWDC 大會,蘋果自帶的XCTest 是在2015 年 WWDC 上提出來的,而且官方還給出了一個(gè)Demo。如果您感興趣,戳這里https://developer.apple.com/videos/play/wwdc2015/406/
除此之外,也有一些其他的自動(dòng)化測試框架。
  • Frank
  • KIF
  • Calabash
  • Appium
至于這些框架的簡介、優(yōu)缺點(diǎn)等等,網(wǎng)上的資源很多,這里就一筆帶過,用的比較多的是 Appium。筆者嫌棄它配置麻煩,就沒有研究,今天我們主要說說 iOS 自帶的XCTest。

添加執(zhí)行文件

在我們創(chuàng)建一個(gè)項(xiàng)目的時(shí)候,如果需要加入U(xiǎn)I Test,那么就要勾選 Inclide UI Tests 還有一個(gè)是 Inclide Unit Tests 這個(gè)是單元測試(今天暫且不說)。
0.png
如果是現(xiàn)有項(xiàng)目,那么新建一個(gè) Target 就好了。
1.png

相關(guān) API

官方API:https://developer.apple.com/documentation/xctest/xcuielementquery?preferredLanguage=occ 只要花上半天或者一天的時(shí)間就可以將這些API 看完。下面我們說一下常用的一些API。

1、- children?Matching?Type:??查詢所有的直接子代元素, 返回值是一個(gè)新的查詢
2、- descendants?Matching?Type:?? 查詢所有的后代子元素(包括子代元素),返回值是一個(gè)新的查詢
3、matching?Identifier:??根據(jù)標(biāo)識查找后代元素,返回值是一個(gè)新的查詢。使用該方法時(shí),需要在xib 或者代碼中給一個(gè)UI 的accessibilityIdentifier 賦值,否則查詢不到。
4、element 返回一個(gè)查詢的元素, 返回值是一個(gè)元素。
5、- element?Bound?By?Index:?? 根據(jù)下標(biāo)返回查詢結(jié)果中匹配的元素。
6、exists: 判斷元素是否存在。
7、hittable 判斷該元素是否能夠響應(yīng)事件。
8、Typing Text 文本輸入(一般是UITextField 或者 UITextView)
9、tap,doubleTap單擊,雙擊手勢。
10、swipe?Left,swipe?Right,swipe?Up, swipe?Down,上下左右滑動(dòng)等等。

代碼編寫

剛開始的時(shí)候,我們進(jìn)行代碼錄制。在我們的 UITests的.m 文件中,系統(tǒng)會自動(dòng)創(chuàng)建一個(gè)testExample方法。當(dāng)我們點(diǎn)擊錄制按鈕的時(shí)候, Xcode 會根據(jù)用戶的操作在testExample生產(chǎn)相對應(yīng)的代碼。
2.png
通常情況下,自動(dòng)生成的代碼是會報(bào)錯(cuò)的,因?yàn)槲覀兊陌粹o的title,cell 上的內(nèi)容等等都是中文。有兩種方式解決這個(gè)問題。
  • 將對應(yīng)的編碼改成我們對應(yīng)的漢字
  • 將編碼中的\U 改成\u
另外,系統(tǒng)生產(chǎn)的代碼通常情況下是很亂的,需要我們進(jìn)行過濾或者驗(yàn)證一遍,有時(shí)候甚至?xí)a(chǎn)一些錯(cuò)誤的代碼,這個(gè)時(shí)候就需要我們進(jìn)行調(diào)試和修改。這里給出一個(gè)Example。
- (void)testLogin {
  for (int i = 0; i < self.names.count; i++) {
      XCUIElement *textFieldUser = self.app.textFields[@"用戶名"];
      [textFieldUser tap];
      [self.app.buttons[@"Clear text"] tap];
      [textFieldUser typeText:self.names[i]];
      sleep(1);
      XCUIElement *textFieldPwd = self.app.secureTextFields[@"密碼"];
      [textFieldPwd tap];
      [self.app.buttons[@"Clear text"] tap];
      [textFieldPwd typeText:self.pwds[i]];
  
      XCUIElement *button = self.app.buttons[@"登錄"];
      [button tap];
      sleep(2);
      
      if (!button.exists) {
          // 登錄成功
      }
  }
}

我們簡單說明一下上面的代碼, 我聲明了兩個(gè)數(shù)組,一個(gè)用來存儲用戶名(names)一個(gè)用來存貯密碼(pwds),循環(huán)遍歷,依次輸入用戶名和密碼,如果錯(cuò)誤則重新輸入直到正確為止。

iOS 自動(dòng)化測試遇到的問題

  • iOS 輪播圖的和TableView 或者CollectionView混合使用的時(shí)候,無法拿到輪播圖的響應(yīng)時(shí)間,可以使其左右滑動(dòng),但是無法響應(yīng)點(diǎn)擊,如果有哪位同學(xué)知道,煩請告知我,不甚感激。
  • 如果項(xiàng)目中用到了UIDatePicker 或者UIPickerView時(shí),用adjustToPickerWheelValue 方法進(jìn)行賦值。
  • 如果想要依次點(diǎn)擊每行cell, 可以通過cells.count獲取所有的cell數(shù)量。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 其實(shí)說到藍(lán)顏知己,如果一些人眼里甚至嗤之以鼻,不就是曖昧里的一個(gè)備胎嗎? 其實(shí)我也遇見過這樣一個(gè)人,就是這個(gè)他,我...
    隨遇而安_afa7閱讀 322評論 2 2
  • 云雨無蹤,微塵洗凈,雨后空靈毓秀。 友是,倦意態(tài)濃,黛娥雙鎖,薄羅衣窄絮風(fēng)軟,觥籌交錯(cuò),哽咽夢語,愁思不盡,欲說還...
    橘未枳閱讀 638評論 10 3
  • 昨天晚上我開辦地面《能斷金剛》讀書會,很意外來了一位在公益組織認(rèn)識的朋友,也算一位忘年交。 雖然在同一個(gè)公益...
    章益華的日常分享閱讀 518評論 1 1

友情鏈接更多精彩內(nèi)容