在自動化測試中,根據不同的測試需求,我們經常需要在不同的環境下執行測試,pytest提供了一個彈性的機制:Command Line Arguments,讓我們可以通過命令行參數靈活地選擇測試環境。為了達成這個目的,我們需要使用以下兩個重要功能:
- pytest_addoption函式:用於自定義命令行參數,讓我們可以在執行測試時動態傳遞參數。
- pytestconfig或request fixture:用於在測試中獲取這些命令行參數的值,再根據參數執行不同的邏輯。
如何實作
1. 使用pytest_addoption來定義命令行參數
首先,在conftest.py檔案中,我們使用pytest_addoption來定義自訂的命令行參數:#這是一個根據參數來選擇不同設定檔的範例,我們先定義設定檔名稱pytest_addoption中常用到的內建參數:
QA_config = 'qa.prop'
prod_config = 'prod.prop'
def pytest_addoption(parser): #使用pytest_addoption自定義命令行選項
parser.addoption(
"--cmdopt", #命令行參數名稱
action="store", #動作類型
default='QA', #預設值為QA環境
help="選擇測試環境: QA或Prod" #說明文字
)
- name:定義自訂命令行參數的名稱,以--開頭為命名規則。
- action:指定當遇到該參數時要執行的動作,預設為"store"。
- default:若命令行未輸入任何參數,則使用預設值。
- help:提供參數的說明,當執行 pytest --help 時會顯示。
2. 使用pytestconfig取得命令行參數
接著,我們透過pytestconfig fixture來獲取命令行參數的值,並根據傳入的值來讀取對應的設定檔:@pytest.fixture()def CmdOpt(pytestconfig): #根據--cmdopt命令行參數選擇要讀取的設定檔opt = pytestconfig.getoption("cmdopt") #獲取命令行參數值
if opt == 'Prod': #根據參數選擇對應的設定檔f = open(os.path.join(os.path.dirname(__file__), prod_config), 'r')else:f = open(os.path.join(os.path.dirname(__file__), QA_config), 'r')yield f #傳回設定檔的內容給測試函式f.close()
3. 在測試函式中使用CmdOpt fixture
接下來,在測試中使用CmdOpt這個fixture,來讀取設定檔的內容:def test_argstest01(CmdOpt):
print("Read config file:" + CmdOpt.readline()) #讀取並印出設定檔第一行內容
執行測試
- pytest_addoption:增加--cmdopt命令行選項,預設值為 "QA"。
- pytestconfig.getoption:取得命令行參數的值,根據參數值讀取不同的設定檔。
- Fixture cmdopt:讀取設定檔內容並傳遞給測試函式,確保測試結束後正確關閉檔案。
- test_argstest01測試函式:使用cmdopt fixture,輸出設定檔的第一行。
沒有留言:
張貼留言