日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS 自动化测试

發(fā)布時間:2023/12/31 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS 自动化测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?一、測試背景概述

隨著移動互聯網時代的發(fā)展,移動終端的自動化測試日益活躍,總體來看在Android平臺上的自動化工具和實踐比較多,IOS的UI自動化測試由于系統封閉的原因,一直不太成熟。本著不侵入工程和擁抱原生的原則實現一套自動化測試方案。自動化測試節(jié)省時間節(jié)省真機的成本,而且更高效的覆蓋所有的iOS機型測試,避免每次上線前重復的人工回歸測試,保證每次上線的版本穩(wěn)定運行。

二、iOS Appium 原理

經過調研使用Appium進行自動化測試,Appium 是一個自動化測試開源工具,支持 iOS 平臺和 Android 平臺上的原生應用,web 應用和混合應用。

  • “移動原生應用”是指那些用 iOS 或者 Android SDK 寫的應用。
  • “移動 web 應用”是指使用移動瀏覽器訪問的應用(Appium 支持 iOS 上的 Safari 和 Android 上的 Chrome)。
  • “混合應用”是指原生代碼封裝網頁視圖——原生代碼和 web 內容交互。比如,我們在微信里可以查看網頁,可以通過網頁應用買電影票等。

重要的是,Appium 是一個跨平臺的工具:它允許測試人員在不同的平臺(iOS,Android)使用同一套API來寫自動化測試腳本,這樣大大增加了 iOS 和 Android 測試套件間代碼的復用性。

  • Appium優(yōu)點
  • 開源
  • 跨架構:Native App、Hybird App、Web App
  • 跨設備:Android、iOS、Firefox OS
  • 不依賴源碼
  • 使用任何 WebDriver 兼容的語言來編寫測試用例。比如 Java, Objective-C, JavaScript with Node.js (in both callback and yield-based flavours), PHP, Python, Ruby, C#, Clojure, 或者 Perl.
  • 不需要重新編譯APP
  • 支持IOS手機錄制視頻
  • Appium理念
  • 你無需為了自動化,而重新編譯或者修改你的應用。
  • 你不必局限于某種語言或者框架來寫和運行測試腳本。
  • 一個移動自動化的框架不應該在接口上重復造輪子。(移動自動化的接口應該統一)
  • 無論是精神上,還是名義上,都必須開源。

1. iOS 9.3 系統之前自動化測試

架構圖:

?運行流程:

1-1. Native 自動化

這是iOS 9.3 系統之前自動化測試的架構模式。通過 Android Appium 原理的學習 ,我們很容易理解 iOS Appium 原理:

Appium Client 端執(zhí)行代碼發(fā)送到 Appium Server端(Server 集成了蘋果官方的 Instruments);Server 端將一行行代碼翻譯成一條條指令,同時在手機上注入 bootstrap.jar ;Server 與該 jar 包通信將指令傳給 bootstrap.jar,jar 包調用手機里的自動化測試框架(UIAutomation),UIAutomation框架執(zhí)行指令。

1-2. Hybrid(WebView)自動化

通過 Android Appium 原理的學習,Android 4.4 系統之后,Appium 支持使用 ChromeDriver 進行對 Hybrid 頁面的自動化測試。那么 iOS 上是怎么做的呢?iOS 上早期蘋果官方就一直提供 iOS webkit debug proxy(這是蘋果官方自己開發(fā)的私有的通信協議),Appium 集成了該框架,通過它傳遞指令。

2. iOS 9.3 系統之后自動化測試

Appium 在 iOS 下工具的變革:

  • iOS 9 之前一直以 instruments 下的 UIAutomation為驅動底層技術(弊端由于 instruments 的限制,單臺 mac 只能對應單臺設備);
  • iOS 9.3 時代推出 XCUITest 工具,用以替代 UIAutomation;
  • iOS 10 時代蘋果直接廢棄了 UIAutomation、Facebook 推出 WebDriverAgent(實現的 server 能夠支持單臺 mac 對應多個設備);
  • Appium 在iOS 9.3 后全面采用 WebDriverAgent 的方案。

2-1. 關于 WebDriverAgent

FaceBook 出品:

  • 實現了一個 server,通過 server 可以遠程控制 iOS 設備:啟動應用、關閉應用、點擊、滾動等操作;
  • 通過連接 XCTest.framework 調用蘋果的 API 執(zhí)行動作;
  • 支持多個設備同時進行自動化;
  • Appium、Macaca 已經集成。
  • 但是 WebDriverAgent 僅僅只提供了一個 server(和 inspect 進行元素定位),并沒有像 Appium 一樣提供 java 或 python 的 Client端去寫腳本,腳本執(zhí)行的時候發(fā)送指令給 server,然后去運行。WebDriverAgent 要求你自己去實現 Client 端,即拿 Java/ Python 的 WebDriver 庫進行封裝,然后發(fā)送指令。所以 WebDriverAgent 其實就類似于 Appium server,就只是一個 server。

2-2. 關于 iOS 9.3 之后的 Appium 自動化架構模式

Appium 很粗暴的把整個 WebDriverAgent 直接集成到自己的項目里,然后通信機制就走 WebDriverAgent,Appium 其實就提供了一個 Client 端的作用。所以 iOS 9.3 系統之后自動化測試核心是 WebDriverAgent,Appium 就提供了一個 Client 端來寫腳本和發(fā)送指令。

通過前面的學習,我們知道 Appium 自動化架構模式可以用一個抽象的架構表示,就是下面這樣的:

iOS 9.3以及之后的 Appium 自動化架構模式如下圖所示:


從圖中可以看出:

  • Client 端是 Appium 之前本身提供的;
  • Server 端是:WebDriverAgent 和 Instruments;( Appium 直接把 WebDriverAgent 整個集成進來,Instruments 是為了支持 iOS 9.3 之前的系統)
  • 最右邊是一個手機
  • 之前 Server 是和 bootstrap.jar 通信,這里 WebDriverAgent 提供了WebDriverAgentRunner (類似 bootstrap.jar 的功能),WebDriverAgent與之通信;
  • WebDriverAgentRunner 是一個應用,Client 和 server 運行了之后,WebDriverAgentRunner 會被裝到手機上,這個應用會接收來自 Server 的指令,并連接底層的 XCTest.framwork,并告訴 XCTest.framwork 操作手機進行自動化。

2-3. 必裝的軟件

Xcode、command line tool、libimobiledevice、ios-deploy、carthage、WebDriverAgent、Appium。

ibimobiledevice / ideviceinstaller 庫,相當于 android 的 adb,是 Appium 底層用到的工具之一,用于獲取 iOS 設備信息。

?其常用命令如下:

  • 查看當前所連接的設備
idevice_id -l # 顯示當前所連接設備的 udidinstruments -s devices # 列出所有設備,包括真機、模擬器、mac
  • 安裝應用
ideviceinstaller -u [udid] -i [xxx.ipa] # xxx.ipa 為應用在本地的路徑
  • 卸載應用
ideviceinstaller -u [udid] -U [bundleId]
  • 查看設備已安裝的應用
ideviceinstaller -u [udid] -l # 查看設備安裝的第三方應用ideviceinstaller -u [udid] -l -o list_user # 同上,查看設備安裝的第三方應用ideviceinstaller -u [udid] -l -o list_system # 查看設備安裝的系統應用ideviceinstaller -u [udid] -l -o list_all # 查看設備安裝的所有應用
  • 獲取設備信息
ideviceinfo -u [udid] # 獲取設備信息ideviceinfo -u [udid] -k DeviceName # 獲取設備名稱 同命令 idevicenameidevicename # 同上ideviceinfo -u [udid] -k ProductVersion # 獲取設備版本 10.3.3ideviceinfo -u [udid] -k ProductType # 獲取設備類型 iPhone 8,1ideviceinfo -u [udid] -k ProductName # 獲取設備系統名稱
  • 查看手機實時日志
idevicesyslog #屏幕上即可看見手機上所有的日志idevicesyslog >> iphone.log & #重定向日志到文件中
  • 獲取手機端崩潰報告
idevicecrashreport # 參數可設置具體文件存放位置
  • 截屏
idevicescreenshot #獲取當前截屏,效率比appium截屏高10倍
  • 其他系統文件信息
ideviceinfo # 獲取設備所有信息idevicesyslog # 獲取設備日志idevicecrashreport -e test # 獲取設備 crashlog,test 是文件夾需新建idevicediagnostics # 管理設備狀態(tài) - 重啟、關機、睡眠等
  • ios-deploy 常用命令
ios-deploy -c # 查看當前鏈接的設備ios-deploy --[xxx.app] # 安裝APPios-deploy --id [udid] --uninstall_only --bundle_id [bundleId] # 卸載應用ios-deploy --id [udid] --list_bundle_id # 查看所有應用ios-deploy --id [udid] --exists --bundle_id # 查看應用是否安裝
  • carthage,項目依賴管理,主要是 WebDriverAgent 使用,WebDriverAgent 是用它做項目依賴的
公司 iOS 項目也使用 carthage,類似于 java 的 maven;
  • ios-deploy、ideviceinstaller 類似 android 的 adb;
  • authroize-ios,iOS 授權工具,主要用于模擬器中一些權限的授權;
npm install -g authroze-iossudo authroze-ios

2-4. 安裝 WebDriverAgent

1.從 FB 的 GitHub 上下載WebDriverAgent

http://github.com/facebook/WebDriverAgen

2.初始化項目

在 WebDriverAgent 目錄下執(zhí)行:./Scripts/bootstrap.sh

3.編譯 WebDriverAgent

  • open WebDriverAgent.xcodeproj(會使用默認打開工具Xcode打開項目)。
  • 修改 WebDriverAgent.lib 以及 WebDriverAgentRunner 這兩個 target 下的 General 和?Build?Settings列表(前者是在 mac 上運行的,后者是在手機上運行的)。
  • General 列表需要修改:簽名 Signing 和?BundleId:簽名?Signing:可以用個人免費開發(fā)者證書,用任意 AppleId 可申請;BundleId:之前 BundleId?是綁定了 FB team 的證書的,不能使用,所以要改一個新的。Build?Settings列表需要修改?BundleId?和 上一步一樣。
  • WebDriverAgentRunner 是在手機上運行的,要想在手機上安裝,需要和上一步一樣修改 General 和?Build?Settings 列表。
  • 手機上設置 - 通用 - 描述文件 里信任一下該證書。
  • Xcode - Product - Test,會安裝 WebDriverAgentRunner 并啟動 WebDriverAgent 這個 server。
  • 4.替換 Appium 下的 WebDriverAgent:刪除原 WebDriverAgent 文件夾,把編譯好的 WebDriverAgent 放進去即可

    如果用 npm 安裝的目錄在:cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/; 如果用 desktop 安裝的目錄在:/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/)

    WebDriverAgent配置示例:

    開發(fā)者賬號類型:

    2-5. 開始跑腳本 Sample-Code

    2-5-1. 準備 APP

    這里我們需要將TestApp重新編譯才能使用。

    1.進入APP 其 xxx.xcodeproj 對應的目錄,open WebDriverAgent.xcodeproj 打開項目。

    2. 修改該項目里 target 的 General 和 Build Settings列表(和上面一樣);

    3.通過 Xcode 編譯運行。

    或者通過 xcodebuild 命令通過命令行編譯運行 xcodebuild -project TestApp.xcodeproj -target TestApp -sdk iphoneos10.3 -configurationdevelopment

    2-5-2. 準備腳本

    • iOS 項目的 Desired_cap
    Desired_caps:{’platformName’:’iOS’,‘platformVersion’:’10.3.3’,‘devideName’:’iPhone 7 Plus’,‘udid’:’’, #如果是真機的話必須提供‘app’:’~/appPath/app.app’, #app路徑,如果只填bundleId,那就是通過id啟動已有的App }

    • iOS 的元素定位
    • Appium Desktop - Inspect(推薦)

    Appium Desktop示例:

    • WebDriverAgent - Inspector

    app-Inspector示例:

    這里說說 Appium Desktop - Inspect 是怎么使用的。

    • 打開并啟動 Appium Desktop,點擊軟件右上角第一個按鈕 “ start inspector session”;
    • 會出現彈窗,彈窗里配置好 Desired_caps。
    • 定位方式推薦:AccessbilityId

    注意:

    webdriver.py 里只延展定義了針對移動端的 API,is_displayed()、.is_enabled()() 等這些 API 可以去看Appium的客戶端庫 WebDriver 即 Slenium 2 本身的。

    WebDriver 本身的 API 詳見:

    http://selenium-python.readthedocs.io/api.html

    Appium客戶端庫詳見:

    真機運行效果:

    ios?mp.weixin.qq.com

    原作品鏈接:

    IOS 自動化測試_徐志摩的博客-CSDN博客_ios自動化測試?blog.csdn.net

    總結

    以上是生活随笔為你收集整理的iOS 自动化测试的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。