前言
今天我們來講一個大家經常問到或者經常容易出錯的一個問題--如何調用別的.air腳本中封裝好的方法,我們將圍繞以下內容來講解:
-
普通調用的方法;
-
設定默認項目根目錄
PROJECT_ROOT來調用的方法; -
調用過程中常見的問題
為了幫助大家更好地理解,下文都將以實際案例來介紹調用的方法和常見問題。
普通調用的方法
首先,我們新建1個common.air的腳本,在里面定義1個名為common_function()的方法:
# common.air
from airtest.core.api import *
auto_setup(__file__)
def common_function():
touch("tmp.png")
然后,我們再新建1個call.air的腳本,用來調用common.air里面封裝好的方法:
# call.air
from airtest.core.api import using
auto_setup(__file__)
# using("相對路徑/絕對路徑")
using("common.air")
from common import common_function
common_function()
common.air和call.air腳本所在目錄如圖所示:

值得注意的是,call.air的代碼示例中,using("common.air")使用的是相對路徑,我們也可以使用絕對路徑來找到common.air,如:
using("D:/test/common.air")
設定默認項目根目錄PROJECT_ROOT來調用的方法
如果需要調用的子腳本路徑統一都放在某個目錄下,可以通過設定一個默認項目根目錄 PROJECT_ROOT,讓使用using接口時能夠在當前根目錄下尋找別的子腳本,無需填寫完整路徑,讓腳本之間相互調用使用更加方便。
例如,我們建立一個名為test1.air的腳本,絕對路徑為D:/test/user/project/test1.air :

# test1.air
from airtest.core.api import *
auto_setup(__file__)
def test():
touch("tmp.png")
然后我們在"D:/test/"目錄下新建main.air腳本,調用test1.air腳本里面的test方法:

# main.air
from airtest.core.api import *
auto_setup(__file__)
# PROJECT_ROOT需要填寫絕對路徑
ST.PROJECT_ROOT = "D:/test/user/project"
using("test1.air")
from test1 import test
test()
調用過程中常見的問題
路徑斜杠問題
填寫路徑的時候,需要注意使用的是/而非反斜杠\,特別是你從計算機上復制路徑的時候,計算機的路徑使用的都是反斜杠\,我們在代碼中使用時需要手動轉換過來,不然會出現以下報錯:

圖中示例的路徑中包含了很多反斜杠\(特殊字符),方法一是我們可以通過添加反斜杠\來轉義,也就是說路徑字符串可以寫成類似這樣:D:\\test\\user\\project。
或者是我們可以在字符串前加一個r來定義原始字符串(忽略所有的轉義字符,比如這里的反斜杠\),類似這樣: r"D:\test\user\project"。
調用的模塊不存在
在調用的過程中,我們經常會遇到以下報錯:

上述報錯的意思是,程序找不到我們想要調用的名為test1的這個模塊。這時候我們可以從以下幾方面來思考:
-
仔細核對調用的模塊是否存在於你填寫的路徑里面;
-
設定默認的項目根目錄
PROJECT_ROOT時是否使用了相對路徑而沒有使用絕對路徑。
如果以上都沒有問題,但程序還是找不到你想調用的模塊,你還可以嘗試把路徑加入到sys.path里面去,Python就會在sys.path的路徑下搜索對應的.py文件,以上述的main.air腳本為例:
# main.air
from airtest.core.api import *
auto_setup(__file__)
#將test1.air的路徑添加到sys.path里面
sys.path.append(r"D:\test\user\project\test1.air")
using("test1.air")
from test1 import test
test()
這種方法是在運行時修改sys.path,運行結束后失效。
另外你還可以通過設置環境變量PYTHONPATH來增加模塊搜索的路徑,設置方式與設置Path環境變量類似。注意只需要添加你自己的搜索路徑,Python自己本身的搜索路徑不受影響。
在IDE可以運行的腳本到命令行運行就報錯
上文中,我們介紹了倆個方法實現調用,里面的例子是在IDE中運行的;但如果我們直接在命令行中使用airtest run 腳本絕對路徑來運行,有可能又會出現找不到模塊的情況:

這是因為,在IDE里面默認會把父路徑加到sys.path里面,而使用命令行跑腳本的時候,不會默認添加父路徑;為避免以上錯誤,我們可以在腳本里手動把路徑添加到sys.path里面,避免不必要的錯誤。
sys.path.append(r"D:\test\user\project\test1.air")
---------------------------------------------------------------------------------
關注微信公眾號即可在手機上查閱,並可接收更多測試分享~

