1. 前言
一直以來,Airtest的教程都傾向於編寫 .air
腳本,但本質上,它還是python腳本來的。今天我們就來補上這個缺口,一起來看下一個相對完整的純 .py
腳本是什麼樣子的。
2. 例子一:純py
的Airtest腳本
有時候,我們只是想借助Airtest連接設備的功能,然後實現一些小任務,比如簡單的裝包任務等,而不是截一堆圖片做自動化測試。
這種情況下,我們只需要簡單編寫一個純py腳本即可:
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
from airtest.cli.parser import cli_setup
def get_app_screen_shot(apk_file, package_name):
"""
Connect an android device, automatically complete the app installation, open, screenshot, close, uninstall.
Finally you will get a screenshot from app in logdir.
Args:
apk_file: apk file route in your windows computer.
package_name: package_name of your app.
Returns: None
"""
# 連接設備以及初始化工作 log文件夾默認生成在當面目錄下
auto_setup(__file__, logdir=True, devices=["Android:///",],)
# 喚醒手機屏幕
wake()
# 通過windows上apk包體下載app到手機上
install(apk_file)
# 啓動下載好的app
start_app(package_name)
# 等待5s app完全啓動
sleep(5)
# 截圖 並保存到logdir路徑下
snapshot("screen_shot.png")
# 關閉app
stop_app(package_name)
# 卸載app
uninstall(package_name)
if __name__ == '__main__':
# 設置apk文件路徑以及對應包體名稱
APK_FILE = r"C:\Users\AirtestProject\Desktop\NeteaseCloudMusic_Music_official_8.6.50.211229222733_32.apk"
PACKAGE_NAME = "com.netease.cloudmusic"
try:
get_app_screen_shot(APK_FILE, PACKAGE_NAME)
except Exception as err:
# 記錄報錯到logdir下的log.txt文件中,並截圖保存發生錯誤時的手機屏幕
log(err, desc="Finale Error", snapshot=True)
1)純py
腳本的設備連接
對於純py
腳本,我們需要在腳本里面,明確寫明連接設備的腳本 。而.air
腳本,如果有使用auto_setup(__file__)
,則會自動幫我們連接第一臺Android設備。這也是剛從.air
腳本剛剛切換成純py
腳本的同學,經常容易忽略的一點。
所以上述示例中,我們在auto_setup
接口裏面明確連接了Android設備,當然,Airtest連接設備,還有很多種方式,感興趣的同學可以參考我們官方教程文檔中,Airtest連接設備腳本的介紹章節: https://airtest.doc.io.netease.com/IDEdocs/airtest_framework/2_connect_device/ 。
2)純py
腳本的log保存
類似的還有純py
腳本的log保存,也需要我們在腳本開頭時,明確寫明。是否保存log,取決於同學們最終想不想生成報告。因爲報告的生成,是依賴於腳本運行log的。
如果我們不保存log,則最後我們也就沒有辦法依賴於log來生成測試報告。
3)airtest的核心api
上述簡單的裝包測試任務中,涉及到一些Airtest核心API,比如:
- 喚醒屏幕:
wake()
- 安裝應用:
install()
- 啓動應用:
start_app()
- 截圖:
snapshot()
- 卸載應用:
uninstall()
- ......
我們可以從Airtest的核心API文檔中,來熟悉這部分的內容: https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html 。
3. 例子二:純py的Poco腳本
說完了純py
的Airtest腳本,當然少不了我們純py
的Poco腳本啦。下述示例中,包含了連接設備、初始化Android poco、簡單的poco操作、記錄報錯到log裏,最後生成測試報告。
# -*- encoding: utf-8 -*-
from airtest.core.api import *
from airtest.report.report import simple_report
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
def demo():
# 連接設備以及初始化工作 log文件夾默認生成在當面目錄下
auto_setup(__file__, logdir=True, devices=["Android:///",],)
# 初始化poco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
# 執行一些操作 確保手機app已登錄並跳轉到app初始化界面
try:
# 以下操作執行:我的-》我喜歡的音樂-》點擊播放
poco(text="我的").click()
poco(text="我喜歡的音樂").click()
# 靈活結合ide提供的poco ui樹獲取播放按鈕name屬性值
poco(name="com.netease.cloudmusic:id/minPlayBtn").click()
except Exception as err:
# 記錄報錯到logdir下的log.txt文件中,並截圖保存發生錯誤時的手機屏幕
log(err, desc="Finale Error", snapshot=True)
# 無論運行是否成功 輸出報告
finally:
# 默認生成html報告到腳本所在的同級目錄下
simple_report(__file__, logpath=True)
if __name__ == '__main__':
demo()
1)記錄報錯到日誌中
示例中,採用了try-except-finally
的語法,即嘗試做一些poco操作之後,不論成功失敗,最後都會生成測試報告。
需要注意的是,在except
中,我們使用log
接口記錄了報錯到日誌裏面。這樣做的好處是,萬一try
裏面有某個步驟失敗了,不會因爲報錯被try
捕捉了,而不在報告裏面體現出來。
不使用log
接口記錄報錯:
使用log
接口記錄報錯:
2)純py腳本生成報告
Airtest支持使用 simple_report
和 LogToHtml
來生成測試報告。在純py
腳本里面,我們特別需要注意,腳本開頭時,log內容保存在哪裏,生成報告的時候,就要指向去哪裏找log內容,避免出現生成不了報告、生成了錯誤的報告等情況。
4. 小結
今天我們講解了2個簡單的純py
腳本的小例子,希望想從.air
腳本,改成純py
腳本的同學,可以多多練習。
如有問題,也可以反饋到我們官方的issue頁面中:https://airtest.netease.com/issue_create 。
Airtest官網:https://airtest.netease.com/
Airtest教程官網:https://airtest.doc.io.netease.com/
搭建企業私有云服務:https://airlab.163.com/b2b
官方答疑 Q 羣:117973773
呀,這麼認真都看到這裏啦,幫忙點個推薦支持一下唄,灰常感謝~