一键切换测试环境:Windows 下环境变量设置指南
教你如何通过一个命令让测试脚本自动识别不同环境的配置文件
你是否遇到过这种情况:同一套测试脚本,需要在测试环境、开发环境、预发布环境、生产环境等多种配置中切换?每次都要手动修改配置文件,既麻烦又容易出错。
本文将介绍一种简洁高效的解决方案——通过环境变量控制测试脚本读取不同的配置文件,让你轻松实现"一键切换"测试环境。
一、基本原理:脚本如何知道该读取哪个文件?
测试脚本中通常有这样一段代码:
path_env = "env/" + os.getenv("interface_env", default="test")
这段代码的意思是:
- 尝试获取名为
interface_env
的系统环境变量 - 如果找不到,就使用默认值
"test"
- 最终拼接成配置文件路径:
env/xxx.yaml
这样,只需要改变环境变量的值,脚本就会自动加载不同环境的配置文件。
二、Windows 下两种终端的设置方法对比
Windows 系统中有两种常见命令行工具,它们设置环境变量的方式有所不同:
功能 | PowerShell(推荐) | CMD(传统命令行) |
---|---|---|
设置环境变量 | $env:变量名="值" | set 变量名=值 |
查看环境变量 | $env:变量名 | set 变量名 |
运行测试命令 | pytest .\test_Mulit_env.py | pytest .\test_Mulit_env.py |
示例 | $env:interface_env="develop" | set interface_env=develop |
三、四套环境配置详解
不同环境在软件开发和测试过程中扮演着不同角色,以下是各环境的配置差异全景图:
具体配置文件示例
开发环境配置:env/develop.yaml
# 开发环境 - 供研发联调使用
base:api_url: "http://192.168.1.100:8080/api/v1"web_url: "http://192.168.1.100:3000"
database:host: "dev-mysql.db.example.com"username: "test_dev"password: "dev_123456"name: "order_db_dev"
auth:admin_token: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxMDAwMH0"
log:level: "DEBUG"
测试环境配置:env/test.yaml
# 测试环境 - 供QA团队系统测试
base:api_url: "https://test-api.example.com/api/v1"web_url: "https://test.example.com"
database:host: "test-mysql.db.example.com"username: "qa_tester"password: "QA_2024_secure_PWD!"name: "order_db_test"
auth:test_username: "qa_user01"test_password: "QaTesterPassword!2024"
log:level: "INFO"
预发布环境配置:env/staging.yaml
# 预发布环境 - 上线前最终验证,无限接近生产环境
base:api_url: "https://staging-api.example.com/api/v1"web_url: "https://staging.example.com"
database:host: "prod-ro-mysql.db.example.com" # 生产库只读从库username: "staging_reader"password: "Staging_Read_0nly_2024!" # 只读权限name: "order_db_prod"
auth:# 必须使用真实业务流程获取认证test_username: "real_user@example.com" # 真实测试账号test_password: ""
log:level: "WARN" # 接近生产环境的日志级别
performance:# 预发布环境性能要求较高timeout: 5000retry_attempts: 2
生产环境配置:env/production.yaml
# 生产环境 - 线上真实环境
base:api_url: "https://api.example.com/api/v1"web_url: "https://www.example.com"
database:host: "prod-mysql-cluster.db.example.com" # 生产数据库集群username: "prod_application"password: "Prod_Super_Secure_P@ssw0rd_2024!" # 高强度密码name: "order_db_prod"
auth:# 生产环境使用正规认证流程oauth_url: "https://auth.example.com/oauth/token"client_id: "production_client"client_secret: "************************"
log:level: "ERROR" # 生产环境只记录错误日志sensitive_data_mask: true # 敏感数据脱敏
monitoring:# 监控和告警配置enabled: truealert_email: "ops@example.com"
四、完整操作步骤
方法一:使用 PowerShell(推荐)
# 设置环境变量(仅对当前窗口有效)
$env:interface_env = "develop"# 运行测试脚本
pytest .\test_Mulit_env.py# 验证是否设置成功(可选)
echo $env:interface_env
方法二:使用 CMD(传统命令行)
:: 设置环境变量(仅对当前窗口有效)
set interface_env=develop:: 运行测试脚本
pytest .\test_Mulit_env.py:: 验证是否设置成功(可选)
set interface_env
五、效果验证
执行上述命令后,测试脚本会自动加载对应的配置文件:
- 设置
interface_env="develop"
→ 加载env/develop.yaml
- 设置
interface_env="test"
→ 加载env/test.yaml
- 设置
interface_env="staging"
→ 加载env/staging.yaml
- 设置
interface_env="production"
→ 加载env/production.yaml
- 不设置任何值 → 使用默认值,加载
env/test.yaml
六、常见问题与解决方案
问题 | 原因 | 解决方法 |
---|---|---|
设置不生效 | 环境变量设置错误或未生效 | 通过echo $env:interface_env 或set interface_env 验证 |
权限不足 | 当前用户没有权限设置环境变量 | 以管理员身份运行终端 |
仅当前窗口有效 | 环境变量设置是会话级别的 | 需要永久生效请通过系统属性设置环境变量 |
脚本找不到文件 | 配置文件路径或名称不正确 | 检查env/ 目录下是否存在对应的yaml文件 |
七、高级技巧
1. 批量设置多个环境变量
# 一次性设置多个环境变量
$env:interface_env="develop"
$env:database_env="test"
$env:log_level="debug"
2. 使用脚本自动化
创建一个setup_test.ps1
脚本:
# setup_test.ps1
param($env_name = "test")
$env:interface_env = $env_name
pytest .\test_Mulit_env.py
然后只需执行:
.\setup_test.ps1 "staging"
八、总结
通过环境变量控制测试脚本的行为是一种简单而有效的方法,特别适用于多环境测试场景。只需记住:
- PowerShell 中使用
$env:interface_env="环境名称"
- CMD 中使用
set interface_env=环境名称
- 执行
pytest .\test_Mulit_env.py
运行测试
这种方法不仅减少了手动修改配置文件的麻烦,还提高了测试的可靠性和可重复性,是自动化测试中的一项实用技巧。
通过不同的配置文件,我们可以轻松管理各种环境的差异,让测试工作更加高效和规范。
希望本文能帮助你更好地管理测试环境配置。如果有任何问题或建议,欢迎在评论区留言讨论!