對於接口自動化測試,一般接口以json形式發送返回,往往我們就需要遍歷json文件中所有key,value以及修改替換key對於的value。
例如json發送/接收的文件:
SendRegisterVerificationCodejson_txt = """ { "header":{ "funcNo": "IF010002", "opStation": "11.11.1.1", "appId": "aaaaaa", "deviceId": "kk", "ver":"wx-1.0", "channel": "4" }, "payload": { "mobileTel": "13817120001" } } """
我們需要查找所有的報文中的key,value,這個json是字典包含字典的形式,如遍歷字典后,依舊含有 key對應的value值是字典,需要繼續遍歷,此時需要用遞歸進行處理
import json #json文件發送形式 SendRegisterVerificationCodejson_txt = """ { "header":{ "funcNo": "IF010002", "opStation": "11.11.1.1", "appId": "aaaaaa", "deviceId": "kk", "ver":"wx-1.0", "channel": "4" }, "payload": { "mobileTel": "13817120001" } } """ date_json = json.loads(SendRegisterVerificationCodejson_txt) print(date_json) print("*"*10) # 發送時,每次需要注冊新的手機號碼,就需要json每次提示mobileTel的value進行發送 #遍歷json文件所有的key對應的value dic ={} def json_txt(dic_json): if isinstance(dic_json,dict): #判斷是否是字典類型isinstance 返回True false for key in dic_json: if isinstance(dic_json[key],dict):#如果dic_json[key]依舊是字典類型 print("****key--:%s value--: %s"%(key,dic_json[key])) json_txt(dic_json[key]) dic[key] = dic_json[key] else: print("****key--:%s value--: %s"%(key,dic_json[key])) dic[key] = dic_json[key] json_txt(date_json) print("dic ---: "+str(dic))
其輸出結果:
{'payload': {'mobileTel': '13817120001'}, 'header': {'channel': '4', 'deviceId': 'kk', 'opStation': '11.11.1.1', 'ver': 'wx-1.0', 'funcNo': 'IF010002', 'appId': 'aaaaaa'}} ********** ****key--:payload value--: {'mobileTel': '13817120001'} ****key--:mobileTel value--: 13817120001 ****key--:header value--: {'channel': '4', 'deviceId': 'kk', 'opStation': '11.11.1.1', 'ver': 'wx-1.0', 'funcNo': 'IF010002', 'appId': 'aaaaaa'} ****key--:channel value--: 4 ****key--:deviceId value--: kk ****key--:opStation value--: 11.11.1.1 ****key--:ver value--: wx-1.0 ****key--:funcNo value--: IF010002 ****key--:appId value--: aaaaaa dic ---: {'channel': '4', 'payload': {'mobileTel': '13817120001'}, 'deviceId': 'kk', 'opStation': '11.11.1.1', 'header': {'channel': '4', 'deviceId': 'kk', 'opStation': '11.11.1.1', 'ver': 'wx-1.0', 'funcNo': 'IF010002', 'appId': 'aaaaaa'}, 'mobileTel': '13817120001', 'ver': 'wx-1.0', 'funcNo': 'IF010002', 'appId': 'aaaaaa'} ******************************
對於接口測試,json主體內容不變,一般我們都是修改json內key對於的value值進行測試,這個接口是手機號注冊的接口,正常情況我們都是修改手機號進行測試;
如將key --'mobileTel'對於的value-- '13817120001'修改,假如修改為13333333333;
那我們需要在遍歷json字典key值后,比對如果遍歷到對於的key則修改其value。
def check_json_value(dic_json,k,v): if isinstance(dic_json,dict): for key in dic_json: if key == k: dic_json[key] = v elif isinstance(dic_json[key],dict): check_json_value(dic_json[key],k,v) print("date_json 變更前 :") print(date_json) check_json_value(date_json,'mobileTel','13333333333') print("date_json 變更后 :") print(date_json)
其輸出結果:
date_json 變更前 : {'header': {'appId': 'aaaaaa', 'funcNo': 'IF010002', 'ver': 'wx-1.0', 'opStation': '11.11.1.1', 'deviceId': 'kk', 'channel': '4'}, 'payload': {'mobileTel': '13817120001'}} date_json 變更后 : {'header': {'appId': 'aaaaaa', 'funcNo': 'IF010002', 'ver': 'wx-1.0', 'opStation': '11.11.1.1', 'deviceId': 'kk', 'channel': '4'}, 'payload': {'mobileTel': '13333333333'}}