HttpRunner3.x(7) hook函数

HttpRunner从1.4.5版开始支持hook,在测试用例和步骤级别调用函数。测试用例层级的setup_hooks和teardown_hooks在3.1.11中不支持。测试步骤层级的hook可用于请求前后的处理,如request预处理和response修改。hook函数定义在debugtalk.py中,可以对请求参数和响应进行操作。
摘要由CSDN通过智能技术生成

目录

调用 hook 函数

测试用例层面(testcase)-3.1.11不支持

测试步骤层面(teststep)

编写hook函数

请求request预处理

返回 response 处理


HttpRunner 从 1.4.5 版本开始实现了全新的 hook 机制,可以在请求前和请求后调用钩子函数。

调用 hook 函数

hook 机制分为两个层级:

  • 测试用例层面(testcase)
  • 测试步骤层面(teststep)

测试用例层面(testcase)-3.1.11不支持

在 YAML/JSON 测试用例的 config 中新增关键字 setup_hooks 和 teardown_hooks。

  • setup_hooks: 在整个用例开始执行前触发 hook 函数,主要用于准备工作。
  • teardown_hooks: 在整个用例结束执行后触发 hook 函数,主要用于测试后的清理工作。
- config:
    name: basic test with httpbin
    base_url: http://127.0.0.1:3458/
    setup_hooks:
        - ${hook_print(setup)}
    teardown_hooks:
        - ${hook_print(teardown)}

这里看3.1.11源码,发现config中的setup_hooks和teardown_hooks被注释掉了,所以不起作用。 

测试步骤层面(teststep)

在 YAML/JSON 测试步骤的 test 中新增关键字 setup_hooks 和 teardown_hooks。

  • setup_hooks: 在 HTTP 请求发送前执行 hook 函数,主要用于准备工作;也可以实现对请求的 request 内容进行预处理。
  • teardown_hooks: 在 HTTP 请求发送后执行 hook 函数,主要用于测试后的清理工作;也可以实现对响应的 response 进行修改,例如进行加解密等处理。

config:
    name: "登录成功"
    variables:
        password: tester
        expect_foo2: config_bar2
    base_url: "https://api.pity.fun"
    verify: False
    export:
        - token
    parameters:
        username-password: ${get_account()}
#    setup_hooks:
#        - ${testcase_set_up(setup)}
#    teardown_hooks:
#        - ${testcase_tear_down(teardown)}
teststeps:
-
    name: 登录成功
    variables:
        foo1: bar1
    setup_hooks:
        - ${teststep_set_up()}
    teardown_hooks:
        - ${teststep_tear_down()}
    request:
        method: POST
        url: /auth/login
        headers:
            Content-Type: "application/json"
        json:
            {"username":"$username","password":"$password"}
    extract:
        token: body.data.token
    validate:
        - eq: ["status_code", 200]
        - eq: [body.code,0]
        - eq: [body.msg,"登录成功"]

编写hook函数

hook 函数的定义放置在项目的 debugtalk.py 中,在 YAML/JSON 中调用 hook 函数仍然是采用 ${func($a, $b)} 的形式。

对于测试用例层面的 hook 函数,与 YAML/JSON 中自定义的函数完全相同,可通过自定义参数传参的形式来实现灵活应用。


def teststep_set_up():
    logging.info("开始执行测试步骤")
    print("开始")
def teststep_tear_down():
    logging.info("测试步骤执行结束")
    print("结束")

 

 

对于单个测试用例层面的 hook 函数,除了可传入自定义参数外,还可以传入与当前测试用例相关的信息,包括请求的 $request 和响应的 $response,用于实现更复杂场景的灵活应用。

请求request预处理

针对请求request 发出去的参数预处理,也可以用到 setup_hooks,需传一个内置 request 参数

在测试步骤层面的 setup_hooks 函数中,除了可传入自定义参数外,还可以传入 $request,该参数对应着当前测试步骤 request 的全部内容。因为 request 是可变参数类型(dict),因此该函数参数为引用传递,当我们需要对请求参数进行预处理时尤其有用。

示例:

def get_request(request):
    """输出请求body"""
    print("请求body:",request.get("req_json"))

 

 

返回 response 处理

在测试步骤层面的 teardown_hooks 函数中,除了可传入自定义参数外,还可以传入 $response,该参数对应着当前请求的响应实例(requests.Response)。

示例:

def get_reponse(response):
    print("返回response status_code:", response.status_code)

config:
    name: "登录成功"
    variables:
        password: tester
        expect_foo2: config_bar2
    base_url: "https://api.pity.fun"
    verify: False
    export:
        - token
    parameters:
        username-password: ${get_account()}
#    setup_hooks:
#        - ${testcase_set_up(setup)}
#    teardown_hooks:
#        - ${testcase_tear_down(teardown)}
teststeps:
-
    name: 登录成功
    variables:
        foo1: bar1
    setup_hooks:
        - ${get_request($request)}
    teardown_hooks:
        - ${get_reponse($response)}
    request:
        method: POST
        url: /auth/login
        headers:
            Content-Type: "application/json"
        json:
            {"username":"$username","password":"$password"}
    extract:
        token: body.data.token
    validate:
        - eq: ["status_code", 200]
        - eq: [body.code,0]
        - eq: [body.msg,"登录成功"]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值