1. 程式人生 > 實用技巧 >pytest(三十九)--內建request讀取專案的根目錄 rootdir

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也可以當配置檔案。