欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中pytest命令行實現環(huán)境切換

 更新時間:2023年07月17日 10:25:01   作者:知識的寶藏  
在自動化測試過程中經常需要在不同的環(huán)境下進行測試驗證,所以寫自動化測試代碼時需要考慮不同環(huán)境切換的情況,本文主要介紹了Python中pytest命令行實現環(huán)境切換,感興趣的可以了解一下

前言

在自動化測試過程中經常需要在不同的環(huán)境下進行測試驗證,所以寫自動化測試代碼時需要考慮不同環(huán)境切換的情況。pytest鉤子函數pytest_addoption可以很好幫我們解決這個痛點。

pytest_addoption(parser, pluginmanager)

注冊argparse樣式選項和ini樣式配置值,在測試運行開始時調用一次。

注意:

由于pytest在啟動過程中如何發(fā)現插件,因此該函數只能在位于測試根目錄的插件或conftest.py文件中實現。

參數

parser(pytest.parser)–若要添加命令行選項,請調用parser.addoption(…)。若要添加ini文件值,請調用解析器.addini(…)。

pluginmanager(pytest.PytestPluginManager)–pytest插件管理器,可用于安裝hookspec()或hookpimpl(),并允許一個插件調用另一個插件的鉤子來更改命令行選項的添加方式。

以后可以分別通過配置對象訪問選項:

config.getoption(name)來檢索命令行選項的值。

config.getini(name)來檢索從ini樣式文件中讀取的值。

config對象通過.config屬性在許多內部對象上傳遞,或者可以作為pytestconfig fixture檢索。

在conftest.py文件中定義命令行參數

def pytest_addoption(parser):
    """
    添加命令行參數
    parser.addoption為固定寫法
    default 設置一個默認值,此處設置默認值為sit
    choices 參數范圍,傳入其他值無效
    help 幫助信息
    """
    parser.addoption(
        "--env", default="sit", choices=["dev", "sit", "uat"], help="環(huán)境參數"
    )

我們定義了不同環(huán)境下的命令參數:dev、sit、uat,我們怎么獲取運行的命令行參數呢?

獲取命令行參數

@pytest.fixture(scope="session")
def get_env(request):
    return request.config.getoption("--env")

設置不同環(huán)境的全局變量

在不同的測試環(huán)境下,URL、用戶信息等數據都是不一樣的,建議在conftest中給全局變量賦值可以減少代碼冗余。

先定義一個數據文件,data_util.py分別獲取用戶信息和URL信息

def get_env():
    env = {
        'sit': 'www.baidu.com',
        'uat': 'www.hao123.com'
    }
    return env
def get_user():
    users = {
        'sit': ['user1', 'pwd1'],
        'uat': ['user2', 'pwd2']
    }
    return users

然后在conftest中根據環(huán)境設置全局變量值

# 設置不同環(huán)境下的全局變量
@pytest.fixture(scope="session")
def set_env(get_env):
    if get_env == 'sit':
        env_url = data_util.get_env()['sit']
        user = data_util.get_user()['sit']
    if get_env == 'uat':
        env_url = data_util.get_env()['uat']
        user = data_util.get_user()['uat']
    return {'env_url': env_url, 'user': user}

注意fixture的使用范圍為整個測試會話。

以下是完整的conftest

import pytest
import data_util
def pytest_addoption(parser):
    """
    添加命令行參數
    parser.addoption為固定寫法
    default 設置一個默認值,此處設置默認值為sit
    choices 參數范圍,傳入其他值無效
    help 幫助信息
    """
    parser.addoption(
        "--env", default="sit", choices=["dev", "sit", "uat"], help="環(huán)境參數"
    )
@pytest.fixture(scope="session")
def get_env(request):
    return request.config.getoption("--env")
# 設置不同環(huán)境下的全局變量
@pytest.fixture(scope="session")
def set_env(get_env):
    if get_env == 'sit':
        env_url = data_util.get_env()['sit']
        user = data_util.get_user()['sit']
    if get_env == 'uat':
        env_url = data_util.get_env()['uat']
        user = data_util.get_user()['uat']
    return {'env_url': env_url, 'user': user}

定義測試類及測試方法

注意fixture不能在x-unit風格下的setup\teardown中引用,因此需要使用fixture定義setup、teardown方法才能引用到conftest里的fixture,一般我們在setup方法中初始化環(huán)境變量具體如下:

@pytest.fixture()
def class_fixture(set_env):
    print('setup_class')
    url = set_env.get('env_url')
    user = set_env.get('user')
    print(url, user)
    yield
    print('teardown class')

這樣我們就在測試前把環(huán)境信息設置OK了。

測試驗證

以下是測試方法

import pytest
pytestmark = pytest.mark.usefixtures("module_fixture")
@pytest.fixture(scope="module", params=["test_fixture"])
def module_fixture(request):
    param = request.param
    print("  SETUP module", param)
    yield param
    print("  TEARDOWN module", param)
@pytest.fixture()
def class_fixture(set_env):
    print('setup_class')
    url = set_env.get('env_url')
    user = set_env.get('user')
    print(url, user)
    yield
    print('teardown class')
@pytest.fixture(scope="function", params=[1, 2])
def function_fixture(request):
    param = request.param
    print("  SETUP function", param)
    yield param
    print("  TEARDOWN function", param)
@pytest.mark.usefixtures('class_fixture')
class TestFixture:
    def test_0(self, function_fixture):
        print("  RUN test0 with function_fixture", function_fixture)
    def test_1(self, module_fixture):
        print("  RUN test1 with module_fixture", module_fixture)
    def test_2(self, function_fixture, module_fixture):
        print(f"  RUN test2 with function_fixture {function_fixture} and module_fixture {module_fixture}")
    def test_env(self, get_env):
        print(f"The current environment is: get_env")
if __name__ == '__main__':
    pytest.main(['-v', '-s','--env=uat', 'test_fixture.py::TestFixture::test_0'])

我們首先填的uat命令運行,查看輸出:

可以看出輸出是正確的,我們再切換成sit試試:

if __name__ == '__main__':
    pytest.main(['-v', '-s','--env=uat', 'test_fixture.py::TestFixture::test_0'])

可以看出在不同的命令下獲得的測試數據也不一樣,這樣我們就達到了環(huán)境切換的目的了~

到此這篇關于Python中pytest命令行實現環(huán)境切換的文章就介紹到這了,更多相關pytest 環(huán)境切換內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python實現的IP端口掃描工具類示例

    Python實現的IP端口掃描工具類示例

    這篇文章主要介紹了Python實現的IP端口掃描工具類,結合實例形式分析了Python基于socket模塊與多線程操作實現IP端口掃描的相關操作技巧,需要的朋友可以參考下
    2019-02-02
  • pygame多種方式實現屏保操作(自動切換、鼠標切換、鍵盤切換)

    pygame多種方式實現屏保操作(自動切換、鼠標切換、鍵盤切換)

    這篇文章主要介紹了pygame多種方式實現屏保操作(自動切換、鼠標切換、鍵盤切換),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Python unittest 簡單實現參數化的方法

    Python unittest 簡單實現參數化的方法

    今天小編就為大家分享一篇Python unittest 簡單實現參數化的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • django從后臺返回html代碼的實例

    django從后臺返回html代碼的實例

    這篇文章主要介紹了django從后臺返回html代碼的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python pywifi ERROR Open handle failed問題及解決

    Python pywifi ERROR Open handle fai

    這篇文章主要介紹了Python pywifi ERROR Open handle failed問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • python文件操作整理匯總

    python文件操作整理匯總

    本文主要記錄了個人在項目中遇到的一些Python中對于文件、文件夾的操作需要涉及到的函數等內容,非常的詳盡,有需要的可以參考下
    2014-10-10
  • Python變量和字符串詳解

    Python變量和字符串詳解

    本篇文章主要介紹了Python變量和字符串的相關資料。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • python實現計算資源圖標crc值的方法

    python實現計算資源圖標crc值的方法

    這篇文章主要介紹了python實現計算資源圖標crc值的方法,通過解析資源文件找到icon的數據,從而實現該功能,需要的朋友可以參考下
    2014-10-10
  • python中如何設置list步長

    python中如何設置list步長

    這篇文章主要介紹了python中如何設置list步長,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python中的正斜杠與反斜杠實例驗證

    python中的正斜杠與反斜杠實例驗證

    這篇文章主要介紹了python中的正斜杠與反斜杠實例驗證,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03

最新評論