1. 程式人生 > >如何在iOS手機上進行自動化測試

如何在iOS手機上進行自動化測試

版權宣告:允許轉載,但轉載必須保留原連結;請勿用作商業或者非法用途

Airtest支援iOS自動化測試,在Mac上為iOS手機部署iOS-Tagent之後,就可以使用AirtestIDE連線裝置,像連線安卓裝置一樣,實時投影、控制手機。iOS測試不僅限於真機測試,iOS模擬器也可以進行。Mac端上部署完成後還可以提供給同一區域網內的windows上遠端連線使用。同時支援airtest影象識別和poco UI檢索。

本文介紹iOS自動化測試的部署過程,提供一個簡單的測試指令碼,列舉了iOS測試過程中常見的問題。

功能支援

  • 支援AirtestIDE連線,實時控制 iPhone
  • 支援基本操作如啟動app、點選、滑動、輸入、截圖等等操作
  • 支援控制元件檢索技術Poco和影象識別
  • 自動化指令碼錄製、一鍵回放、報告檢視等基本功能
  • 支援真機或者模擬器

安裝部署

版本需求:

  • Mac Xcode ≥ 9.3
  • iPhone iOS ≥ 9.3
  • 在 9.3≤iOS≤10時,由於基於舊版xcode SDK,建議使用Xcode 版本≤10.1來啟動iOS-Tagent,否則會出現手機截圖不全的問題。

部署流程

  1. 在Mac下載 iOS-Tagent ,使用 Xcode 啟動 Test, 具體啟動過程可參考 https://github.com/AirtestProject/iOS-Tagent 。當Xcode的log視窗輸出下圖資訊的時候,就意味著部署成功了。

    

  1. 啟動代理,在命令列下執行iproxy 8100 8100執行代理後,可以在瀏覽器開啟 http://127.0.0.1:8100/inspector ,檢視iOS裝置是否能成功連線。

iproxy是usbmuxd附帶的一個小工具,它的作用是將裝置的某個埠對映到電腦的某個埠。mac下可以通過brew安裝 brew install usbmuxd

iproxy 8100 8100 意思就是將手機的8100埠,對映到電腦的8100埠上。這樣我們就能通過訪問電腦的8100埠來訪問到手機了。

  1. 在 AirtestIDE 的裝置視窗,輸入地址:http://127.0.0.1:8100 或 http://x.x.x.x(MAC IP):8100

    

  點選Connect按鈕即可連線iOS裝置,如圖:

    

支援Xcode中的iOS模擬器

Xcode中的iOS Simulator模擬器部署過程和真機一樣,但是可以省略步驟2,不需要另外執行proxy。

當Xcode的log視窗看到下面內容的時候,就可以直接用地址 http://x.x.x.x:8100 進行連線了,也就是log裡顯示出來的ServerURLHere中的地址:

WebDriverAgentRunner-Runner[xxx:xxx] ServerURLHere->http://x.x.x.x:8100<-ServerURLHere

 

支援Windows連線

我們同樣能夠在Windows上連線一個遠端的iOS裝置,但是依然需要有Mac電腦與Xcode環境。首先按照上文的部署教程在Mac上啟動iOS-Tagent之後,不再使用iproxy啟動代理,而是改用 wdaproxy。因為iproxy只支援本機埠的對映,而wdaproxy能夠支援遠端IP對映,這意味著可以在第二部PC上,通過訪問ip的方式訪問到Mac電腦上連線的iOS裝置。

通過brew install openatx/tap/wdaproxy安裝好wdaproxy

使用方法與iproxy一致,wdaproxy 8100 8100,或者不填寫埠也可以,預設將會使用8100:

  

開始測試

iOS 的測試和其他裝置差不多,支援影象識別和UI檢索,下面簡單介紹一個iOS測試例子:

  1. 連線裝置
  2. 點選home鍵
  3. 截圖
  4. 執行滑動操作
  5. 使用poco點選app Safari
  6. 使用poco點選瀏覽器的搜尋框,獲取焦點
  7. 在搜尋框輸入“airtest”
  8. 在搜尋頁面往下滑動
  9. 判斷是否存在airtest官網地址
from airtest.core.api import *
from poco.drivers.ios import iosPoco
poco = iosPoco()

auto_setup(__file__)
connect_device("ios:///x.x.x.x:8100")
keyevent("HOME")
snapshot()
swipe(Template(r"tpl1561985939879.png", record_pos=(0.356, -0.174), resolution=(750.0, 1334.0)), vector=[-0.685, 0.0481])

poco("Safari").click()
poco("URL").click()
text("airtest")

poco("People also search for").swipe([-0.0541, -0.4206])
exists(Template(r"tpl1560844284543.png", record_pos=(-0.292, 0.688), resolution=(750, 1334)))

 

常見問題

    1. 如何在模擬器安裝應用

      • 把xx.ipa 改成xx.zip,解壓得到xx.app
      • 開啟模擬器, 在終端執行 xcrun simctl install booted xx.app

      tips: 不可以把真機 app 包安裝在iOS模擬器上,真機的app是基於arm的,而模擬器是執行在 X86 指令集上的,強行安裝會導致閃退的問題。

    2. 如何進行iOS多機測試 
      目前暫未開放iOS多機測試功能,敬請期待

    3. Api 支援狀況 
      請注意,iOS裝置與Android裝置有很大的不同,以下通用的 Airtest 的 API 在iOS上都是支援的:

      • start_app: OK
      • stop_app: OK
      • snapshot: OK
      • home: OK
      • touch: OK
      • swipe: OK
      • text: OK
      • wait: OK
      • exists: OK
      • find_all: OK
      • assert_exists: OK
      • assert_not_exists: OK

      但是以下API是不支援的:

      • wake: 暫未支援 (考慮用home方法替代)
      • keyevent: 只支援home 事件
      • clear_app: 暫未支援
      • install: 暫未支援
      • uninstall: 暫未支援