Python递归通用接口响应深层提取
? ? ? ?最近在做接口自動化斷言時,每個接口文件里都寫了一遍提取接口響應數(shù)據,然后append到列表里,傳給公共的斷言方法與sql查詢出來的數(shù)據做比對,這樣如果是100個接口,每個接口都寫一遍接口響應數(shù)據提取,就要寫100遍,太過依賴于返回數(shù)據的格式了,如果list里面多嵌套幾層,而且都要效驗,那....,通用性也不好,據說遞歸可以實現(xiàn)此通用方法,可以?一層一層拆,提取出自己想要的數(shù)據,組裝一個 自己的數(shù)據組,然后和 預期結果一組一組對比,實現(xiàn)公共斷言方法。
直接或間接的調用自身的函數(shù),稱為遞歸函數(shù)。函數(shù)遞歸包含了一種隱式的循環(huán),它會重復執(zhí)行某段代碼,但這種重復執(zhí)行無須循環(huán)控制。每調用一次自身,相當于復制一份該函數(shù),只不過參數(shù)有變化,參數(shù)的變化,就是重要的結束條件
遞歸函數(shù)特性:
1、必須有一個明確的結束條件;
2、每次進入更深一層遞歸時,問題規(guī)模相比上次遞歸都應有所減少
3、相鄰兩次重復之間有緊密的聯(lián)系,前一次要為后一次做準備(通常前一次的輸出就作為后一次的輸入)。
4、遞歸效率不高,遞歸層次過多會導致棧溢出(在計算機中,函數(shù)調用是通過棧(stack)這種數(shù)據結構實現(xiàn)的,每當進入一個函數(shù)調用,棧就會加一層棧幀,每當函數(shù)返回,棧就會減一層棧幀。由于棧的大小不是無限的,所以,遞歸調用的次數(shù)過多,會導致棧溢出)
5、遞歸次數(shù)有上限
for循環(huán)實現(xiàn)1-100的和:
def sum():x=0for i in range(1,101):x+=ireturn x print(sum())"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py 5050Process finished with exit code 0遞歸實現(xiàn)1-100的和:
def sum(max):if max>=0 and max<=100:return max+sum(max-1)else:return 0 print(sum(100))"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py 5050Process finished with exit code 0json串是一個列表類模塊的接口響應數(shù)據,我想斷言接口響應的字段created_at和updated_at,使用遞歸將這2個字段值提取出來,append到列表里與sql查詢庫里的created_at和updated_at兩個字段做對比,所有同類型接口的斷言可使用此公共方法進行斷言。
接口響應json串如下: json_data={'count_tab_4': 13,'total': 13,'list': [{'created_at': '2019-12-19 16:10:01','updated_at': '2019-12-19 16:15:01','company': {'full_name': '項目','short_name': '項目簡'},'task_sex': 1,'task_user_id_card': '610523198806273676','task': {'type_child_name': '軟件開發(fā)','users_type_txt': '用戶'}}, {'created_at': '2019-12-17 11:25:02','updated_at': '2019-12-17 11:30:02','company': {'full_name': '項目','short_name': '項目簡'},'task_sex': 1,'task_name': '啊啊啊任務啊啊','task': {'type_child_name': '軟件開發(fā)','users_type_txt': '用戶'}}],'page_size': 10,'page': 1 }方法實現(xiàn),提取created_at和updated_at的value組合成list: response_values=[] def test(response_data,keys=[]):if isinstance(response_data,list):for value in response_data:if isinstance(value,list) or isinstance(value,dict):test(value,keys)elif isinstance(response_data,dict):for i,j in response_data.items():if i in keys:response_values.append(j)else:test(j,keys)else:passtest(json_data,['created_at','updated_at']) print(response_values)"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py ['2019-12-19 16:10:01', '2019-12-19 16:15:01', '2019-12-17 11:25:02', '2019-12-17 11:30:02']Process finished with exit code 0?
總結
以上是生活随笔為你收集整理的Python递归通用接口响应深层提取的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 探索篇 | 接口字段容错测试(三)
- 下一篇: html img src