Windows上實現iOS APP自動化測試:tidevice + WDA + airtest


Windows上實現iOS APP自動化測試:tidevice + WDA + facebook-wda / appium中介紹了使用阿里開源的tidevice 和 facebook-wda實現在Windows上進行iOS APP自動化測試。本文介紹如何使用tidevice + WDA + airtest進行iOS APP自動化測試。

環境准備

本文使用的環境如下:

  1. Python 3.7.6,Python版本需要3.6+
  2. tidevice==0.4.14
  3. WebDriverAgent,下載最新版本進行編譯安裝:https://github.com/appium/WebDriverAgent
  4. airtest==1.2.2
  5. iOS 設備: iPhone12 mini(14.6)
  6. Windows系統版本:Windows 10 家庭中文版

tidevice和WebDriverAgent介紹及安裝可參考Windows上實現iOS APP自動化測試:tidevice + WDA + facebook-wda / appium

使用USB連接設備,檢測tidevice是否安裝成功:

$ tidevice list

airtest安裝可參考:App自動化測試工具Airtest

airtest iOS 自動化

1. 啟動WDA

獲取設備的udid:

$ tidevice list

查看wda的bundle id:

$ tidevice applist

使用tidevice啟動iOS設備上的WDA應用

$ tidevice -u [設備 udid] wdaproxy -B [wda 的 bundle Id] --port 8100

如果你覺得每次進行自動化測試之前都要手動啟動WDA比較麻煩,可以考慮使用vbs+bat的方式后台啟動WDA,實現方式可參考VBSscript實現后台運行Windows bat腳本

2. airtest 連接設備

如果要使用airtest IDE來編寫自動化測試腳本,先連接 iOS 設備。

打開Airtest IDE,在右下角【連接iOS設備】中輸入地址:

http+usbmux://00008101-000255021E08001E
# 或者
http://localhost:8100/

00008101-000255021E08001E 是手機的udid,8100是使用tidevice啟動WDA時設置的端口號。

可以使用init_device()或者connect_device()方法連接iOS設備:

# 方法1
init_device(platform="IOS",uuid="http://localhost:8100/")
# 方法2
connect_device("ios:///http://127.0.0.1:8100")
# 方法3
init_device(platform="IOS",uuid="http+usbmux://00008101-000255021E08001E")

3. airtest 自動化

連接上iOS設備后就可以編寫測試用例了, airtest使用的是圖像識別的方法進行元素操作,元素操作方法可參考文章 App自動化測試工具Airtest

下面是一個示例腳本:打開【設置】

#!/usr/bin/python3
# @Time:    2021/9/26 13:55
# @File:    test_ios_airtest.py

from airtest.core.api import *
from airtest.report.report import simple_report

# auto_setup(__file__, logdir=True, devices=["ios:///http://127.0.0.1:8100",])
auto_setup(__file__, logdir=True)
init_device(platform="IOS",uuid="http://localhost:8100/")

start_app("com.apple.Preferences") # 打開【設置】
touch(Template(r"tpl1632398524727.png", record_pos=(-0.34, 0.236), resolution=(1125, 2436))) # 點擊

# generate html report
simple_report(__file__)

poco iOS自動化

也可以使用poco進行UI元素操作,WDA啟動和連接設備和前面介紹的【airtest iOS 自動化】一樣。連接設備使用airtest提供的方法。

UI 元素可通過在AirtestIDE的Poco 輔助窗查看,注意要選擇iOS。

poco元素操作方法可參考文章 App自動化測試工具Airtest

使用AirtestProject進行APP自動化測試時,通常將airtest和poco結合起來使用,下面是一個示例腳本:打開【設置】,檢查軟件版本為14.8

#!/usr/bin/python3
# @Time:    2021/9/26 13:56
# @File:    test_ios_poco.py

from airtest.core.api import *
from airtest.report.report import simple_report
from poco.drivers.ios import iosPoco

# 連接設備、初始化日志路徑
auto_setup(__file__, logdir=True)
init_device(platform="IOS",uuid="http://localhost:8100/")

# 打開【設置】
start_app("com.apple.Preferences")

# 初始化ios poco
poco = iosPoco()

# 點擊
poco("通用").click()
poco("關於本機").click()
# 斷言
assert poco('軟件版本').attr('value') == "14.8"

# generate html report
simple_report(__file__)

查看生成的報告:

和facebook-wda庫一起使用

facebook-wda、airtest和poco這3個測試庫可以在一個測試項目中使用,下面結合pytest測試框架,使用這3個庫實現APP自動化測試。

from airtest.core.api import *
from .start_wda import StartWDA
import wda
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
from poco.drivers.ios import iosPoco


class TestFacebookWDA():
    def setup(self):
        self.udid = "00008101-000255021E08001E"
        self.wda_bundle_id = "com.facebook.WebDriverAgentRunner.test1.xctrunner"
        self.port = 8100  # 8100為啟動WDA設置的端口號
        self.app_name = "com.apple.Preferences"

        # 啟動WDA
        self.wda = StartWDA()
        self.wda.stop_wda(self.port)
        self.wda.start_wda(self.udid, self.wda_bundle_id, self.port)

        # airtest初始化連接設備
        init_device(platform="IOS", uuid=f"http://localhost:{self.port}/")
        # poco初始化
        self.poco = iosPoco()
        # facebook-wda連接設備
        self.c = wda.Client(f'http://localhost:{self.port}')

        self.c.session().app_activate(self.app_name)  # 打開設置
        # start_app("com.apple.Preferences")
        self.c.implicitly_wait(3.0)

    def teardown(self):
        self.c.session().app_terminate(self.app_name)  # 退出設置

    def test_demo(self):
        self.c.swipe_up()
        time.sleep(1)
        self.c(name="通用").click()
        time.sleep(1)
        self.poco("關於本機").click()
        assert self.poco('軟件版本').attr('value') == "14.8"

        ele = self.c(name="型號名稱", className="XCUIElementTypeCell").wait(timeout=3.0)
        assert ele.value == "iPhone 12 mini"

airtest和facebook-wda初始化連接設備(創建session)后,它們向WDA發送命令互不影響。需要注意的是,Android APP自動化測試中,airtest、appium和uiautomator2之間是有沖突的,因為它們安裝在手機上的uiautomator server不一樣,且不能同時運行。

--THE END--


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM