Airtest新手升級:一個相對完整的純.py腳本是怎樣子的

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_reportLogToHtml 來生成測試報告。在純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

呀,這麼認真都看到這裏啦,幫忙點個推薦支持一下唄,灰常感謝~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章