首页 > 其他分享 >jenkins动态切换环境

jenkins动态切换环境

时间:2024-08-31 12:14:27浏览次数:13  
标签:__ -- pytest 切换 env jenkins 动态 config ini

一.代码层实现动态切换

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

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

 

标签:__,--,pytest,切换,env,jenkins,动态,config,ini
From: https://www.cnblogs.com/lihongtaoya/p/18390111

相关文章

  • lambdaQueryWrapper及动态获取字段名
    实体对象importcom.baomidou.mybatisplus.annotation.TableField;importlombok.Data;@Data@Table("")publicclassUser{privateLongid;@TableField("t_name")privateStringname;@TableField("t_age")priv......
  • 动态规划 之《从入门到入土》
    bushi动态规划的几个模板and例题背包问题01背包顾名思义,一个东西只有选和不选两种选择。求体积一定的包里能放的最大质量。 for(inti=1;i<=n;i++) { for(intj=m;j>=w[i];j--)//w[i]表示物品i的体积 { f[j]=max(f[j],f[j-w[i]]+v[i]);//v[i]表示物品i的质......
  • CSS、JS之动态展开式菜单
    效果演示实现了一个可展开菜单按钮的效果,点击按钮会弹出一个菜单列表,菜单列表中包含多个选项。按钮的样式为一个圆形背景,中间有三条横线,表示可以展开。当按钮被点击后,三条横线会变成一个叉号,表示可以收起。菜单列表的样式为一个白色背景,四周有阴影,包含多个选项,每个选项都有......
  • 无缝切换:Bypass交换机在关键任务网络中的应用
    在关键任务网络中,如金融交易系统、空中交通控制或紧急服务通信,任何形式的网络中断都可能导致严重的后果。因此,确保网络的高可用性变得至关重要。Bypass交换机,也称为旁路交换机或冗余交换机,通过提供无缝切换功能,在这些网络中发挥着至关重要的作用。本文将探讨Bypass交换机如何实现网......
  • 第九章 动态规划Part12
    目录任务115.不同的子序列思路583.两个字符串的删除操作思路72.编辑距离思路任务115.不同的子序列给你两个字符串s和t,统计并返回在s的子序列中t出现的个数,结果需要对10^9+7取模。思路dp[i][j]表示s[0:i)中出现以t[0,j)的次数每次拓展一个字符,求次数,直到拓......
  • JS动态引入模块
    这是静态引入,importxxfrom‘xxx’;这是动态引入,import('xxx')动态引入是一个异步操作,即它会返回一个Promise对象,因此我们可以捕获引入失败的异常。具体运用场景:路由由后端动态生成,前端根据获取到的路由动态生成菜单,并根据对应路由去找到对应的组件进行跳转。譬如路由为/hom......
  • vite3接入vue-quill:处理图片,自定义字体和字体大小,切换源码模式
    环境适用版本:node:14.21.2"vue":"^3.2.26""vite":"^3.1.0"安装模块:"@vueup/vue-quill":"^1.2.0","quill-html-edit-button":"^3.0.0","quill-image-resize-module":"^3......
  • 实现一个动态评论系统:Vue3与后端API交互
    在当今的开发环境中,评论系统是多种应用中不可或缺的一部分,本文将带您深入了解如何使用Vue3实现一个动态评论系统,并与后端API进行交互。我们将重点使用Vue3的compositionAPI(setup语法糖)来构建这个系统。需求概述在构建动态评论系统时,我们需要实现以下功能:获取评论......
  • openGauss-动态数据脱敏机制
    openGauss-动态数据脱敏机制可获得性本特性自openGauss1.1.0版本开始引入。特性简介数据脱敏是行之有效的数据库隐私保护方案之一,可以在一定程度上限制非授权用户对隐私数据的窥探。动态数据脱敏机制是一种通过定制化制定脱敏策略从而实现对隐私数据保护的一种技术,可以有效......
  • 神经网络释放GPU显存两种方式(固定or动态)
    固定的批次数后释放显存固定的批次数后释放显存,比如每训练100批次释放一次显存,可以通过在训练循环中添加一个计数器来实现。以下是如何实现这种策略的示例代码:importtorchdeftrain():start_epoch=0end_epoch=100release_frequency=100#每100个批次......