4.httprunner-参数化和数据驱动

前言
  • 参数化在config中使用parameters关键字
  • httprunner2.x 是在testsuite中实现参数化
  • httprunner3.x 是在testcase中的config实现参数化
什么场景适合参数化
举例:
  • 测试搜索功能,只有一个输入框,但是有十种不同的搜索关键字
  • 测试账号登录功能,需要输入账号密码,然后按照等价类划分后有20种组合情况
参数基本分为两种
  • 单个独立参数:举例的第一个场景,只需要变化搜索关键字这一个参数
  • 多个具有关联性的参数:举例的第二个场景,需要变化账号密码两个参数,并且两个参数关联组合
实现场景
  • 对于参数而言,我们可能具有一个参数列表,运行时按照不同的规则去取值
  • 例如顺序取值、随机取值、循环取值等
  • 这就是典型的参数化和数据驱动
单参数化实现
  • 假设我们用4个账号登录,密码都是123456
  • 我们通过parameters设置key为user,value为4个账号的列表
  • 那么运行的时候,user依次循环取列表的值,供下方引用变量请求
  • 列表有多少个参数,接口就会对应执行请求多少次,会有多少个用例
  • 设置参数化的value必须是list
config:
  name: 登录用例
  base_url: ${ENV(base_url)}
  # 设置变量
  variables:
    password: 123456
 #设置参数化
  parameters:
    user:[test1,test2,test3,test4]
teststeps:
-
  name: step-登录
  request:
    url: /v1/login/
    method: POST
    params:
      user: $user #引用参数化命令
      password: $password
多个参数一一对应参数化
  • 场景:我们需要每个账号对应一个单独的密码来实现场景
  • 我们继续parameters设置参数化,而多个不同的参数,我们用-隔开
  • 每个账号对应一个单独的密码,我们需要两个参数,user和password
  • 这两个参数,我们用-隔开定义两个key,然后一一对应下面的参数
  • 执行的时候,两个key依次循环取对应值供下方引用
config:
  name: 登录用例
  base_url: ${ENV(base_url)}
  parameters:
    # 设置user和password两个key,用-隔开
    # 每次按顺序循环取对应的值
    user-password:
      -[test1,123456]
      -[test2,654321]
     -[test3,987544]
     -[test4,678910]

teststeps:
-
  name: step-登录
  request:
    url: /v1/login/
    method: POST
    params:
      user: $user
      password: $password
笛卡尔积组合参数
  • 比如测试账号有4种,[test1,test2,test3,test4]
  • 密码也有4种,[123456,654321,56789,98765]
  • 用笛卡尔积组合的话,就是4*4=16种组合用例
  • 我们可以在parameters下单独设置两个key,user和password
  • 将用户名和密码进行全组合,即每个用户名的取值都与每个密码的取值成对进行组合应
    config:
      name: 登录用例
      base_url: ${ENV(base_url)}
      parameters:
        user: [test1,test2,test3,test4]
        password: [123456,654321,56789,98765]
    
    teststeps:
    -
      name: step-登录
      request:
        url: /v1/login/
        method: POST
        params:
          user: $user
          password: $password
参数化引用CSV文件
  • httprunner参数化数据源指定支持三种方式
  • 在YAML/JSON中直接指定参数列表:该种方式最为简单易用,适合参数列表比较小的情况
  • 通过内置的parameterize(可简写为P)函数引用CSV文件:该方式需要准备CSV数据文件,适合数据量比较大的情况
  • 调用debugtalk.py中自定义的函数生成参数列表:该方式最为灵活,可通过自定义python函数实现任意场景的数据驱动机制,当需要动态生成参数列表时也需要选择该方法
parameterize(可简写为P)函数
#csv文件格式
#每列的第一行编写key,下面编写对应的值
#直接pycharm编辑每行用逗号隔开
user,password
test,1234
test2,1234
也可以值接csv文件编辑
引用文件
引用格式: ${P(文件路径/文件名.csv)}
config:
  name: 登录用例
  base_url: ${ENV(base_url)}
  parameters:
      # 引用
      user-password:  ${P(data/user.csv)}

teststeps:
-
  name: step-登录
  request:
    url: /v1/login/
    method: POST
    params:
      user: $user
      password: $password

  extract:
      uid: body.uid
  validate:
    - eq: [status_code,200]
debugtalk函数
debugtalk文件建在项目根目录下,debugtalk.py
单参数引用
假设我们测试5个账号登录,在debugtalk里面编写一个函数,返回列表字典
#debugtalk.py
def get_user():
    return [
        {'user': 'test1'},
        {'user': 'test2'},
        {'user': 'test3'},
        {'user': 'test4'},
        {'user': 'test5'},
    ]
#yaml引用函数,引用格式:${函数名}
#返回的列表有多少个参数,就依次循环取值执行多少次用例
config:
  name: 登录用例
  base_url: ${ENV(base_url)}

  variables:
    password: 123456

  parameters:#引用函数
      user: ${get_user()}

teststeps:
-
  name: step-登录
  request:
    url: /v1/login/
    method: POST
    params:
      user: $user
      password: $password

  extract:
      uid: body.uid
  validate:
    - eq: [status_code,200]
多参数引用
假设我们需要根据特定规则,生成任意数量的账号密码
#debugtalk
def get_user_password(n):
    #n是要生成的数量
    account = []
    for i in range(1, n+1):
        account.append({'user': 'test' + f'{i}', 'password': '123456'})
    return account
#yaml文件引用
config:
  name: 登录用例
  base_url: ${ENV(base_url)}


  parameters:
      #两个key用-分隔
      user-password: ${get_user_password(4)}

teststeps:
-
  name: step-登录
  request:
    url: /v1/login/
    method: POST
    params:
      user: $user
      password: $password

  extract:
      uid: body.uid
  validate:
    - eq: [status_code,200]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值