Python+AirTest+Pytest進(jìn)行iOS自動(dòng)化

一、環(huán)境準(zhǔn)備,

1、xcode

2、Airtest

3、python

4、node.js(npm)

5、cnpm

6、ios-deploy

7、brew

8、libimobliedevice依賴庫(kù)(真機(jī))

9、carthage依賴庫(kù)(被webdriveragent使用)

10、在 iOS 設(shè)備上安裝 WebDriverAgent

1)安裝 WebDriverAgent 依賴

# Appium 桌面版本

cd? /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent

sh ./Scripts/bootstrap.sh

# Appium 命令行版本

cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent

sh ./Scripts/bootstrap.sh

2)使用 Xcode 打開 WebDriverAgent 項(xiàng)目:點(diǎn)擊?Finder→前往→前往文件夾…,輸入以下路徑,點(diǎn)擊前往,雙擊文件夾下的?WebDriverAgent.xcodeproj?打開項(xiàng)目

3)在 Xcode 中添加開發(fā)者賬號(hào):點(diǎn)擊上方菜單欄的?Xcode→Preferences→Accounts,點(diǎn)擊左下角的?+?按鈕,選擇?add Apple ID,添加自己的 Apple ID 作為開發(fā)者賬號(hào)

4)編譯 WebDriverAgentLib

5)編譯 WebDriverAgentRunner

6)將 WebDriverAgentRunner 安裝到 iOS 設(shè)備

7)調(diào)用 WebDriverAgent 接口

設(shè)置代理?

iproxy可以將iPhone端口映射到計(jì)算機(jī)端口,然后可以通過(guò)訪問(wèn)計(jì)算機(jī)端口來(lái)訪問(wèn)電話端口。

通常情況下,您需要通過(guò)設(shè)置USB代理來(lái)訪問(wèn)手機(jī)上的代理。您可能無(wú)法直接通過(guò)wifi訪問(wèn)手機(jī)。出于特定原因,請(qǐng)參閱問(wèn)題詳細(xì)信息。

通過(guò)Homebrew安裝iproxy

$ brew install libimobiledevice

b運(yùn)行iproxy

$ iproxy 8100 8100

啟動(dòng)成功后,您可以嘗試在瀏覽器中訪問(wèn)http://127.0.0.1:8100/status。如果訪問(wèn)成功,并且您可以看到一些json格式的手機(jī)信息,則表示啟動(dòng)成功。此時(shí),請(qǐng)?jiān)L問(wèn)http://127.0.0.1:8100/inspector以查看瀏覽器上投射的iPhone屏幕;接下來(lái)就可以開始執(zhí)行代碼了。

二、本地python環(huán)境運(yùn)行

1、用本地?python?環(huán)境跑?Airtest?或者?poco?腳本之前,需要先安裝上這倆個(gè)庫(kù)(使用?pip install airtest?和?pip install pocoui?來(lái)安裝)。

2、腳本中進(jìn)行設(shè)備連接

# 方法一:在auto_setup()接口添加設(shè)備

auto_setup(__file__,devices=["Android://127.0.0.1:5037/SJE5T17B17"])

auto_setup(__file__,devices=["iOS:///127.0.0.1:8100"])

# 方法二:用connect_device()方法連接設(shè)備

dev = connect_device("Android://127.0.0.1:5037/SJE5T17B17")

# 方法三:用init_device()方法連接設(shè)備

init_device(platform="Android",uuid="SJE5T17B17")

3、檢查圖片地址

程序可以根據(jù)這個(gè)相對(duì)路徑找到截圖文件的原因在于,我們利用?auto_setup(__file__)?初始化腳本的時(shí)候,傳入了一個(gè)?basedir?(參數(shù)值為__file__,即當(dāng)前腳本所在路徑),程序會(huì)默認(rèn)根據(jù)這個(gè)?basedir?去尋找腳本中存在的相對(duì)路徑。

因此我們要把腳本中用到的截圖文件,也復(fù)制到新建項(xiàng)目的所在目錄下,這樣才可以讓程序根據(jù)截圖腳本上的相對(duì)路徑正確找到我們的截圖文件。

當(dāng)然我們也可以選擇把截圖腳本上面的相對(duì)路徑,改成絕對(duì)路徑,這樣程序也能夠根據(jù)絕對(duì)路徑找到我們的截圖文件:

touch(Template(r"D:/test/tpl1590718697837.png", rgb=True, record_pos=(-0.383, 0.717), resolution=(1080, 1920)))

4、生成測(cè)試報(bào)告

# generate html report

from airtest.report.report import simple_report

simple_report(__file__, logpath=True)

其實(shí)我們是希望不論測(cè)試用例能不能執(zhí)行通過(guò),都可以給我們一個(gè)報(bào)告反饋,所以我們可以使用?try-finally?語(yǔ)句,無(wú)論是否發(fā)生異常都將執(zhí)行最后的代碼:

try:

? ? touch(Template(r"tpl1590718697837.png", threshold=0.9, record_pos=(0.378, 0.098), resolution=(1080, 1920)))

finally:

? ? # generate html report

? ? simple_report(__file__, logpath=True)

三、代碼結(jié)構(gòu)


common:封裝了一些通用函數(shù),如獲取圖片地址、上滑、翻頁(yè)等

driver:設(shè)置連接的測(cè)試設(shè)備

page:按頁(yè)面定義,用來(lái)封裝獲取頁(yè)面元素

report:用來(lái)放airtest的測(cè)試報(bào)告及截圖數(shù)據(jù)

resources:airtest框架可以使用圖像識(shí)別進(jìn)行自動(dòng)化,存放測(cè)試圖片

testcase:按頁(yè)面定義,用來(lái)管理case


conftest:配置裝飾器,用于執(zhí)行特定函數(shù)

run:用于啟動(dòng)整個(gè)項(xiàng)目


四、總結(jié)

整個(gè)框架就是基于Pytest的自動(dòng)化管理用例,Airtest的2大定位框架進(jìn)行搭建。

Airtest:對(duì)公眾號(hào)、小程序的元素控件進(jìn)行抓取,可使用Poco定位或Airtest圖像識(shí)別進(jìn)行

Pytest:對(duì)整體用例集、用例進(jìn)行管理;可單條,批量執(zhí)行,分類執(zhí)行等等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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