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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM