自動化測試往往需要在多個環(huán)境中跑測試用例,最開始我用pytest+selenium搭建了一套測試工程,使用jenkins管理定時拉起任務(wù),每次需要在另一個環(huán)境跑自動化時就臨時改下配置再拉起任務(wù)。改的次數(shù)多了就煩了,就想辦法解決這個問題,實現(xiàn)在運行時根據(jù)用戶輸入的參數(shù)來決定使用哪個環(huán)境的配置。
要實現(xiàn)運行時根據(jù)用戶輸入來決定使用什么環(huán)境配置,需要借助系統(tǒng)環(huán)境變量,首先運行程序時提取用戶輸入?yún)?shù)并將其寫入環(huán)境變量,然后程序通過讀取系統(tǒng)環(huán)境變量,根據(jù)環(huán)境變量的值來決定要運行的環(huán)境參數(shù),下面列出python示例代碼來演示是如何實現(xiàn)的。
示例代碼
main.py為自動化工程運行的入口,為簡便起見,這里僅將選擇的環(huán)境參數(shù)打印出來,代碼如下:
import sysimport osfrom conf import * class Autotest: def __init__(self): self.running_env = “” self.config = None def get_env_config(self): self.running_env = os.environ[“env”] if “dev” in self.running_env: self.config = DevConfig else: self.config = ProdConfig def show_config(self): print(self.config.desc) print(self.config.demo_url) print(self.config.demo_other) if __name__ == “__main__”: app = Autotest() # 根據(jù)運行輸入?yún)?shù)設(shè)置環(huán)境變量 if len(sys.argv) > 1: os.environ[“env”] = sys.argv[1] else: # 用戶沒有輸入默認設(shè)置環(huán)境為開發(fā)環(huán)境 os.environ[“env”] = “dev” # 讀取環(huán)境變量并根據(jù)環(huán)境變量獲取運行配置 app.get_env_config() app.show_config()
conf.py為環(huán)境配置文件,和main.py在同一個目錄,代碼如下:
class Config: desc = “” demo_url = “” demo_other = “繼承配置項示例” class DevConfig(Config): desc = “開發(fā)環(huán)境” demo_url = “https://localhost:8080″# 未設(shè)置的參數(shù)直接繼承Config的配置class ProdConfig(Config): desc = “生產(chǎn)環(huán)境” demo_url = “https://localhost:8090” # 未設(shè)置的參數(shù)直接繼承Config的配置
測試
接下來實際運行測試一下,cmd下執(zhí)行”python main.py dev”命令將打印如下信息:
開發(fā)環(huán)境https://localhost:8080繼承配置項示例
執(zhí)行”python main.py prod”將打印如下信息:
生產(chǎn)環(huán)境https://localhost:8090繼承配置項示例