httprunner3.0 封装header,只用写一遍

2021-04-23  本文已影响0人  gz_tester

httprunner2.0 还支持在config中增加headers,但是httprunner3.0 就不再支持了

想了很多办法,发现钩子函数[hooks]能做到,把方法分享给大家

介绍下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
上一篇下一篇

猜你喜欢

热点阅读