pytest(三十九)--內建request讀取專案的根目錄 rootdir
前言
寫自動化測試專案的時候,經常要用到配置檔案,比如讀取資料庫相關的配置,希望單獨放到config配置檔案,方便維護。
pytest的內建fixture可以獲取到配置相關的資訊,request.config.rootdir 用於獲取專案的根目錄。
config配置檔案
在django下操作的大概步驟:New project——>new python package (如,testcase、config)、conftest.py;
在專案下新建一個config檔案,相關配置資訊用yaml檔案維護資料
在conftest.py下寫讀取配置檔案的fixture,這裡我設定為autouse=True 主要是為了檢視列印讀取到的目錄
import pytest import os import yaml @pytest.fixture(scope="session",autouse=True) def dbinfo(request): dbfile=os.path.join(request.config.rootdir, "config", "dbinfo.yml") print("dbinfo file path:%s"%dbfile) with open(dbfile) as f: db_config=yaml.load(f.read(),Loader=yaml.SafeLoader) print(db_config) return db_config
os.path.join('root','test','a.txt') #將目錄和檔名合成一個路徑 即root/test/a.txt
rootdir讀取
開啟cmd命令列,在專案的根目錄執行用例(即project工程下,也就是pytest0102目錄下)
pytest -s
#test_1.py def test1(): print()
這時候可以看到讀取到的配置檔案地址:D:\Python0811\pytest0102\config\dbinfo.yml
注意:專案的根目錄即工程下,切換都其它目錄(如testcase)下,執行會報錯;
這個時候就會出現報錯:No such file or directory
'D:\Python0811\pytest0102\testcase\config\dbinfo.yml'
因為此時的專案跟目錄就變成了rootdir:D:\Python0811\pytest0102\testcase
接下來我們需要解決的問題是,不管在哪個目錄執行,它的專案根目錄應該都是我們的工程目錄D:\Python0811\pytest0102
pytest.ini
pytest執行用例的時候,專案的rootdir,當沒有pytest.ini配置檔案的時候回根據conftest.py找到它的根目錄
由於前面沒有用到pytest.ini配置檔案,導致不同目錄執行用例的rootdir不一樣。
當專案下存在pytest.ini配置檔案的時候,會認為pytest.ini所在的目錄是rootdir目錄,所以我們一般會把pytest.ini配置檔案放到專案的根目錄。
如果裡面沒有內容,放個空的也行
這時候不管在哪個目錄執行用例都不會有問題了
pytest的配置檔案除了pytest.ini,還有tox.ini和setup.cfg也可以當配置檔案。