美文网首页
httprunner3.0 封装header,只用写一遍

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

作者: gz_tester | 来源:发表于2021-04-23 16:10 被阅读0次

    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
    

    相关文章

      网友评论

          本文标题:httprunner3.0 封装header,只用写一遍

          本文链接:https://www.haomeiwen.com/subject/fugcrltx.html