Robot Framework中Python加載相對路徑DLL

    在前一篇博文<<Python調用C/C++動態鏈接庫>>中,提到如何使用Python使用C/C++編譯成的DLL,從而讓自動化測試中調用過程更加靈活。在Robot Framework,使用Python編寫函數對A.DLL進行加載,A.DLL又依賴於B.DLL,於是將A.DLL和B.DLL放到Robot Framework工程目錄下,即工程執行case時的工作目錄。OK,這樣沒有任何問題,可是你能夠忍受就將這些DLL毫無規矩的放在這個地方嗎?這樣會顯得工程的組織較亂。

    那麼讓我們一起先來看看,我的Robot Framework工程“Robot Automation”的組織結構:


     DLL目錄中存放着A.DLL和B.DLL,PythonLibrary目錄中存放着test.py(如下所示),其首先獲得test.py的文件路徑,然後根據獲得的路徑連接"DLL\\A.dll"即爲A.dll的全路徑。

from ctypes import *
import os.path
import sys

dllName = "DLL\\A.dll";
dllABSPath = os.path.dirname(os.path.abspath(__file__)) + os.path.sep + dllName;
dll = cdll.LoadLibrary(dllABSPath);
     在Robot Framework中導入test.py庫,執行任意的case,這樣的代碼加載A.dll肯定沒有問題了?如果你和我一樣天真,那就錯了。失敗!!!

    問題在哪裏呢?雖然我們指定了A.DLL的路徑,但因爲A.DLL依賴於B.DLL,於是系統根據Dynamic-Link Library Search Order尋找B.DLL,尋找失敗。如何解決這個問題呢?只需要在我們的代碼將B.DLL所在目錄加入到系統環境變量"PATH"中去即可,一起來看看修改後的test.py:

from ctypes import *
import os.path
import sys

os.environ['path'] += ';C:\\Users\\admin\\Desktop\\Robot Automation\\SPNT.AUTOMATION\\PythonLibrary';
dllName = "A.dll";
dllABSPath = os.path.dirname(os.path.abspath(__file__)) + os.path.sep + dllName;
dll = cdll.LoadLibrary(dllABSPath);

     Ok,如果您還有更好的意見或者需要再討論的,歡迎。




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