Python-pytest -> 在自動化測試中,如何切換不同的測試環境
阿新 • • 發佈:2022-05-25
在構建自動化測試的指令碼時候,我們可能會有不同環境的測試需求,如何實現在不同的測試環境之間切換呢?接下來介紹的這種方法,可以自定義命令列引數,從而根據不同的引數值實現不同環境的切換。
解決辦法:
使用hook 鉤子函式之addoption:
step1: 在專案的根目錄下,建立conftest.py檔案(名字是指定的,不要改動)
step2: 在此檔案中,定義pytest_addoption方法,定義的內容參考如下:
import pytest # Register argparse-style options and ini-style config values, called once at the beginning of a test run. def pytest_addoption(parser): parser.addoption( "--name", action="store", default="Test name", help="default value for argument name", )
引數說明:
- name:自定義命令列引數的名字,可以是:"xx", "-xx" 或 "--xx"
- action:在命令列中遇到此引數時要採取的基本操作型別
- - store:預設,只儲存引數的值,可以儲存任何型別的值,此時 default 也可以是任何型別的值,而且命令列引數多次使用也只能生效一個,最後一個值覆蓋之前的值
- - append:儲存一個列表,用 append 模式將可以同時多次使用自定義引數,並且 default 預設值必須是一個列表,pytest 會把 default 預設引數的值和多個自定義引數的值放在一個列表中
- - store_const:用 const 為命令列引數指定一個常量值,必須和 const 引數同時使用,使用這個模式後命令行引數不能賦值
- default:如果引數的值不在命令列中,則使用預設值
- help:對引數作用的簡要說明
【注】: 其他的引數可以詳細參考第一個連結
step3: 定義方法以獲取自定義引數的值:
# 使用request.config.getoption("--命令列")獲取命令列引數的值
@pytest.fixture(scope="session")
def get_env(request):
"""從配置物件中讀取自定義引數的值"""
return request.config.getoption("--name")
【注】: 通過 request.config.getoption("--env_opt") 來獲取引數名為"--env_opt"的引數值。(可寫在一個方法裡,全域性呼叫就可以獲取到)
step4: 全域性呼叫get_env方法,可以直接獲取到自定以引數的值。
【注】: 如果想要新增不同的自定義引數,可以在之前定義的pytest_addoption方法中,繼續新增,比如:
import pytest
def pytest_addoption(parser):
parser.addoption(
"--name",
action="store",
default="Test name",
help="default value for argument name",
)
parser.addoption(
"--env_opt",
action="store",
default="dev",
help="default value for the current running environment",
)
@pytest.fixture(scope="session")
def get_env(request):
"""從配置物件中讀取自定義引數的值"""
return request.config.getoption("--name")
@pytest.fixture(scope="session")
def get_env(request):
"""從配置物件中讀取自定義引數的值"""
return request.config.getoption("--env_opt")
參考連結:
- pytest自動化測試執行環境切換的兩種解決方案 - 小公瑾 - 部落格園 (cnblogs.com)
- Pytest_Hook函式pytest_addoption(parser):定義自己的命令列引數(14-1) - 不自在 - 部落格園 (cnblogs.com) (最有啟發)
- pytest中pytest_addoption用法 動態新增命令列引數 (鉤子函式)_一葉知秋的BLOG的部落格-CSDN部落格
- pytest中pytest_addoption用法_旅途上的揹包客的部落格-CSDN部落格
- 【pytest】Hook 方法之 pytest_addoption :註冊命令列引數_waitan2018的部落格-CSDN部落格_pytest pytest_addoption
- (官網)API Reference — pytest documentation