pytest文檔63-內置fixture之pytestconfig


前言

前面講 request 是pytest的一個內置 fixture ,作用是獲取測試的上下文,可以通過request.config 獲取配置對象。
pytestconfig 的作用跟 request.config 是一樣的,都是獲取配置對象

pytestconfig 源碼分析

pytestconfig 是一個內置fixture,用於獲取配置對象 pytestconfig 源碼
pytestconfig 有2個常用的方法

  • .getoption() 獲取命令行參數
  • .getini() 獲取ini配置文件的參數
@fixture(scope="session")
def pytestconfig(request: FixtureRequest) -> Config:
    """Session-scoped fixture that returns the :class:`_pytest.config.Config` object.

    Example::

        def test_foo(pytestconfig):
            if pytestconfig.getoption("verbose") > 0:
                ...

    """
    return request.config

從上面的源碼看出,實際返回的就是 request.config

使用示例

def test_foo(pytestconfig):
    if pytestconfig.getoption("verbose") > 0:
        ...

getoption() 獲取命令行參數

獲取命令行參數的案例,在前面講過很多次了,這個也是用的最廣泛的

# content of conftest.py
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
import pytest


def pytest_addoption(parser):
    parser.addoption(
        "--cmdopt", action="store", default="type1", help="my option: type1 or type2"
    )

@pytest.fixture
def cmdopt(pytestconfig):
    return pytestconfig.getoption("--cmdopt")

測試用例

# test_cmdopt.py
import pytest
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

def test_answer_1(pytestconfig):
    type = pytestconfig.getoption("--cmdopt")
    print("獲取到命令行參數:%s" % type)


def test_answer_2(cmdopt):
    print("獲取到命令行參數:%s" % cmdopt)

命令行運行用例的時候,可以用 --cmdopt 參數

>pytest -s test_cmdopt.py --cmdopt type2
================== test session starts =======
platform win32 -- Python 3.6.6, pytest-4.5.0, py-1.9.0, pluggy-0.13.1
rootdir: D:\wangyiyun\web\cases\module2
rerunfailures-9.1, xdist-2.1.0
collected 2 items

test_cmdopt.py 獲取到命令行參數:type2
.獲取到命令行參數:type2
.

================== 2 passed in 0.06 seconds ==========

getini() 從 pytest.ini 配置文件獲取參數

在項目的根目錄一般會放一個 pytest.ini 寫一些配置參數

[pytest]

log_cli = 1

addopts = -v -x

我們想讀取 pytest.ini 里面的配置信息,可以用 pytestconfig.getini() 來獲取,使用示例

# conftest.py
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/


@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_cmdopt.py::test_answer_1 獲取到markers :True
獲取到db的配置:['-v', '-x']
獲取到命令行參數:type1
PASSED

addopts 參數可以更改默認命令行選項,這個當我們在 cmd 輸入一堆指令去執行用例的時候,就可以用該參數代替了,省去重復性的敲命令工作
比如上面的配置, 命令行輸入pytest運行的時候,會默認帶上的參數,如 ‘pytest -v -x’
log_cli 是控制台實時輸出日志,可以設置True 和 False,也可以設置1 和 0

log_cli

log_cli 是控制台實時輸出日志,可以設置True 和 False,也可以設置1 和 0,默認是關閉狀態(False)

當 log_cli = 0 或默認的 False 狀態時,命令行輸入 pytest 運行用例,在控制台輸出是按每個模塊顯示運行結果

collected 6 items

test_1.py ..                                                                    [ 33%]
test_anothersmtp.py .                                                           [ 50%]
test_cmdopt.py ..                                                               [ 83%]
test_y.py .                                                                     [100%]

============================== 6 passed in 1.80 seconds ==============================

當log_cli = 1后 運行 pytest 命令

collected 6 items

test_1.py::test_answer_1 PASSED                                                 [ 16%]
test_1.py::test_answer_2 PASSED                                                 [ 33%]
test_anothersmtp.py::test_showhelo PASSED                                       [ 50%]
test_cmdopt.py::test_answer_1 PASSED                                            [ 66%]
test_cmdopt.py::test_answer_2 PASSED                                            [ 83%]
test_y.py::test_i PASSED                                                        [100%]

============================== 6 passed in 0.84 seconds ==============================

這時候報告會按每條用例顯示結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM