Pytest多环境切换的常见方法介绍

2025-04-12 05:50

本文主要是介绍Pytest多环境切换的常见方法介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进...

你是否也遇到过这种情况:本地测试通过,一到测试环境就翻车?环境变量错乱、接口地址混乱、数据源配置丢失……这些「环境切换」问题简直像定时炸弹,随时引爆你的测试流程!

测试人员每天都跟不同的环境打交道,比如线上环境,测试环境,预上线环境等等,那么作为自动化测试人员写的代码,我们也要具备能自由切换环境的能力,那么今天小编就给大家聊一下,如何能让我们python语言写的测试用例可以自由切换到不同的环境下面去运行呢

Pytest 作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换?有没有一种通用、实用、可复用的方案?

“Pytest如何实现环境切换,让测试适应不同场景?”这个问题曾让我挠头。配置文件怎么写?参数怎么传?能不能自动化切换而不用手动改代码?带着这些疑编程问,我开始摸索Pytest的环境管理功能。从简单的命令行参数到复杂的配置文件,我发现它不仅灵活,还能无缝对接团队协作。那么,具体该怎么操作呢?接下来,让我们一起进入实战,揭开Pytest环境切换的奥秘。

今天给他大家聊一下通过pytest框架实现自由环境切换的几种方法。

1.pytest-base-url

pytest有一个插件叫pytest-base-url ,是管理base_url非常好的一款插件,文档资料链接:https://pypi.org/project/pytest-base-url/

下载方式:

pip install pytest-base-url

Pytest多环境切换的常见方法介绍

案例如下:

import requests
 
 
def test_demo(base_url):
    resp = requests.get(base_url)
    status_code = resp.status_code
    assert status_code == 200

第1种使用方式是终端添加--base-url这个命令,如下所示:

Pytest多环境切换的常见方法介绍

第2种使用方式是在pytest.ini配置文件种去配置base_url,然后自动读取url的数据,这样就不用添加--base-url这个命令行参数了:

Pytest多环境切换的常见方法介绍

命令行直接运行pytest http://www.chinasem.cn即可。

2.hooks函数

pytest有个hooks函数,可以自定义命令行参数,一般在confjavascripttest.py中去引用。

Conftest.py中写pytest_addoption这个hooks函数,可以自定义命令行参数,base_url只能对一个url地址进行传递,那么有的项目不仅需要多项目请求的url地址进行不同环境的切换,还需要对mysql的url地址进行不同的切换,这个时候就可以用自定义命令,定义不同的命令行参数,这样我们在执行pytest的时候就可以自由进行传递。

代码如下:

通过pytest_addoption这个hooks函数,设置了两个命令行参数,一个是--mysql-url,另一个是--project-url,help后面是对这两个命令行的解释,解释说明这两个命令行代表什么含义

import pytest
 
 
def pytest_addoption(parser):KLVjiowq
    parser.addoption(
        "--mysql-url", action="store", help="这里可以传递mysql的url地址"
    )
    parser.addoption(
        "--project-url", action="store", help="这里可以传递项目的url地址"
    )

通过fixture函数中的request参数去读取命令行中传递的参数,赋值给一个变量,就可以在pytest中随便使用。

@pytest.fixture(scope='class')
def get_url(request):
    mysql_url = request.config.getoption('--mysql-url')
    project_url = request.config.getoption('--project-url')
    return mysql_url, project_url

项目代码如下:

fixture函数的调用,直接把fixture的名字当成参数传递到测试用例里面即可

import requests
 
 
def test_demo(get_url):
    mysql_url = get_url[0]
    print('mysql_url的地址是{}'.format(mysql_url))
    
    project_url = get_url[1]
    resp = requests.get(project_url)
    status_code = resp.status_code
    
    assert status_code == 200

运行测试的命令为:

pytest -s --mysql -url 192.168.1.11--project-url http://www.example.com

如下图所示:

Pytest多环境切换的常见方法介绍

3.yml和fixture

通过 yml文件 和 fixture 进行配合使用,首先在项目目录下面创建一个conf.yml,然后里面去手动配置现在要运行的环境,截图如下:

Pytest多环境切换的常见方法介绍

然后在创建一个conftest.py,里面定义两个fixture函数,一个用来读取conf.yml里面的内容,另一个用来配置具体的环境信息

比如qa环境,release环境,然后通过conf.yml里面配置的qa还是release,来读取project_url 和 mysql_url,截图如下:

import pytest
import yaml
 
 
@pytest.fixture(scope="session")
def config():
    with open('./conf.yml', 'r', encoding='utf-8') as f:
        conf = yaml.load(f.read(), Loader=yaml.FullLoader)
    return conf
 
 
@pytest.fixture(scope="session")
def env_vars(config):
    env = config["env"]
    mapping = {
        "qa": {
            "project_url": "http://121.42.15.146:9090",
            "mysql_url": "192.168.1.1"
        },
        "release": {
            "project_url": "https://release.com",
            "mysql_url": "127.0.0.1"
        }
    }
    project_url = mapping[env]["project_url"]
    mysql_url = mapping[enphpv]["mysql_url"]
    return mysql_url, project_url

项目代码(还是之前的测试用例)如下:

import requests
 
 
def test_demo(env_vars):
    mysql_url = env_vars[0]
    print('mysql_url的地址是{}'.format(mysql_url))
    
    project_url = env_vars[1]
    resp = requests.get(project_url)
    status_code = resp.status_code
    
    assert status_code == 200

命令行运行方式,正常运行即可,截图如下:

Pytest多环境切换的常见方法介绍

结论

随着 CI/CD 流水线普及,多环境并存已成常态。测试人员面临的环境复杂度越来越高,若不能实现配置统一、切换自如,将严重拖慢测试效率,甚至引发线上事故。

环境切换看似是小问题,实则影响自动化测试流程的稳定性与扩展性。掌握 Pytest 中的配置管理,就等于掌握了自动化测试的方向盘。

总的来说,Pytest的环境切换通过命令行参数、配置文件和插件支持,让测试灵活适应各种场景。从单人开发到团队协作,它都能大幅提升效率。这不仅是技术实践,更是现代测试思维的体现。掌握环境切换,你的测试流程将更加顺畅,代码质量也能更上一层楼。

测试环境千万条,配置管理第一条;配置不统一,Bug泪两行。

以上就是Pytest多环境切换的常见方法介绍的详细内容,更多关于Pytest多环境切换的资料请关注China编程(www.chinasem.cn)其它相关文章!

这篇关于Pytest多环境切换的常见方法介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154190

相关文章

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊