一. 從數據庫中讀取所有接口,並寫入yaml文件mysql
數據庫中的數據存儲格式以下圖:ios
import pymysql import os import json # from ruamel import yaml import yaml #第一步:從數據庫中取出全部接口記錄存成一個字典 def query(sql): con=pymysql.connect(host='192.168.249.152',user='root',password='123456',db='test_api',charset='utf8')#鏈接數據庫 cur=con.cursor()#獲取遊標 cur.execute(sql)#執行sql list = [] for id,pathGroup,path,param,method in cur.fetchall():#查詢記錄,fetchall用法參見注釋1 ever = { 'pathgroup': pathGroup, 'path': path, 'param': param if param == '' else json.loads(param), 'method': method } #將每個接口造成一個字典格式,param若是寫成'param':param的話會有坑(坑1) #print(ever) list.append(ever)#將每個接口字典變成列表元素 坑2 result={'content':list} #再變成一個大字典存起來,爲了後面寫入yaml文件的是一個字典 cur.close() con.close() return result #返回大字典 #第二步:寫入yaml文件 result_yaml=query('select * from t_api')#調用接口將返回的全部數據存起來(參數爲查詢數據庫全部數據) print(result_yaml)#打印出來看看 a=os.path.dirname(os.path.realpath(__file__))#os.path.dirname返回目錄,os.path.realpath返回絕對路徑 print('a===',a) yamlpath=os.path.join(a,'testcase.yaml')#os.path.join拼接出yaml文件的路徑 with open(yamlpath,'w',encoding='utf-8') as f:#w是寫入文件,先刪除原文件,再從新建立並寫入 yaml.dump(result_yaml,f)#yaml.dump把生成的yaml文檔寫到文件裏,yaml.dump接收的第二個參數必定要是一個文本文件或二進制文件 # if __name__=='__main__': # query('select * from t_api')
註釋1:sql
爲了方便演示,我這裏新建了一個test數據表,有id,university,name這3個字段,主要內容以下:json
查詢數據,這裏主要用到fetchall、fetchone、fetchamany這3個函數,其中fetchall是查詢知足條件的全部記錄,fetchone是查詢知足條件的第一條記錄,fetchamany是自定義查詢知足條件的記錄,測試代碼以下:api
程序運行截圖以下,已經成功查詢出4條記錄:app
坑1:函數
這裏的param須要寫成:'param': param if param == '' else json.loads(param),param若是寫成'param':param的話輸出的結果就是post
{'pathgroup': 'arrange', 'path': 'arrange/kanban/getDeptList', 'param': '{'date': '2019-07-12'}', 'method': 'post'} ,param的value變成了字符串,這樣的話寫入到yaml文件也是個字符串,在後續解析yaml文件的時候不能解析,這裏的value必須是個字典格式,測試
因此寫成了json.loads(param),意思是將字符串轉換成字典格式
坑2:
這裏最開始寫成了:a=list.append(ever),這樣寫是錯誤的,list.append()直接寫就行不須要前面加個變量