天天看點

httprunner3.0 封裝header封裝方法作者:gz_tester 連結:https://www.jianshu.com/p/b0bad20ec015 來源:簡書 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

介紹下hook函數

1. setup_hooks

setup_hooks: 在 HTTP 請求發送前執行 hook 函數,主要用于準備工作;也可以實作對請求的 request 内容進行預處理。

在測試步驟層面的 setup_hooks 函數中,除了可傳入自定義參數外,還可以傳入 $request,該參數對應着目前測試步驟 request 的全部内容。因為 request 是可變參數類型(dict),是以該函數參數為引用傳遞,當我們需要對請求參數進行預處理時尤其有用。

2. teardown_hooks

teardown_hooks: 在 HTTP 請求發送後執行 hook 函數,主要用于測試後的清理工作;也可以實作對響應的 response 進行修改,例如進行加解密等處理。

在測試步驟層面的 teardown_hooks 函數中,除了可傳入自定義參數外,還可以傳入 $response,該參數對應着目前請求的響應執行個體(requests.Response)。

封裝方法

def get_x_param_key(body):
    """
    生成x_param_key
    :param body: 
    :return: 
    """
    date_time = int(round(time.time() * 1000))
    md5 = hashlib.md5("{}{}".format(hashlib.md5(body.encode()).hexdigest(), date_time).encode()).hexdigest()

    return "{}{}{}{}".format(md5[0:10], md5[10:len(md5) - 10], date_time, md5[len(md5) - 10:])


def headers(request: dict):
    """
    封裝headers
    :param request: 
    :return: 
    """
    # 擷取headers,此時headers={}
    header_dict = request.get("headers", {})
    
    # 擷取json,此時json=實際yaml中的json
    json_dict = request.get("req_json")

    # 擷取x-param-key需要的body
    body = ""
    if None is not json_dict:
        body = json.dumps(request['req_json'])
    
    # 把header需要的字段傳入
    header_dict['x-param-key'] = get_x_param_key(body)
    header_dict['Content-Type'] = "application/json"
    
    # 最後返給request
    request["headers"] = header_dict
           

yaml中的調用方法

config:
    name: ×××
    variables:
        username: ${super_admin()}
    base_url: ${base_url()}
teststeps:
-   name: getIsVisible
    setup_hooks:               # 調用鈎子函數
        - ${headers($request, $username)}
    request:
        json:
          username: $username
        method: POST
        url: ×××
    validate:
    -   eq:
        - status_code
        - 200
           

作者:gz_tester

連結:https://www.jianshu.com/p/b0bad20ec015

來源:簡書

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

繼續閱讀