1. 前言
很多同學對於Airtest都有一些刻板的印象,覺得Airtest只能截圖,然後進行一些簡單的點點點操作。
但實際上,拋開Airtest的圖像識別點擊功能,Airtest還能幫助我們連接設備,然後完成一些別的小任務,比如裝包、打開應用、檢查應用等等(不需要截圖、也不需要生成報告)。
2. 利用Airtest完成裝包任務的腳本示例
示例爲一個非常簡單的純.py
腳本例子,只連接設備,然後安裝並打開指定應用即可,log都不需要保存(可以看到auto_setup
裏面logdir=False
):
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
from airtest.cli.parser import cli_setup
auto_setup(__file__, logdir=False, devices=["android://127.0.0.1:5037/PFT4PBLF75GQHYBM"])
# 包體存放的路徑
APK_FILE = r"D:\demo\NeteaseCloudMusic_Music_official_8.7.11.220318190241_32.apk"
# 包名
PACKAGE_NAME = "com.netease.cloudmusic"
# 安裝應用
install(APK_FILE)
# 打開應用
start_app(PACKAGE_NAME)
3. 裝包接口詳解
1)install()
install()
是Airtest的核心API之一,默認是用當前的設備去執行安裝操作,實際上裏面調用了 device().install_app()
,所以上文中的案例,我們也可以寫成這樣:
...
# 安裝應用
device().install_app(APK_FILE)
# 打開應用
start_app(PACKAGE_NAME)
...
其中,install_app
除了需要傳入filepath
參數之外,還有2個參數我們也可以關注下:
replace
,如果應用已存在,是否替換,默認爲False
install_options
,install
命令的額外選項,默認是[]
# adb install -r -t D:\demo\test.apk
device().install_app(r"D:\demo\test.apk",install_options=["-r", "-t"])
2)pm_install()
pm_install
是airtest.core.android.adb
模塊下面的安裝方法,在Airtest1.2.7版本,我們對這個安裝接口進行了增強:
- 支持了安裝參數的傳入(與
adb.install
保持一致), - 支持了 中文路徑、一些 包含特殊符號路徑
- 對路徑的改動同時影響到了
adb.pull()
和adb.push()
接口,支持了中文路徑、包含斜槓的路徑(比如\g
這樣的字符也會有問題)、包含特殊符號(空格、括號等)的路徑 - 在
pm_install
安裝完畢後,會進行adb shell rm apk
的操作,超時時間30秒
上文的小任務,也可以通過pm_install
接口來實現:
...
# 安裝應用
device().adb.pm_install(APK_FILE)
# 打開應用
start_app(PACKAGE_NAME)
...
Airtest1.2.7版本之後,pm_install
的參數與install_app
保持了一致,同樣支持:
replace
,如果應用已存在,是否替換,默認爲False
install_options
,install
命令的額外選項,默認是[]
3)拓展:install的安裝參數
Airtest封裝的安裝接口,包含以下安裝參數可以使用:
-t
,允許測試包-l
,鎖定應用程序-s
,把應用程序安裝到sd卡上-g
,爲應用程序授予所有運行時的權限-r
,替換已存在的應用程序(覆蓋安裝)-d
,允許降級覆蓋安裝
4. 小結
本文主要使用Airtest封裝的安裝接口,採用多種方式實現了裝包的小任務,另外還拓展了下安裝參數的介紹,同學們可以自己動手試試喲~
Airtest官網:https://airtest.netease.com/
Airtest教程官網:https://airtest.doc.io.netease.com/
搭建企業私有云服務:https://airlab.163.com/b2b
官方答疑 Q 羣:117973773
呀,這麼認真都看到這裏啦,幫忙點個推薦支持一下唄,灰常感謝~