2.HR 参数化与前置
大约 3 分钟学习笔记测试平台开发
一、 httprunner 用例变量
1. 配置变量(config variables)
- 用于数据解耦 --- 字典类型
- 定义在 config或者teststep中
- 变量在引用时,不使用函数引用,可以不加大括号{}
用例级别(config 中 配置)
方式 1:直接 指定 参数
config:
  name: 登录
  base_url: http://120.55.190.222:7080
  verify: false
  variables: # 用例变量 --- 字典类型
    user: auto # 方式 1:直接指定参数的方式
    pw: sdfsdfsdf
  export: # 返回测试步骤中提取的变量 --- 列表类型
    - cookie
teststeps:
  - name: 登录
    request:
      method: POST
      url: /api/mgr/loginReq
      data:
        username: ${user}
        password: ${pw}
    extract: # 将 sessionid 赋值给 cookie ---  字典类型
      cookie: cookies.sessionid
    validate:
      - eq: ["status_code", 200]
      - eq: ["body.retcode", 0]方式 2:在项目根目录中创建一个名为 debugtalk.py 的文件
debugtalk.py 文件
def login_variables():
    return {'user': 'auto', 'pw': 'sdfsdfsdf'}login.yml 文件
config:
  name: 登录
  base_url: http://120.55.190.222:7080
  verify: false
  variables: # 用例变量 --- 字典类型
    ${login_variables()} # 方式 2:在项目根目录中创建一个名为 debugtalk.py 的文件
  export: # 返回测试步骤中提取的变量 --- 列表类型
    - cookie
teststeps:
  - name: 登录
    request:
      method: POST
      url: /api/mgr/loginReq
      data:
        username: ${user}
        password: ${pw}
    extract: # 将 sessionid 赋值给 cookie ---  字典类型
      cookie: cookies.sessionid
    validate:
      - eq: ["status_code", 200]
      - eq: ["body.retcode", 0]步骤级别(teststeps 中 配置)
- 不支持 使用 函数返回值的方式配置变量
- 当 用例级别 函数名 和 步骤级别 函数名相同时, 步骤级别的 优先级大于 用例级别
config:
  name: 登录
  base_url: http://120.55.190.222:7080
  verify: false
  variables: # 用例变量 --- 字典类型
    user: auto # 方式 1:直接指定参数的方式
    pw: sdfsdfsdf
  export: # 返回测试步骤中提取的变量 --- 列表类型
    - cookie
teststeps:
  - name: 登录
    variables:
      # 当 用例级别 函数名 和 步骤级别 函数名相同时, 步骤级别的 优先级大于 用例级别
      user: auto
      pw: sdfsdfsdf
    request:
      method: POST
      url: /api/mgr/loginReq
      data:
        username: ${user}
        password: ${pw}
    extract: # 将 sessionid 赋值给 cookie ---  字典类型
      cookie: cookies.sessionid
    validate:
      - eq: ["status_code", 200]
      - eq: ["body.retcode", 0]2. 环境变量(env variables)
- 在 项目 根目录 创建一个名为 .env.txt 文件
- .env文件中的内容不能有空行
.env.txt 文件
username=auto
password=sdfsdfsdflogin.yml 文件
config:
  name: 登录
  base_url: http://120.55.190.222:7080
  verify: false
  variables: # 用例变量 --- 字典类型
    user: ${ENV(username)}
    pw: ${ENV(password)}
  export: # 返回测试步骤中提取的变量 --- 列表类型
    - cookie
teststeps:
  - name: 登录
    request:
      method: POST
      url: /api/mgr/loginReq
      data:
        username: ${user}
        password: ${pw}
    extract: # 将 sessionid 赋值给 cookie ---  字典类型
      cookie: cookies.sessionid
    validate:
      - eq: ["status_code", 200]
      - eq: ["body.retcode", 0]二. 参数化(parameter variables)
- 用于参数化 --- 列表类型
- 定义在 config中
1. 独立参数
运行用例数 = 独立参数的 笛卡尔积
可以运行 八次
config:
  name: 登录
  base_url: http://120.55.190.222:7080
  verify: false
  parameters:
    user:
      - auto
      - auto1
    pw:
      - sdfsdfsdf
      - sdfsdf
    code:
      - 0
      - 1
  export:
    - cookie
teststeps:
  - name: 登录
    request:
      method: POST
      url: /api/mgr/loginReq
      data:
        username: $user
        password: $pw
    extract:
      cookie: cookies.sessionid
    validate:
      - eq: ["status_code", 200] # 写法 1
      - eq: # 写法 2
          - body.retcode
          - $code
2. 关联参数
运行用例数 = 关联参数组
config:
  name: 登录
  base_url: http://120.55.190.222:7080
  verify: false
  parameters:
    user-pw-code:
      - ["auto", "sdfsdfsdf", 0] # 写法 1
      - ["auto1", "sdfsdf", 1]
      - # 写法 2
        - aout2
        - sdfsdf
        - 1
  export:
    - cookie
teststeps:
  - name: 登录
    request:
      method: POST
      url: /api/mgr/loginReq
      data:
        username: $user
        password: $pw
    extract:
      cookie: cookies.sessionid
    validate:
      - eq: ["status_code", 200]
      - eq:
          - body.retcode
          - $code3. 关联参数 和 独立参数 混合使用
config:
  name: 登录
  base_url: http://120.55.190.222:7080
  verify: false
  parameters:
    user-pw:
      - ["auto", "sdfsdfsdf"] # 写法 1
      - ["auto1", "sdfsdf"]
      - # 写法 2
        - aout2
        - sdfsdf
    code:
      - 1
      - 0
  export:
    - cookie
teststeps:
  - name: 登录
    request:
      method: POST
      url: /api/mgr/loginReq
      data:
        username: $user
        password: $pw
    extract:
      cookie: cookies.sessionid
    validate:
      - eq: ["status_code", 200]
      - eq:
          - body.retcode
          - $code4. 使用 函数 调用参数
debugtalk.py 文件
def login_parameters():
    return [
        {'user': 'auto', 'pw': 'sdfsdfsdf', 'code': 0},
        {'user': 'auto1', 'pw': 'sdfsdfsdf', 'code': 1},
        {'user': 'auto', 'pw': 'sdfsdfsdf1', 'code': 1},
    ]login_parameters.yml 文件
config:
  name: 登录
  base_url: http://120.55.190.222:7080
  verify: false
  parameters:
    user-pw-code: ${login_parameters()}
  export:
    - cookie
teststeps:
  - name: 登录
    request:
      method: POST
      url: /api/mgr/loginReq
      data:
        username: $user
        password: $pw
    extract:
      cookie: cookies.sessionid
    validate:
      - eq: ["status_code", 200]
      - eq:
          - body.retcode
          - $code