1. 程式人生 > 其它 >python使用正則+jsonpath處理介面依賴

python使用正則+jsonpath處理介面依賴

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,即引數替換結果

備註:第一次寫部落格,不好的地方多指教,本文為原創,如有引用,請註明出處,謝謝