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