jenkins動態切換環境

余生没有余生發表於2024-08-31

一.程式碼層實現動態切換

1.首先在conftest.py下宣告pytest_addoption鉤子函式,寫法如下

def pytest_addoption(parser):
    # 設定要接收的命令列引數
    parser.addoption("--env", default="prod", choices=['pre', 'uat', 'prod', 'test'],
                     help="命令列引數,--env設定環境切換")

--env:命令列引數

default:啟動時未傳--env,則預設值為prod

choices:引數值範圍

help:命令列說明,可在終端執行:pytest --help檢視

2.config檔案下建立config.ini配置檔案,寫法如下

[HOST]
pre=https://pre-www.baidu.com
prod=http://www.baidu.com
uat=https://uat-www.baidu.com
test=https://test-www.baidu.com

這裡不同環境對應的是不同地址

3.common在建立basecase封裝讀取ini檔案的方法

def read_ini(config_path):
    with open(config_path, mode='r') as f:
        dict_ini = {i.strip().split('=')[0]: i.strip().split('=')[1] for i in f.readlines()[1:]}
        return dict_ini

config_path為ini地址,return返回的是處理過後的dict格式資料

4.用例層呼叫方法拿到不同的環境地址

from common.basecase import read_ini
from common.headle_path import config_path


# @pytest.mark.order(1)
def test_login(request,webdriver_init):
    custom_arg = request.config.getoption("--env")
    webdriver_init.get(read_ini(config_path)[custom_arg])

request:固定寫法,透過request.config.getoption('--env')來獲取啟動時傳遞的引數

webdriver_init:conftest中初始化webdriver的韌體函式

5.main.py中啟動用例

import pytest

if __name__ == '__main__':
    pytest.main(['-s', '-v', '--env=prod'])

二.jenkins實現動態切換

基礎配置可參考:https://www.cnblogs.com/lihongtaoya/p/18351371

1.在job配置下選擇:This project is parameterized

填寫名稱,選項,以及描述

2.Execute Windows batch command下填寫win執行命令

%env%:表示執行python指令碼時向程式碼中傳遞一個值,env就是在This project is parameterized下設定的名稱

3.如何取到這個值

python中可以透過os模組中argv列表來獲取,run.py寫法如下

import sys

import pytest

if __name__ == '__main__':
    # pytest.main(['-s', '-v', '--env=prod'])
    arg_one = sys.argv[1]
    pytest.main(['-s', '-v', f'--env={arg_one}'])

sys.argv[1]:表示獲取傳遞的一個值

4.開始構建

在構建選項中可以看到我們設定的環境選項以及描述,選擇一個環境後開始構建即可。

相關文章