pytest不使用 conftest.py 传递配置参数并设置全局变量

  1. 创建config_handler.py
python 复制代码
import os
import yaml

# 当前路径(使用 abspath 方法可通过dos窗口执行)
current_path = os.path.dirname(os.path.abspath(__file__))
# 上上级目录
ffather_path = os.path.abspath(os.path.join(current_path,"../../"))

global_config_path = os.path.join(ffather_path, r"conf/config.yaml")  # 默认yaml文件路径

def load_config(config_path=None):
    global global_config_path
    if config_path:
        global_config_path = config_path

    with open(global_config_path, 'r', encoding='utf-8', errors='ignore') as file:
        data = yaml.load(file, Loader=yaml.FullLoader)

    return data
  1. conftest.py
python 复制代码
import pytest
import config_handler

def pytest_addoption(parser):
    parser.addoption(
        "--config", action="store",  # 定义--config参数,用于接收配置文件的路径
        help="Path to the configuration file"
    )

def pytest_configure(config):
    config_path = config.getoption("--config")
    config_handler.global_config_path = config_path  # 设置全局配置文件路径
  1. test_script.py
python 复制代码
import config_handler

def test_example():
    config_data = config_handler.load_config()
    # 使用config_data进行测试

执行命令:pytest .\TestCases\A\test_add.py -s --config=conf/config_test.yaml

说明:

  • config_handler.py 包含加载配置文件的逻辑和全局变量的管理。
  • conftest.py

pytest_configure 函数用于初始化全局配置文件路径,根据命令行参数 --config 的值来设置全局变量。

pytest_addoption是一个 pytest 插件系统中的钩子函数,用于添加自定义的命令行选项。当 pytest 执行时,会调用这个函数来注册你定义的选项。

def pytest_addoption(parser):parser.addoption(...) 的结合使用,你定义了一个新的 pytest 命令行选项 --config,使得用户可以在运行 pytest 时通过命令行传递一个配置文件的路径

  • test_script.py 中的测试函数可以直接使用 config_handler.load_config() 来加载配置文件。

通过以上方式,可以根据需要选择合适的项目结构和需求的方法来传递配置参数,并在整个项目中共享和使用这些配置。

相关推荐
青 春 记 忆1 小时前
LeetCode 21. 合并两个有序链表|Python 解法详解
python·算法·leetcode·链表
大数据魔法师3 小时前
DuckDB高阶实战指南!多文件处理、窗口函数、性能调优、工程化落地
python·数据分析
Patrick在香港4 小时前
Python Docker镜像从1.2GB到89MB:多阶段构建的完整优化实录
java·python·docker·信息可视化·容器·数据分析·ai编程
上海安当技术4 小时前
敏感数据怎么防拖库?信封加密(DEK+KEK 二层密钥)架构设计与 Java 实战
java·开发语言·python
我是唐青枫4 小时前
Java JCommander 实战详解:用注解解析命令行参数
java·开发语言
大鹏说大话4 小时前
C++ 内存布局详解:类、虚函数、虚表底层原理
java·开发语言
还是鼠鼠5 小时前
Spring AI连接DeepSeek与通义千问:application.yaml配置详解
java·通义千问·spring ai·deepseek
QAQo7T5 小时前
Python组蓝桥杯备赛超详细知识点总结笔记_排序算法篇
笔记·python·算法·蓝桥杯·排序算法
醉颜凉5 小时前
蓝桥杯2025年第十六届省赛真题-最大数字 Python题解
python·职场和发展·蓝桥杯
计算机小白一个6 小时前
蓝桥杯 Java B 组之哈希表应用(两数之和、重复元素判断)
java·数据结构·算法·蓝桥杯