python使用正則+jsonpath處理介面依賴
阿新 • • 發佈:2021-07-30
1、介面2的入參值依賴介面1的響應結果,如介面2的入參ids需要拿到介面1響應結果的id欄位值,測試用例寫在excel中,引數:{"ids":"${$..id}$"}
2、工具類result_utils.py中實現如下:
1)正則表示式:p_data = '\${(.*?)}\$' ,採用的是非貪婪模式
2)查詢要替換的欄位方法,返回列表:
#正則匹配查詢 def res_find(data,pattern_data=p_data): pattern = re.compile(pattern_data) re_res = pattern.findall(data) return re_res param = {"ids":"${$..id}$"} print(res_find(param,p_data)
列印結果:['$..id']3)
3)使用jsonpath從響應結果提取對應欄位的值
#找到值,返回列表;沒找到,返回False,bool值 def save_response(self,result,params): if result: param = jsonpath.jsonpath(result,params) # 提取結果為True if (param==False): raise Exception("提取結果為FALSE,請檢查表示式是否正確") pass else: return param else: raise Exception('響應結果為空,無法提取')
values = Response().save_response(result,'$..id')
value列印結果:單個值['111'],多個值['111','222']
4)拿到了要替換的欄位、和替換的新值,就要開始替換了,寫了一個替換的方法
#正則匹配提取後替換 def res_sub(data,replace,pattern_data=p_data): pattern = re.compile(pattern_data) re_res = pattern.findall(data) if re_res: #replace被替換串 return re.sub(pattern_data,replace,data) return re_resdd
呼叫替換的方法進行引數替換:
params為介面2拿到的入參{"ids":"${$..id}$"},values為上面3)提取的值
value = values[0],values是列表,我是取值第一個
params = res_sub(params, value)
返回params,即引數替換結果
備註:第一次寫部落格,不好的地方多指教,本文為原創,如有引用,請註明出處,謝謝