022、內建 fixture 之 pytestconfig
阿新 • • 發佈:2021-08-10
1、內建 fixture 之 pytestconfig
a、pytestconfig 的作用跟 request.config 是一樣的,都是獲取配置物件
pytestconfig 有2個常用的方法:
.getoption() 獲取命令列引數
.getini() 獲取ini配置檔案的引數
示例一:在測試用例test_XXX 函式中使用pytestconfig.getoption( ) 獲取命令列引數
結構層級如下:
conftest.py 程式碼如下:
def pytest_addoption(parser):
parser.addoption(
"--env", action="store",
default="https://www.baidu.com/",
help="Setting environment"
)
"""
parser.addoption, 引數說明:
1、--env:是在命令輸出的引數, 也可以是 --host
2、action="store": action 是 parse_args() 方法的引數之一,
它指示 optparse 當解析到一個命令列引數時該如何處理。
actions 有一組固定的值可供選擇,預設是’store ‘,表示將命令列引數值儲存在 options 物件裡 。
3、default="https://www.baidu.com/": 表示如果在命令列,如果不輸入自己的值,則預設用這個 ;
4、help: 表示在命令列輸入 help 後顯示的資訊 ;
"""
test_jj.py 程式碼如下:
def test_answer_1(pytestconfig):
url = pytestconfig.getoption("--env")
print("獲取到命令列引數:%s" % url)
執行結果如下:
D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day11\jj>pytest -sv ================================================= test session starts ================================================= platform win32-- Python 3.8.6, pytest-5.4.3, py-1.10.0, pluggy-0.13.1 -- c:\skyworkspace\worktools\python\python38\python.exe cachedir: .pytest_cache metadata: {'Python': '3.8.6', 'Platform': 'Windows-10-10.0.19041-SP0', 'Packages': {'pytest': '5.4.3', 'py': '1.10.0', 'pluggy': '0.13.1'}, 'Plugins': {'allure-pytest': '2.9.43', 'html': '2.1.1', 'metadata': '1.11.0'}, 'JAVA_HOME': 'C:\\SkyWorkSpace\\WorkTools\\Java\\jdk1.8\\jdk1.8.0_271'} rootdir: D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day11\jj plugins: allure-pytest-2.9.43, html-2.1.1, metadata-1.11.0 collected 1 item test_jj.py::test_answer_1 獲取到命令列引數:https://www.baidu.com/ PASSED ================================================== 1 passed in 0.03s ================================================== D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day11\jj>
示例二:在測試用例 test_XXX 函式 中使用pytestconfig.getoption( )獲取命令列引數
結構層級如下:
conftest.py 程式碼如下:
import pytest
def pytest_addoption(parser):
parser.addoption(
"--env", action="store",
default="https://www.csdn.com/",
help="Setting environment"
)
"""
parser.addoption, 引數說明:
1、--env:是在命令輸出的引數, 也可以是 --host
2、action="store": action 是 parse_args() 方法的引數之一,
它指示 optparse 當解析到一個命令列引數時該如何處理。
actions 有一組固定的值可供選擇,預設是’store ‘,表示將命令列引數值儲存在 options 物件裡 。
3、default="https://www.baidu.com/": 表示如果在命令列,如果不輸入自己的值,則預設用這個 ;
4、help: 表示在命令列輸入 help 後顯示的資訊 ;
"""
@pytest.fixture
def set_env(pytestconfig):
return pytestconfig.getoption("--env")
test_jj.py 程式碼如下:
def test_answer_2(set_env):
url = set_env
print("獲取到命令列引數:%s" % url)
執行結果如下:
D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day11\jj>pytest -sv =================================================================================== test session starts ==================================================================================== platform win32 -- Python 3.8.6, pytest-5.4.3, py-1.10.0, pluggy-0.13.1 -- c:\skyworkspace\worktools\python\python38\python.exe cachedir: .pytest_cache metadata: {'Python': '3.8.6', 'Platform': 'Windows-10-10.0.19041-SP0', 'Packages': {'pytest': '5.4.3', 'py': '1.10.0', 'pluggy': '0.13.1'}, 'Plugins': {'allure-pytest': '2.9.43', 'html': '2.1.1', 'metadata': '1.11.0'}, 'JAVA_HOME': 'C:\\SkyWorkSpace\\WorkTools\\Java\\jdk1.8\\jdk1.8.0_271'} rootdir: D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day11\jj plugins: allure-pytest-2.9.43, html-2.1.1, metadata-1.11.0 collected 1 item test_jj.py::test_answer_2 獲取到命令列引數:https://www.csdn.com/ PASSED ==================================================================================== 1 passed in 0.03s ===================================================================================== D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day11\jj>
2、getini() 獲取pytest.ini配置引數
在專案的根目錄一般會放一個 pytest.ini 寫一些配置引數
演示層級結構如下:
pytest.ini 程式碼如下:
[pytest]
log_cli = 1
addopts = -v -x
conftest.py 程式碼如下:
import pytest
@pytest.fixture(autouse=True)
def get_ini(pytestconfig):
# 讀取ini配置資訊
# 讀取 log_cli配置
log_cli = pytestconfig.getini('log_cli')
print("獲取到markers :%s" % log_cli)
addopts = pytestconfig.getini('addopts')
print("獲取到addopts的配置:%s " % addopts)
test_kk.py 程式碼如下:
def test_1():
print('\n============測試 test_1 =============')
執行結果如下:
D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day11\kk>pytest -sv =================================================================================== test session starts ==================================================================================== platform win32 -- Python 3.8.6, pytest-5.4.3, py-1.10.0, pluggy-0.13.1 -- c:\skyworkspace\worktools\python\python38\python.exe cachedir: .pytest_cache metadata: {'Python': '3.8.6', 'Platform': 'Windows-10-10.0.19041-SP0', 'Packages': {'pytest': '5.4.3', 'py': '1.10.0', 'pluggy': '0.13.1'}, 'Plugins': {'allure-pytest': '2.9.43', 'html': '2.1.1', 'metadata': '1.11.0'}, 'JAVA_HOME': 'C:\\SkyWorkSpace\\WorkTools\\Java\\jdk1.8\\jdk1.8.0_271'} rootdir: D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day11, inifile: pytest.ini plugins: allure-pytest-2.9.43, html-2.1.1, metadata-1.11.0 collected 1 item test_kk.py::test_1 獲取到markers :True 獲取到addopts的配置:['-v', '-x'] ============測試 test_1 ============= PASSED ==================================================================================== 1 passed in 0.03s ===================================================================================== D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day11\kk>
addopts 引數可以更改預設命令列選項,這個當我們在 cmd 輸入一堆指令去執行用例的時候,就可以用該引數代替了,省去重複性的敲命令工作
比如上面的配置, 命令列輸入pytest執行的時候,會預設帶上的引數,如 ‘pytest -v -x’
log_cli 是控制檯實時輸出日誌,可以設定True 和 False,也可以設定1 和 0