ETJava Beta | Java    注册   登录
  • 搜索:
  • jenkins动态切换环境

    发表于      阅读(1)     博客类别:Crawler     转自:https://www.cnblogs.com/lihongtaoya/p/18390111
    如有侵权 请联系我们删除  (页面底部联系我们)  

    一.代码层实现动态切换

    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.开始构建

     在构建选项中可以看到我们设置的环境选项以及描述,选择一个环境后开始构建即可。