1、概念介绍:

  • 用例文件:MuskTest中创建的每一个test开头的(py,json,yaml)文件,就是一个用例文件

  • 用例集:每个用例文件下可以创建多个用例集。一个用例集下面可以定义多条测试用例。

    • py用例文件中,一个测试类就是一个用例集
    • json用例文件最外层的数组中,一个对象就是一个用例集
    • yaml用例文件中,使用testSet来定义用例集
  • 测试用例: 用例集中Cases字段中的一条数据就是一个测试用例

2、用例集的主要字段介绍

name: 用例集的名字

name = "登录场景用例"

host:用例接口的host地址(接口的域名)

host = "http://api.xxx.com/"

headers:指定用例使用的请求头

headers = {"User-Agent": "musktest/musen"}

method:指定用例接口的请求方法

method = 'post'

interface:指定用例接口地址(接口url域名后面的部分)

interface = '/user/login'

env: 设置用例集运行环境的局部变量

 env = {
        "user_mobile": '13109099878',
        "pwd": 'musk'
    }

extract:指定用例请求完要提取的变量(详细介绍见:【四、变量提取和引用】

verification:指定用例的断言(详细介绍见:【五、用例断言】

Cases:设置该测试集下的用例(详细介绍见:下一节【用例字段介绍】

3、用例字段介绍

3.1、主要字段:

用例集中除env和Cases字段之外,上述用例集中的字段,均支持在用例中自定义。如果用例中定义了用例集中的字段,就使用自己定义的,没定义则引用 用例集中的。

1、title:用例的描述字段(必传字段)测试报告和日志信息中显示用例的描述

2、json: 用来传递json类型的请求参数,请求参数类型为:content-type:application/json,使用该字段来传递请求参数

3、data:用来传递表单类型的请求参数,请求参数类型为:content-type: application/x-www-form-urlencoded,使用该字段来传递请求参数

4、params: 用来查询字符串参数,请求参数,以?key=value的形式 拼接在url后面的参数

5、files: 参数类型为:content-type:application/from-data,使用该字段来传递请求参数,常用于文件上传

# 文件上传的参数格式支持如下两种传递形式
"files": {
    "fieldname": ["19.png", r"./image/19.png", "image/png"]
 }
#或
"files": [
    ("fieldname",["18.png", r"./image/18.png", "image/png"]),
    ("fieldname",["18.png", r"./image/18.png", "image/png"])
]

# 说明:
fieldname:为接口上传文件的参数名,后面列表中的参数值为,[文件类名,文件路径,文件类型]

3.2、其他字段

除了上述主要字段之外,python中的requests库中的requests.request方法所有的请求参数,均支持在用例中定义字段,这些字段在大多数情况下都用不到,如果有用到

  • cookies:请求的cookie信息(MuskTest中同一个用例集会自动化传递cookie,一遍情况下,不需要使用该字段来传递cookie)

  • auth: 用于Basic/Digest/Custom HTTP认证

  • timeout:设置http请求超时时间

  • allow_redirects:是否运行请求重定向

  • proxies:代理请求的

  • stream:是否立即下载响应内容

  • verify:是否进行证书校验(如果要忽略HTTPS请求的证书校验,则将此参数设置为False)

  • cert:指定校验证书的路径

4、用例编写

4.1、python编写用例

步骤一、在case_py目录中定义一个以test开头的py文件,

步骤二、在文件中定义一个以Test开头的类,并且继承于MuskTest.core.httptest.HttpCase类

步骤三、在类中,编写测试集的字段值

from musktest.core.httptest import HttpCase
class TestDomeV3(HttpCase):
    host = "http://api.xxxx.com/app/"
    headers = {"X-musk-Media-Type": "musk.v2"}
    # 定义测试前置方法
    setup_hook = 'get_timestamp'
    # 预设变量
    env = {
        "user_mobile": 'F{rand_phone("155")}',
        "admin_mobile": 'F{rand_phone("133")}'
    }
    # 结果校验
    verification = [
        ["eq", 0, 'V{{$..code}}'],
        ["eq", "OK", "V{{$..msg}}"]
    ]

步骤四、在Cases字段中编写用例数据

from musktest.core.httptest import HttpCase
class TestDomeV3(HttpCase):
    host = "http://api.XXXX.com/app/"
    headers = {"X-musk-Media-Type": "musk.v2"}
    # 定义测试前置方法
    setup_hook = 'get_timestamp'
    # 预设变量
    env = {
        "user_mobile": 'F{rand_phone("155")}',
        "admin_mobile": 'F{rand_phone("133")}'
    }
    # 结果校验
    verification = [
        ["eq", 0, 'V{{$..code}}'],
        ["eq", "OK", "V{{$..msg}}"]
    ]
    Cases = [
        # 用例1:普通用户注册
        {
            'title': "普通用户注册",
            'interface': "member/register",
            "method": "post",
            'json': {"mobile_phone": "${{user_mobile}}", "pwd": "musk"},

        },
        # 用例2:管理员注册
        {
            'title': "管理员注册",
            'interface': "member/register",
            "method": "post",
            'json': {"mobile_phone": "${{admin_mobile}}", "pwd": "musk", "type":0}
        },
   ]

4.2、yaml编写用例

注意点:使用yaml编写用例前 建议先去学习一下yaml的语法

步骤一:在case_yaml目录中定义test开头的yaml文件

步骤二:在yaml文件中定义测试集,编写测试集中的用例

# 定义一个用例集
- testSet:
    # 域名
    host: http://api.xxxxx.com/app/
    # 请求头
    headers:
      X-musk-Media-Type: musk.v2
    # 用例前置钩子函数
    setup_hook: get_timestamp
    # 预设运行变量
    env:
      user_mobile: F{rand_phone("155")}
      admin_mobile: F{rand_phone("133")}
    # 结果校验字段
    verification:
      - ["eq", 0, 'V{{$..code}}']
      - ["eq", "OK", "V{{$..msg}}"]

步骤三:在Cases字段中编写测试用例

- testSet:
    # 域名
    host: http://api.xxxxx.com/app/
    # 请求头
    headers:
      X-musk-Media-Type: musk.v2
    # 用例前置钩子函数
    setup_hook: get_timestamp
    # 预设运行变量
    env:
      user_mobile: F{rand_phone("155")}
      admin_mobile: F{rand_phone("133")}
    # 结果校验字段
    verification:
      - ["eq", 0, 'V{{$..code}}']
      - ["eq", "OK", "V{{$..msg}}"]
    # 用例数据
    Cases:
      - title: 普通用户注册
        interface: member/register
        method: post
        json:
          mobile_phone: ${{user_mobile}}
          pwd: musk
      - title: 管理员注册
        interface: member/register
        method: post
        json:
          mobile_phone: ${{admin_mobile}}
          pwd: musk
          type: 0

如果一个用例文件中有多个用例集,则按照如下规范编写

# 用例集1
- testSet:
    # 域名
    host: http://api.xxxxx.com/app/
    # 用例数据
    Cases:
      - title: 普通用户注册
        interface: member/register
        method: post
        json:
          mobile_phone: ${{user_mobile}}
          pwd: musk
# 用例集2
- testSet:
    # 域名
    host: http://api.xxxxx.com/app/
    # 用例数据
    Cases:
      - title: 普通用户注册
        interface: member/register
        method: post
        json:
          mobile_phone: ${{user_mobile}}
          pwd: musk
# 用例集3
- testSet:
    # 域名
    host: http://api.xxxxx.com/app/
    # 用例数据
    Cases:
      - title: 普通用户注册
        interface: member/register
        method: post
        json:
          mobile_phone: ${{user_mobile}}
          pwd: musk

4.3、json编写用例

使用yaml编写用例前 建议先去学习一下json的语法,json文件中字段名都需要使用双引号

步骤一:在case_json中定义一个test开头的json文件

步骤二:在json文件中定义一个数组,数组中定义一个对象就是一个测试集

步骤三:在测试集中定义相关的字段值和用例数据

[
    {
      "host": "http://api.XXXXX.com/app/",
      "headers": {"X-musk-Media-Type": "musk.v2"},
      "setup_hook": "get_timestamp",
      "env": {
        "user_mobile": "F{rand_phone('155')}",
        "admin_mobile": "F{rand_phone('133')}"
      },
      "verification": [
        ["eq", {"code": 0, "msg": "OK"}, {"code": "V{{$..code}}", "msg": "V{{$..msg}}"}]
      ],
      "Cases": [
        {
          "title": "普通用户注册",
          "interface": "member/register",
          "method": "post",
          "json": {
            "mobile_phone": "${{user_mobile}}",
            "pwd": "musk"
          }
        },
        {
          "title": "管理员注册",
          "interface": "member/register",
          "method": "post",
          "json": {
            "mobile_phone": "${{admin_mobile}}",
            "pwd": "musk",
            "type": 0
          }
        }
      ]
    }
]