pytest動態添加命令行參數並獲取(鈎子函數:pytest_addoption)


  考慮場景:

  1. 我們的自動化用例需要支持在不同測試環境運行,有時候在dev環境運行,有時候在test環境運行;
  2. 有時候需要根據某個參數不同的參數值,執行不同的業務邏輯;

上面的場景我們都可以通過“在命令行中輸入參數,然后用例中接收這個參數,通過判斷這個參數的值來做不同的邏輯”來實現。那么我們的需求就變為pytest中如何自定義一個命令行參數呢?這時候我們就需要用到pytest的鈎子函數:pytest_addoption

通過conftest.py配置

  新建一個conftest.py文件,然后在conftest.py文件中通過pytest_addoption方法來添加命令行參數,通過定義的fixture來獲得參數的值。

# file_name: conftest.py


import pytest


def pytest_addoption(parser):
    parser.addoption(
        "--cmdopt", action="store", default="type1", help="my option: type1 or type2"
    )
    parser.addoption(
        "--env", action="store", default="dev", help="env:表示測試環境,默認dev環境"
    )


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


@pytest.fixture()
def env(request):
    return request.config.getoption("--env")

上面conftest.py文件中新增了兩個命令行參數:--cmdopt和--env;然后定義了兩個fixture,在測試用例中想要獲得參數--cmdopt的值,就可以調用cmdopt函數;調用env函數可以獲取參數--env的值。

編寫測試用例:

# file_name: test_option.py

import pytest


def test_option(env):
    if env == 'dev':
        print("當前測試環境為:{},域名切換為開發環境".format(env))
    elif env == 'test':
        print("當前測試環境為:{},域名切換為測試環境".format(env))
    else:
        print("環境錯誤,當前環境{}不存在".format(env))


if __name__ == '__main__':
    pytest.main(['-s', 'test_option.py'])

上面例子是獲取env的值,針對env值的不同做不同的操作。

不帶參數運行:

命令行中輸入指令:pytest test_option.py -s,運行結果:

  因為我們在conftest.py文件中定義的參數env的默認值為dev,所以當運行時命令行不傳env參數,則使用默認值dev。

帶參數運行:

命令行中輸入指令:pytest test_option.py -s --env=test,運行結果:

  從結果中可以看到,命令行中輸入參數env=test,在測試用例中獲取到通過fixture獲取到env的值為test。


免責聲明!

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



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