本節書摘來自華章計算機《騰訊ios測試實踐》一書中的第3章,第3.2節,作者:丁如敏 王琳 等著
更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
iphone上的作業系統被稱為ios,每次釋出新版本,想體驗新特性的使用者就需要将自己的手機進行固件重新整理,或者購買已經配置最新系統的iphone。作業系統的差異是手機“軟實力”的差異。新系統釋出給我們帶來了新功能和接口實作的變化。
3.2.1 新增功能
什麼是系統的新功能?釋出每個大系統,除了界面更新外,必然伴随着一些全新的功能,更新了新系統後這些功能可以直覺地被使用者體驗到。例如ios 8帶來的widget,支援第三方輸入法,ios 9帶來的spotlight新特性,ios 10的imessage功能更新和push消息多樣化等。ios平台上的開發者會根據這些新特性再結合自己的産品進行一些功能關聯。
新增功能的測試隻要在對應的系統和機型上進行針對性的驗證即可,曾經出現缺陷的案例如下:ios 8系統widget的功能,主要在于app自身提供給widget一些資訊,例如天氣、資訊新聞。測試過程中發生一些顯示排版的問題。ios 9系統引入spotlight新功能可以搜尋應用内的資訊,這方面的bug集中在資料傳輸中。曾發生過書簽資料傳輸錯誤導緻的閃退問題。ios 10系統到目前為止還沒有發現新增功能引發的問題。
3.2.2 接口差異
系統釋出的同時,還有與新增功能對應的一些使用者看不見的變化。一般來說,是對開發者而言的變化,大多展現為系統接口的變化,以及一些和過往不同的api出現,這裡稱為系統的接口差異。
新系統釋出後,ios産品的開發工具xcode也會進行更新,提供新的sdk供開發者進行編譯。而使用新sdk編譯的版本在舊系統上也可能會存在各式問題,主要是sdk底層的api實作會做一些調整,需要開發者閱讀新系統說明,舊有代碼對新系統的api實作要進行适配,以免出現各式問題。
因為系統一般是一年釋出一個大的版本,按照一年中不同的時間階段,大約會有如圖3-1所示的三個測試階段。
圖3-1 研發階段
1.日常相容
一款app在編碼階段就要考慮不同系統的差異性,在修改代碼的階段要格外關注系統的高低版本之間api調用時實作的差異。
表3-1是qq浏覽器(iphone)在非新系統釋出時期的普通适配測試發現的問題。
從表3-1中可以看出,兩個bug都是某個系統下的浏覽器不響應使用者手指操作。點選開關,不響應開關指令;滑動螢幕,不響應滾動指令。其本質是因為開發在重構或者實作函數功能時,忽略了高低版本系統上的系統api調用的差異性。
這種情況一般發生在函數重構階段,重構的開發在不了解系統差異性的情況下,容易出現這樣的問題。作為測試人員,對每次重構類型的測試,盡量做到系統覆寫。如果條件允許,最好與開發一起過一下高低版本系統api實作是否有差異性。
2.釋出新系統
在每年的新系統釋出前,蘋果公司會陸續釋出beta版本供開發者适配。這時測試也要跟進,對app在新系統上運作的情況進行檢查确認。時機一般是在開發完成一輪适配測試後開始啟用。原則上是所有的功能都要在新系統上運作一次檢查。在啟動測試工作之前,測試人員最好也要了解新系統的特性及其變化。
下面還是以qq浏覽器(iphone)為例,如表3-2所示。
bug 1如圖3-2所示,其中左邊的圖是手機通知欄中浏覽器下發的消息,點選這條消息後進入右邊的圖,可以發現上方本應該顯示手機的網絡信号、電量、時間資訊的狀态欄不顯示了。
圖3-2 通知欄bug圖
這是ios 9正式釋出前的beta 3版本自身的問題,我們可以對這個問題進行相容,在ios 9正式版本釋出後這個問題也不複存在。
bug 2的現象如圖3-3所示,其中左圖中的下方工具欄有一個“收藏到qq”,點選後會提示登入qq(已經登入過qq),現象如右邊的圖所示。
圖3-3 收藏到qq功能bug
這是ios 9基于安全性考慮,不允許掃描使用者手機裡app的安裝情況,必須在url scheme裡指定調起的app(url scheme一般使用的場景是應用程式有分享或跳轉其他平台授權的功能,分享或授權後再跳轉回來)。
在ios 8中并沒有做過多限制,但是ios 9需要将在外部調用的url scheme列為白名單,才可以完成跳轉。如果ios 9沒做适配,則會報錯。具體的解決方案是要在info.plist中設定 lsapplicationqueriesschemes類型為數組,下面添加所有用到的scheme,如圖3-4所示。
圖3-4 工程配置
上述兩個bug,主要是在新版本适配前的beta版本的測試過程中發現的。這個階段,測試要随開發一起學習新系統的特性,多多閱讀相關文檔,聯系産品各項功能檢查。新系統上的ui顯示問題,大部分也是由于舊版sdk上的編譯導緻的,例如ios 9上的字型變化了,但是舊的sdk還是按照之前的方式進行編譯,就會出現省略号的問題。
3.啟用新sdk
在新系統釋出後一段時間,開發人員會采用高版本的sdk編譯,比較顯式的是用高版本的xcode來編譯版本。這裡有個問題,就是如果使用高版本獨有的api,編譯器是不會辨別出來的,而低版本系統并沒有這種api,是以運作在低版本上就會出現問題。
qq浏覽器(iphone)項目曾經出現過3d touch重壓菜單點選後不能跳轉到app内對應的内容上。原因就是新版本sdk引入的适配問題。
浏覽器建立quick action(用力按壓app圖示出現的标簽)采用的是靜态方式,靜态建立方式是在info.plist檔案中聲明的,其中有兩個鍵值是必須設定的。
uiapplicationshortcutitemtitle:表示這個鍵值設定标簽的标題。
uiapplicationshortcutitemtype:表示設定一個快捷通道類型的字元串,這個字元串唯一地辨別出這個通道類型。
點選3d touch中的快捷選項,會先啟動浏覽器,然後根據回傳的type參數即辨別通道類型的字元串來确認需要跳轉的子產品頁面。在更新ios 10系統的sdk後,系統會在quick action裡自動添加widget入口,同時系統在回調type參數時會在原字元串前面自動添加一個字元串“com.tencent.mttliteextension”,即浏覽器的bundle id,如圖3-5所示。而在回調函數中,我們還用原字元串“search”“new page”“history”去比對,全部比對失敗,是以啟動浏覽器後不再做任何處理,就不會跳轉到相應頁面了。
圖3-5 參數形式截圖
上述三個階段産生的适配問題主要是因為新系統淘汰或更新了一些api,如果開發人員在這些地方不注意,就會出現上述問題。這裡測試人員可以做的工作是與開發人員一起學習每個系統的特性—關聯産品特性。例如,ios 9上關于url scheme的規定涉及外部app調用,那麼測試人員可以排查所有涉及外部app調用的功能,避免開發人員遺漏。本章中的案例就是開發人員忽略了工具箱中收藏的qq功能也涉及外部app調用(qq賬号調用)。
不同系統接口差異引發的api适配是适配測試重點關注的問題,無論是api更新、淘汰,都會導緻适配問題,關注api變更是測試人員和開發人員都要做的。測試人員對缺陷要知其然,更要知其是以然。