🧾 一、項目背景
????????在自動化測試中,我們經常需要根據不同的運行環境(如測試環境和生產環境)來執行測試腳本。本文將詳細介紹如何通過命令行參數來指定運行環境,并使用 Python 和 pytest 框架實現這一功能。
🛠? 二、配置文件設置
首先,在項目的配置文件中定義不同環境下的相關參數。以 setting.py 文件為例:
# 優先從環境變量讀取運行環境
DOMAIN_ENV = os.getenv("DOMAIN_ENV", "test") # 默認為 testDOMAINS = {"prod": "https:********", # 線上環境域名"test": "http:*********" # 測試環境域名
}# Webhook 配置(用于企業微信消息推送)
WEBHOOK_URLS = {"prod": "https:***************", # 線上企微機器人地址"test": "https:***************" # 測試企微機器人地址
}# 根據當前環境選擇基礎域名
DOMAIN = DOMAINS.get(DOMAIN_ENV, DOMAINS["test"]) # 默認使用測試環境# 獲取當前環境下的 Webhook URL
WEBHOOK_URL = WEBHOOK_URLS.get(DOMAIN_ENV, WEBHOOK_URLS["test"])# 獲取 token 的配置
TOKEN_CONFIGS = {"prod": {"M": {"url": "/*********", # 登錄接口"headers": {"Content-Type": "application/json; charset=UTF-8"},"data": {"username": "員工1", "password": "123456"},"jsonpath_expr": "$.data.accessToken"},"P": {"url": "/*********", # 登錄接口"headers": {"Content-Type": "application/json; charset=UTF-8"},"data": {"username": "員工2", "password": "123456"},"jsonpath_expr": "$.data.accessToken"}},"test": {"M": {"url": "/*********", # 登錄接口"headers": {"Content-Type": "application/json; charset=UTF-8"},"data": {"username": "員工3", "password": "123456"},"jsonpath_expr": "$.data.accessToken"},"P": {"url": "/*********", # 登錄接口"headers": {"Content-Type": "application/json; charset=UTF-8"},"data": {"username": "員工4", "password": "123456"},"jsonpath_expr": "$.data.accessToken"}}
}# 當前環境下的 token 配置
TOKEN_CONFIG_M = TOKEN_CONFIGS[DOMAIN_ENV]["M"]
TOKEN_CONFIG_P = TOKEN_CONFIGS[DOMAIN_ENV]["P"]
在這個配置文件中,我們定義了兩個環境:prod 和 test,并且可以根據環境變量 DOMAIN_ENV 來決定使用哪個環境。
📦 三、主程序邏輯
接下來,我們需要編寫一個主程序來解析命令行參數,并據此設置環境變量。以下是 run.py 文件的內容:
import os
import argparsedef main():"""主函數負責解析命令行參數并調用測試運行邏輯。"""# 定義 ArgumentParser 并解析所有參數parser = argparse.ArgumentParser(description="運行測試用例并生成 Allure 報告")parser.add_argument("--test-path",type=str,default="tests",help="測試文件或目錄的路徑,默認為 'tests'")parser.add_argument("--extra-args",nargs="*",default=[],help="額外的 pytest 命令行參數")parser.add_argument("--env",type=str,default="test",choices=["test", "prod"],help="指定運行環境: test 或 prod,默認為 test")args = parser.parse_args()# 設置環境變量os.environ["DOMAIN_ENV"] = args.envprint(f"Setting DOMAIN_ENV to: {args.env}")# 運行 pytestpytest.main()# 從 conftest 中導入全局變量 failed_resultsfrom conftest import failed_resultssend_to_wechat_robot(WEBHOOK_URL, failed_results)
解釋:
1、命令行參數解析:
- --test-path: 指定測試文件或目錄的路徑,默認是 tests。
- --extra-args: 允許傳遞額外的 pytest 命令行參數。
- --env: 指定運行環境,可選值為 test 或 prod,默認是 test。
2、設置環境變量:
- 在解析完命令行參數后,我們將環境變量 DOMAIN_ENV 設置為用戶提供的值。這樣,當我們在代碼中訪問這個環境變量時,就可以知道應該使用哪個環境的配置。
3、運行測試:
- 使用 pytest.main() 方法來運行測試,并傳遞構建好的命令行參數。
- 最后,將失敗的結果發送到企業微信機器人。
🔁 四、命令行運行腳本
要運行腳本并指定測試環境,可以使用以下命令:
python run.py --env=test
或者對于生產環境:
python run.py --env=prod
你還可以指定測試路徑和其他 pytest 參數:
python run.py --env=test --test-path=tests/smoke --extra-args="--html=report.html"
? 五、總結
????????通過以上步驟,我們可以輕松地根據命令行參數來指定運行環境,并且能夠靈活地控制測試腳本的行為。這種方法不僅提高了測試腳本的靈活性,還使得在不同環境中切換變得非常簡單。希望這篇文章對你有所幫助!