日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pytest中pytest_addoption用法 动态添加命令行参数 (钩子函数)

發布時間:2025/3/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pytest中pytest_addoption用法 动态添加命令行参数 (钩子函数) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

考慮場景:

  • 我們的自動化用例需要支持在不同測試環境運行,有時候在dev環境運行,有時候在test環境運行;
  • 有時候需要根據某個參數不同的參數值,執行不同的業務邏輯;
  • 上面的場景我們都可以通過“在命令行中輸入參數,然后用例中接收這個參數,通過判斷這個參數的值來做不同的邏輯”來實現。那么我們的需求就變為pytest中如何自定義一個命令行參數呢?這時候我們就需要用到pytest的鉤子函數:pytest_addoption

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

    # file_name: conftest.pyimport pytestdef pytest_addoption(parser):# 注冊自定義參數cmdopt到配置對象parser.addoption("--cmdopt", action="store", default="type1", help="my option: type1 or type2")# 注冊自定義參數env到配置對象parser.addoption("--env", action="store", default="dev", help="env:表示測試環境,默認dev環境")@pytest.fixture() def cmdopt(pytestconfig):# 從配置對象獲取cmdopt的值return pytestconfig.getoption("cmdopt")@pytest.fixture() def env(request):# 從配置對象獲取env的值return request.config.getoption("--env")

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

    # file_name: test_option.pyimport pytestdef 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,運行結果:

    (venv) PS D:\work_project\pytest_project> pytest -s ========================================================================== test session starts =========================================================================== platform win32 -- Python 3.8.10, pytest-6.2.5, py-1.10.0, pluggy-1.0.0 rootdir: D:\work_project\pytest_project collected 1 itemtests\test_file.py 當前測試環境為:dev,域名切換為開發環境 .=========================================================================== 1 passed in 0.02s ============================================================================

    因為我們在conftest.py文件中定義的參數env的默認值為dev,所以當運行時命令行不傳env參數,則使用默認值dev。
    帶參數運行:
    命令行中輸入指令:pytest test_option.py -s --env=test,運行結果:

    (venv) PS D:\work_project\pytest_project> pytest -s --env=test ============================================================================ test session starts ============================================================================= platform win32 -- Python 3.8.10, pytest-6.2.5, py-1.10.0, pluggy-1.0.0 rootdir: D:\work_project\pytest_project collected 1 item tests\test_file.py 當前測試環境為:test,域名切換為測試環境 .============================================================================= 1 passed in 0.02s ==============================================================================

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

    思考:從結果上來看

    pytestconfig.getoption() 和 request.config.getoption()達到的效果是一樣的,詳細分析, 下面是pytest源碼展示:

    @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

    parser.addoption() 參數說明:

    1.name:自定義命令行參數的名字,可以是:“foo”, “-foo” 或 “–foo”; 2.action:在命令行中遇到此參數時要采取的基本操作類型; 3.nargs:應該使用的命令行參數的數量; 4.const:某些操作和nargs選擇所需的常量值; 5.default:如果參數不在命令行中,則生成的默認值。 6.type:命令行參數應該轉換為的類型; 7.choices:參數允許值的容器; 8.required:命令行選項是否可以省略(僅可選); 9.help:對參數作用的簡要說明; 10.metavar:用法消息中參數的名稱; 11.dest:要添加到 parse_args() 返回的對象中的屬性的名稱;

    挑幾個比較常用的來演示 action 、default 和 const、help :

    action=“store”:默認,只存儲參數的值,可以存儲任何類型的值,此時 default 也可以是任何類型的值,而且命令行參數多次使用也只能生效一個,最后一個值覆蓋之前的值

    action=“append”:存儲一個列表,用 append 模式 將可以同時多次使用自定義參數,并且 default 默認值必須是一個列表,pytest 會把 default 默認參數的值和多個自定義參數的值放在一個列表中

    action=“store_const”:使用 const 為命令行參數指定一個常量值,必須和 const 參數同時使用,使用這個模式后命令行參數不能賦值

    action=“append_const”:存儲一個列表,使用 const 為命令行參數指定一個常量值,并將 default 默認值和 const 常量值添加到列表中,這個模式可以同時多次使用自定義參數,但是還是不能賦值,只能使用常量

    type:type 的類型可以是 python 的基礎類型,比如:int,str,float,list 等類型,如果不指定類型的話,pytest會把接受到的參數值都默認為 str 類型,所以我們有時需要指定參數的類型:
    注意:在使用 type 指定類型時,也需要把 default 的類型修改為同樣的類型!

    choices:choices 可以指定幾個值,自定義參數必須在這幾個值中選擇一個,否則會報錯:

    總結

    以上是生活随笔為你收集整理的pytest中pytest_addoption用法 动态添加命令行参数 (钩子函数)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。