最近自動化測試參數化使用了yaml文件進行存放,簡單記錄讀取和寫入操作
1.讀取如下yaml文件中的具體value值代碼如下
#測試環境IP、端口 host: localhost:8080 --- #仿真環境IP、端口 host: localhost:8081
def filePath(fileDir, fileName): return os.path.join( os.path.dirname(os.path.dirname(__file__)), fileDir, fileName) def readYaml(filePath): with open(filePath, 'r', encoding='utf-8') as f: return list(yaml.safe_load_all(f)) fileDir = 'config' file = 'config.yaml' data = readYaml(filePath(fileDir, file)) print(data[0]['host']) # 打印結果為:localhost:8080
2.寫入操作,常用作上個操作返回的值將其寫入yaml文件,供后面操作讀取使用,yaml文件及參考代碼如下:
def set_state(docNumber, key, value): file_name = "test.yaml" with open(file_name, 'r', encoding="utf-8") as f: doc = list(yaml.safe_load_all(f)) # 將類型轉換為list類型 # print(list(doc)) doc[docNumber][key] = value with open(file_name, 'w', encoding="utf-8") as f: yaml.safe_dump_all(doc, f, default_flow_style=False) set_state(value='http://122.123.124.125:8888', docNumber=1, key='host')
執行后的結果為:
host: localhost:8080 --- host: http://122.123.124.125:8888
注意:yaml文檔由“---”分隔,如果任何流(例如文件)包含多個文檔,則應使用yaml.safe_load_all
函數,而不是yaml.safe_load;
寫入非“---”分隔的文檔時,使用yaml.safe_load、yaml.safe_dump即可,同時不需要轉換類型;參考代碼如下:
def set_state(key, value): file_name = "test.yaml" with open(file_name, 'r', encoding="utf-8") as f: doc = yaml.safe_load(f) doc[key] = value with open(file_name, 'w', encoding="utf-8") as f: yaml.safe_dump(doc, f, default_flow_style=False)