一、環(huán)境準(zhǔn)備盛卡,
1助隧、xcode
2、Airtest
3滑沧、python
4并村、node.js(npm)
5、cnpm
6滓技、ios-deploy
7哩牍、brew
8、libimobliedevice依賴庫(真機(jī))
9令漂、carthage依賴庫(被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ā)者賬號:點(diǎn)擊上方菜單欄的?Xcode→Preferences→Accounts,點(diǎn)擊左下角的?+?按鈕挠唆,選擇?add Apple ID处窥,添加自己的 Apple ID 作為開發(fā)者賬號
4)編譯 WebDriverAgentLib
5)編譯 WebDriverAgentRunner
6)將 WebDriverAgentRunner 安裝到 iOS 設(shè)備
7)調(diào)用 WebDriverAgent 接口
設(shè)置代理?
iproxy可以將iPhone端口映射到計(jì)算機(jī)端口,然后可以通過訪問計(jì)算機(jī)端口來訪問電話端口玄组。
通常情況下滔驾,您需要通過設(shè)置USB代理來訪問手機(jī)上的代理。您可能無法直接通過wifi訪問手機(jī)俄讹。出于特定原因哆致,請參閱問題和詳細(xì)信息。
通過Homebrew安裝iproxy
$ brew install libimobiledevice
b運(yùn)行iproxy
$ iproxy 8100 8100
啟動(dòng)成功后患膛,您可以嘗試在瀏覽器中訪問http://127.0.0.1:8100/status摊阀。如果訪問成功,并且您可以看到一些json格式的手機(jī)信息踪蹬,則表示啟動(dòng)成功胞此。此時(shí),請?jiān)L問http://127.0.0.1:8100/inspector以查看瀏覽器上投射的iPhone屏幕跃捣;接下來就可以開始執(zhí)行代碼了漱牵。
二、本地python環(huán)境運(yùn)行
1疚漆、用本地?python?環(huán)境跑?Airtest?或者?poco?腳本之前酣胀,需要先安裝上這倆個(gè)庫(使用?pip install airtest?和?pip install pocoui?來安裝)刁赦。
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è)相對路徑找到截圖文件的原因在于甚脉,我們利用?auto_setup(__file__)?初始化腳本的時(shí)候,傳入了一個(gè)?basedir?(參數(shù)值為__file__铆农,即當(dāng)前腳本所在路徑)牺氨,程序會默認(rèn)根據(jù)這個(gè)?basedir?去尋找腳本中存在的相對路徑。
因此我們要把腳本中用到的截圖文件墩剖,也復(fù)制到新建項(xiàng)目的所在目錄下波闹,這樣才可以讓程序根據(jù)截圖腳本上的相對路徑正確找到我們的截圖文件。
當(dāng)然我們也可以選擇把截圖腳本上面的相對路徑涛碑,改成絕對路徑,這樣程序也能夠根據(jù)絕對路徑找到我們的截圖文件:
touch(Template(r"D:/test/tpl1590718697837.png", rgb=True, record_pos=(-0.383, 0.717), resolution=(1080, 1920)))
4孵淘、生成測試報(bào)告
# generate html report
from airtest.report.report import simple_report
simple_report(__file__, logpath=True)
其實(shí)我們是希望不論測試用例能不能執(zhí)行通過蒲障,都可以給我們一個(gè)報(bào)告反饋,所以我們可以使用?try-finally?語句瘫证,無論是否發(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ù),如獲取圖片地址背捌、上滑毙籽、翻頁等
driver:設(shè)置連接的測試設(shè)備
page:按頁面定義,用來封裝獲取頁面元素
report:用來放airtest的測試報(bào)告及截圖數(shù)據(jù)
resources:airtest框架可以使用圖像識別進(jìn)行自動(dòng)化毡庆,存放測試圖片
testcase:按頁面定義坑赡,用來管理case
conftest:配置裝飾器,用于執(zhí)行特定函數(shù)
run:用于啟動(dòng)整個(gè)項(xiàng)目
四么抗、總結(jié)
整個(gè)框架就是基于Pytest的自動(dòng)化管理用例毅否,Airtest的2大定位框架進(jìn)行搭建。
Airtest:對公眾號蝇刀、小程序的元素控件進(jìn)行抓取螟加,可使用Poco定位或Airtest圖像識別進(jìn)行
Pytest:對整體用例集、用例進(jìn)行管理吞琐;可單條捆探,批量執(zhí)行,分類執(zhí)行等等站粟。