httprunner2.x--HttpRunner的hook(钩子)机制:(setup/teardown)用例层面的调用

转载:https://blog.csdn.net/weixin_42007999/article/details/105788094

 

HttpRunner 实现了 hook 机制,hook 就是“钩子”的意思,可以在测试用例的一头和一尾各设置一个钩子,每个钩子可以对应一个提前定义好的函数(在 debugtalk.py 文件中定义),当运行测试用例的时候,这两个钩子会把对应的函数“勾”过来一起执行。放前面的钩子叫 setup,放后面的钩子叫 teardown(这个名称和单元测试工具的道理是一致的)。

 

 

用例中使用 “钩子 hook” 的示意图如下:

 

 

在 HttpRunner 中 hook 机制分为两个层级:

1. 测试用例层面(testcase)

  • 关键字:setup_hooks,测试用例执行前,先调用该关键字内的函数。
  • 关键字:teardown_hooks,测试用例执行后,先调用该关键字内的函数。

 

2. 测试步骤层面(teststep)

  • 关键字:setup_hooks,测试步骤执行前,先调用该关键字内的函数。此时通过传入 $request 参数,可以对请求进行预处理或者修改。
  • 关键字:teardown_hooks,测试步骤执行后,先调用该关键字内的函数。此时通过传入 $response 参数,可以对响应进行处理或者修改。

 

 

 

案例一: 用例层面 hook 的使用

 

在用例执行前和后都自动调用 print_msg() 函数

 

在 debugtalk.py 文件中定义的 hook 函数:

def print_msg(msg):
    """
    hooks函数打印执行的测试用例
    :param msg:
    :return:
    """
    print("执行测试用例:%s" %msg)

  

引入钩子 hook 的测试用例文件:

  • 调用 print_msg()函数,分别传入字符串参数“Begin”和“End”
  • 在执行用例前后位置分别打印“执行测试用例:Begin”和“执行测试用例:End”两句话

api文件

name: 请求百度


request:
    url: https://www.baidu.com/
    method: GET
    headers:
      User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36


validate:
    - eq: [status_code, 200]

测试用例

config:
    name: hooks用例层

    # 执行用例前
    setup_hooks:
        # 调用hooks函数
        - ${print_msg(开始)}

    # 执行用例后
    teardown_hooks:
        # 调用hooks函数
        - ${print_msg(结束)}

teststeps:
-
    name:  测试步骤 - 打开百度页面
    api: api/baidu.yml
    validate:
        - eq: ["status_code", 200]

执行以上测试用例:

  • 钩子函数被调用执行。
  • 在执行用例前后位置分别打印“执行测试用例:开始”和“执行测试用例:结束”两句话。

 

 

 

 

 

 
posted @ 2021-06-04 11:20  莫使娇躯空对月  阅读(300)  评论(0编辑  收藏  举报