一鍵切換測試環境: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
運行測試
這種方法不僅減少了手動修改配置文件的麻煩,還提高了測試的可靠性和可重復性,是自動化測試中的一項實用技巧。
通過不同的配置文件,我們可以輕松管理各種環境的差異,讓測試工作更加高效和規范。
希望本文能幫助你更好地管理測試環境配置。如果有任何問題或建議,歡迎在評論區留言討論!