1. 程式人生 > 其它 >022、內建 fixture 之 pytestconfig

022、內建 fixture 之 pytestconfig

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