MuskTest为了支持自定义用例前后置执行的一些用例数据准备和清理,支持在funcTools中自定义钩子函数,并提供了四个字段来指定用例前后置执行的钩子函数。分别为

setup_hook:用例级别前置钩子 (每条用例执行之前会执行)

setup_class_hook:用例级别前置钩子

teardown_hook:测试集级别后置钩子

teardown_class_hook:测试集级别后置钩子

如何你在测试的过程中定义的钩子函数特别多的情况下,全部写在functools中会很臃肿,不好管理,建议在项目目录下创建一个hooks目录, 在hooks目录中可以创建多个py文件来分类管理你的钩子函数。但是最后一定要把你写的钩子函数导入到funcTools中。

1、setup_hook

为了方便在用来前置钩子函数中添加和修改环境变量,setup_hook的钩子必须定义两个参数,ENV和env,MuskTest在执行钩子函数时会自动化传入。

钩子函数定义示例

import random
def random_phone_hook(ENV, env):
    """
    随机生成一个手机号码,保存为全局变量user_phone
    :param ENV: 用来接收全局环境变量
    :param env: 用来接收全局环境变量
    :return:
    """
    phone=''
    for i in range(8):
        phone += str(random.randint(0, 9))
    ENV.user_phone = env  

提示:env和ENV是MuskTest种定义的一种增强型的字典,支持字典键值对的形式往里面添加变量,也支持以添加属性的形式来添加变量

钩子函数的使用

在写用例数据时可以通过setup_hook指定用例级别的前置钩子函数,下面以yaml文件为例

-testSet:
    # 域名
    host: http://api.musk.com/app/
    # 指定用例前置钩子函数
    setup_hook: random_phone_hook
    # 用例数据
    Cases:
      # 用例1:普通用户注册
      - title: 普通用户注册
        interface: member/register
        method: post
        json:
          mobile_phone: ${{user_mobile}}
          pwd: musk

2、setup_class_hook

setup_class_hook和setup_hook一样,在定义钩子的时候一样,也需要定义两个参数,ENV和env,在使用的时候通过setup_class_hook这个字段指定。

钩子函数的使用

下面以yaml文件为例

-testSet:
    # 域名
    host: http://api.musk.com/app/
    # 指定测试集前置钩子函数
    setup_class_hook: random_phone_hook
    # 用例数据
    Cases:
      # 用例1:普通用户注册
      - title: 普通用户注册
        interface: member/register
        method: post
        json:
          mobile_phone: ${{user_mobile}}
          pwd: musk

4、teardown_hook

teardown_hook在钩子在定义的时候一样,出来需要定义ENV和env之外,还可以定义第三个参数response,可以用来接收该用例子请求的响应对象,我们根据自己的需求在后置的钩子函数中,可以对响应对象中的数据进行提取,或者进行其他的操作

钩子函数的定义

import random
def get_response_hook(ENV, env,response):
    """
    随机生成一个手机号码,保存为全局变量user_phone
    :param ENV: 用来接收全局环境变量
    :param env: 用来接收全局环境变量
    :param response: 接口请求的响应对象
    :return:
    """
    # 获取响应状态码
    status = response.status_code
    # 获取响应头
    header = response.header
    # 获取响应体的内容
    body= response.text

钩子函数的使用

-testSet:
    # 域名
    host: http://api.musk.com/app/
    # 指定测试集前置钩子函数
    teardown_hook: get_response_hook
    # 用例数据
    Cases:
      # 用例1:普通用户注册
      - title: 普通用户注册
        interface: member/register
        method: post
        json:
          mobile_phone: ${{user_mobile}}
          pwd: musk

5、teardown_class_hook

teardown_class_hook和前面的setup_hook一样,在定义钩子的时候一样,也需要定义两个参数,ENV和env,在使用的时候通过teardown_class_hook这个字段指定钩子函数。

钩子函数的定义


def del_phone_hook(ENV, env):
    """
    删除全局变量种的user_phone
    :param ENV: 用来接收全局环境变量
    :param env: 用来接收全局环境变量
    :return:
    """
    del ENV['user_phone']

钩子函数的使用

下面以yaml文件为例

- testSet:
    # 域名
    host: http://httpbin.org
    # 请求头
    headers:
      UserAgent: python/musktest
    # 请求接口
    interface: /post
    # 请求方法
    method: post
    # 用例前置钩子函数
    setup_hook: setup_hook_demo
    teardown_hook": teardown_hook_demo
    # 结果校验字段
    verification:
      - ["eq", 200, "status_code"]
    # 用例数据
    Cases:
      # 用例1:
      - title: 用例1-使用工具函数生成手机号码
        json:
          mobile_phone: F{random_mobile()}
          pwd: musk