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