Airtest自動(dòng)化測試
1. 安裝AirtestIDE
AirtestIDE下載地址。我下載的是AirtestIDE_2019-09-10_py3_Mac10-12.dmg。下載完成之后,直接安裝即可。
2. 設(shè)備連接
2.1 部署iOS-Tagent
git clone git@github.com:AirtestProject/iOS-Tagent.git
把手機(jī)連接到電腦上然后 打開Xcode, product -> Scheme -> WebDriverAgentRunner 如圖

然后點(diǎn)擊 product -> Test 當(dāng)出現(xiàn)如圖的情況,說明iOS-Tagent環(huán)境部署成功
(我自己本地部署后的服務(wù)器地址是: http://172.20.10.7:8100)

2.2 設(shè)置代理
iproxy 可以把iPhone端口映射到電腦端口,那么就可以通過訪問電腦的端口訪問到手機(jī)的端口了
brew install libimobiledevice // 通過 Homebrew 安裝iproxy
iproxy 8100 8100 // 運(yùn)行iproxy,將手機(jī)的8100端口,映射到電腦的8100端口上。這樣我們就能通過訪問電腦的8100端口來訪問到手機(jī)了 (我運(yùn)行部署的環(huán)境是8100,所以寫的8100)
啟動(dòng)成功后,可以試著在瀏覽器訪問 http://172.20.10.7:8100/status ,如果訪問成功并且可以看到一些json格式的手機(jī)信息,即表示啟動(dòng)成功。如圖所示:

此時(shí),訪問 http://172.20.10.7:8100/inspector 可以看到iPhone屏幕投影在瀏覽器上 如圖

2.3 AirtestIDE與iPhone連接
通過ip方式連接iPhone,實(shí)時(shí)刷新界面,可進(jìn)行UI測試。在AirtestIDE的iOS地址欄填入地址 http://172.20.10.7:8100,點(diǎn)擊 “connect” 連接設(shè)備,開始編寫你的Airtest測試腳本了。如圖所示

注意: Xcode中的iOS Simulator模擬器部署過程和真機(jī)一樣,但是可以省略步驟2.2 設(shè)置代理,不需要另外執(zhí)行proxy
3. 腳本編寫
3.1 Airtest圖像編寫腳本 例如:使用 touch 操作,選擇touch 按鈕 如圖

具體詳情 可以參考 Airtest腳本編寫。
3.2 Poco編寫腳本 如圖


具體詳情 可以參考 Poco腳本錄編寫。
4. 運(yùn)行腳本
4.1 使用AirtestIDE運(yùn)行腳本
單擊AirtestIDE的 Run Script 按鈕即可 如圖

4.2 使用AirtestIDE命令行運(yùn)行
將運(yùn)行腳本時(shí) AirtestIDE 生成的這段命令行代碼(如下圖圈出來的部分)復(fù)制到你的命令行終端里,回車運(yùn)行就可以了

注意: 這種使用AirtestIDE命令行來運(yùn)行腳本的方式,是一個(gè)簡單快速的方式,假如想要批量執(zhí)行、同時(shí)執(zhí)行的話,可能會(huì)遇到效率不佳的問題。
4.3 使用本地python環(huán)境運(yùn)行腳本
部署Python環(huán)境
Mac 系統(tǒng)自帶Python 環(huán)境,環(huán)境支撐Python(2.7或<=3.6),我們更推薦使用 Python3
brew install python3
Airtest安裝
pip install airtest
Poco安裝
pip install pocoui //請注意庫的名稱為 pocoui,不要填錯(cuò)
環(huán)境部署完成后,我們就能夠脫離AirtestIDE,在不同的宿主機(jī)器和被測平臺(tái)上運(yùn)行腳本了。使用python命令行運(yùn)行腳本
airtest run untitled.air --device ios:///手機(jī)設(shè)備號(hào) --log log/
python -m airtest run untitled.air --device Android:///手機(jī)設(shè)備號(hào) --log log/
這兩個(gè)命令行的效果是相同的,我們用airtest運(yùn)行了一個(gè)叫做 untitled.air 的腳本,傳入了 --device 和 --log 兩個(gè)參數(shù),分別是我們的手機(jī)設(shè)備和log輸出目錄。
5. 生成報(bào)告
5.1 在IDE里點(diǎn)擊生成報(bào)告按鈕來生成報(bào)告
在運(yùn)行腳本后,可以立即在log窗口中看到當(dāng)前腳本執(zhí)行成功還是失敗,然而不能夠看到更加詳細(xì)直觀的執(zhí)行結(jié)果。在AirtestIDE中,可以點(diǎn)擊上側(cè)圖標(biāo)菜單的最后那個(gè)“查看報(bào)告”的按鈕,快捷鍵為Ctrl+L,稍后片刻將會(huì)自動(dòng)使用默認(rèn)瀏覽器打開結(jié)果報(bào)告頁面。如圖所示:

另外,我們可以在AirtestIDE上右鍵點(diǎn)擊腳本標(biāo)題,選擇“打開報(bào)告”,來打開log所在的文件夾。

5.2 使用命令行來生成報(bào)告
我們的腳本運(yùn)行過程,與報(bào)告生成過程是獨(dú)立的兩個(gè)步驟,所以我們可以先用airtest run 指令來運(yùn)行腳本:
# 用airtest運(yùn)行了untitled.air這個(gè)腳本
# airtest run 后面接的是腳本文件的路徑
airtest run untitled.air
注意: 如果airtest run 指令沒有指定--log參數(shù),將不保存log內(nèi)容和截圖,且命令行會(huì)提示do not save log;如果指定--log log/, 將把生成的log內(nèi)容放到當(dāng)前命令行的執(zhí)行目錄里;如果指定了--log +某個(gè)指定目錄 參數(shù),log內(nèi)容與截圖將會(huì)放在指定目錄里。
然后,我們可以運(yùn)行 airtest report 指令來生成一份HTML格式的報(bào)告:
# 最簡單的命令行,log文件與腳本文件在同一文件夾里
# 運(yùn)行以下指令,在當(dāng)前目錄生成一個(gè)log.html
airtest report untitled.air log.html
具體詳情 可以參考 Airtest_generate-html-report。
*注意:在有些瀏覽器上打開報(bào)告可能出現(xiàn)白屏現(xiàn)象,這是由于官方對(duì)有些瀏覽器沒有適配全,建議用最新版本的chrome去打開。
6. 常見的問題
6.1 如何在模擬器安裝應(yīng)用
把xx.ipa 改成xx.zip,解壓得到xx.app
打開模擬器, 在終端運(yùn)行 xcrun simctl install booted xx.app
tips: 不可以把真機(jī) app 包安裝在iOS模擬器上,真機(jī)的app是基于arm的,而模擬器是運(yùn)行在 X86 指令集上的,強(qiáng)行安裝會(huì)導(dǎo)致閃退的問題。
6.2 如何進(jìn)行iOS多機(jī)測試
目前暫未開放iOS多機(jī)測試功能
6.3 Api 支持狀況
iOS設(shè)備與Android設(shè)備有很大的不同,以下通用的 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: 暫不支持
6.4 有些瀏覽器打開生成的報(bào)告空白
這是由于官方對(duì)有些瀏覽器沒有適配全,建議用最新版本的chrome去打開。