前言
今天我們來講一個大家經常問到或者經常容易出錯的一個問題--如何調用別的.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")
---------------------------------------------------------------------------------
關注微信公眾號即可在手機上查閱,並可接收更多測試分享~