HttpRunner框架学习3--测试用例结构解析

1.基本结构

  • 每个 YAML/JSON 文件对应一个测试用例(testcase)
  • 每个测试用例为一个list of dict结构,其中可能包含全局配置项(config)和若干个测试步骤(test)
  • config 为全局配置项,作用域为整个测试用例
  • test 对应单个测试步骤,作用域仅限于本身,会继承或覆盖 config 中定义的内容,各个测试步骤(test)的变量空间相互独立,互不影响,测试用例存在顺序关系,运行时将从前往后依次运行各个测试步骤

对应的基本结构:

json格式:
[
  {
    "config": {...}
  },
  {
    "test": {...}
  },
  {
    "test": {...}
  }
]

yaml格式:
- config:
    name: xxx

- test:
    name: case1
    request:
        url: http://www.baidu.com/
    ...
    
- test:
    name: case2
    request:
        url: http://www.baidu.com/

config配置

Key required? format descrption
name Yes string 测试用例的名称,在测试报告中将作为标题
variables No list of dict 定义的全局变量,作用域为整个用例
parameters No list of dict 全局参数,用于实现数据化驱动,作用域为整个用例
request No dict request 的公共参数,作用域为整个用例;常用参数包括 base_url 和 headers

test配置

Key required? format descrption
name Yes string 测试步骤的名称,在测试报告中将作为测试步骤的名称
request Yes dict HTTP 请求的详细内容;可用参数详见 python-requests 官方文档
variables No list of dict 测试步骤中定义的变量,作用域为当前测试步骤
extract No list 从当前 HTTP 请求的响应结果中提取参数,并保存到参数变量中(例如token),后续测试用例可通过$token的形式进行引用
validate No list 测试用例中定义的结果校验项,作用域为当前测试用例,用于实现对当前测试用例运行结果的校验
setup_hooks No list 在 HTTP 请求发送前执行 hook 函数,主要用于准备工作
teardown_hooks No list 在 HTTP 请求发送后执行 hook 函数,主要用户测试后的清理工作

request是config或test中的一个关键字,这个关键字的配置如下

Key required? format descrption
base_url No string 测试用例请求 URL 的公共 host,指定该参数后,test 中的 url 可以只描述 path 部分
headers No dict request 中 headers 的公共参数,作用域为整个用例
output No list 整个用例输出的参数列表,可输出的参数包括公共的 variable 和 extract 的参数; 在 log-level 为 debug 模式下,会在 terminal 中打印出参数内容

example

[
  {
    "config": {
      "name": "testcase description",
      "parameters": [
        {
          "user_agent": [
            "iOS/10.1",
            "iOS/10.2",
            "iOS/10.3"
          ]
        },
        {
          "app_version": "${P(app_version.csv)}"#定义的变量
        },
        {
          "os_platform": "${get_os_platform()}"
        }
      ],
      "variables": [
        {
          "user_agent": "iOS/10.3"
        },
        {
          "device_sn": "${gen_random_string(15)}"
        },
        {
          "os_platform": "ios"
        }
      ],
      "request": {
        "base_url": "http://127.0.0.1:5000",
        "headers": {
          "Content-Type": "application/json",
          "device_sn": "$device_sn"
        }
      },
      "output": [
        "token"
      ]
    }
  },
  {
    "test": {
      "name": "get token with $user_agent, $os_platform, $app_version",#通过$加变量名引用
      "request": {
        "url": "/api/get-token",
        "method": "POST",
        "headers": {
          "app_version": "$app_version",
          "os_platform": "$os_platform",
          "user_agent": "$user_agent"
        },
        "json": {
          "sign": "${get_sign($user_agent, $device_sn, $os_platform, $app_version)}"
        },
        "extract": [
          {
            "token": "content.token"
          }
        ],
        "validate": [  
          {
            "eq": [
              "status_code",
              200
            ]
          },
          {
            "eq": [
              "headers.Content-Type",
              "application/json"
            ]
          },
          {
            "eq": [
              "content.success",
              true
            ]
          }
        ],
        "setup_hooks": [],
        "teardown_hooks": []
      }
    }
  }
]

2.test中传值

如需在多个测试步骤(test)中传递参数值,则需要使用 extract 关键字,并且只能从前往后传递

HttpRunner返回值content实际上是request返回值r.content,byte类型,使用content.key方式获取值

  • 响应结果为 JSON 结构,可采用.运算符的方式,例如headers.Content-Typecontent.success
{
	"code": 200,
	"msg": "login success!",
	"username": "test",
	"token": "aaaaaaaaaaaaaaaaa"
}
  • 响应结果为 text/html 结构,可采用正则表达式的方式,例如blog-motto\">(.*)</h2>
"extract": [
            {"token": "content.token"}
        ]

下边test中使用时可用,直接用$token即可

 

 

©️2020 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值