一.程式碼層實現動態切換
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.開始構建
在構建選項中可以看到我們設定的環境選項以及描述,選擇一個環境後開始構建即可。