zoukankan      html  css  js  c++  java
  • Pytest使用pytest.ini实现环境变量控制

    测试框架中往往要实现环境切换和环境变量的选择,一般的实现方案

    • 使用pytest-base-url,切换base_url配置
    • 使用pytest-variables,配合不同的test.json/beta.json/prod.json文件来实现
      使用的问题
    1. 是json编辑容易出错
    2. 需要建立额外的多个数据文件

    这里考虑借用pytest.ini来完成配置,由于pytest.ini实际只使用了一个[pytest]段,我们可以增加其他段的配置,比如

    • 增加全局变量[global]段
    • 增加不同环境的[test]、[beta]、[prod]段
      如下
    # pytest.ini
    [pytest]
    addopts = -qs  
    env = prod
    
    [global]
    a = 1
    b = 2
    [test]
    a=2
    [beta]
    a=3
    [prod]
    a=4
    

    这里我们需要增加一个命令行选项--env和配置项env来选择使用的环境,并根据环境加载对应环境的变量,全局变量则默认加载

    # conftest.py
    from configparser import ConfigParser
    import pytest
    
    def pytest_addoption(parser):
        parser.addoption("--env", action="store", help="choose env: test,beta,prod")
        parser.addini('env', help="choose env: test,beta,prod")
    
    
    @pytest.fixture(scope='session')
    def env_vars(request):
        config = request.config
        cur_env = config.getoption('--env') or  config.getini('env')
        inifile = config.inifile
        conf = ConfigParser()
        conf.read(inifile)
        variables = {}
        if conf.has_section('global'):
            variables.update(conf.items('global'))
        if conf.has_section(cur_env):
            variables.update(conf.items(cur_env))
        return variables
    

    这里我们编写了一个名为env的fixture方法来拿到指定环境配置的变量,以及全局变量的内容,用例使用如

    # test_demo1.py
    
    def test_demo1(env_vars):
        print(env_vars)
    
  • 相关阅读:
    近期Android学习II
    近期Android学习
    Java中AQS基本实现原理
    Java中CAS 基本实现原理
    SpringBoot 消息国际化配置
    SpringBoot2.0 配置多数据源
    浅谈Java 线程池原理及使用方式
    Java并发编程之闭锁与栅栏
    Java 8 Stream API实例
    第二阶段考试
  • 原文地址:https://www.cnblogs.com/superhin/p/14975057.html
Copyright © 2011-2022 走看看