前言
  • 参数化在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]

4.httprunner-参数化和数据驱动的更多相关文章

  1. 【JMeter】【接口测试】csv参数化,数据驱动,自动化测试

    csv参数化,数据驱动   首先我们要有一个接口测试用例存放的地方,我们这里用EXCEL模板管理,里面包含用例编号.入参.优先级.请求方式.url等等. 1:新建一个txt文件,命名为sjqd,后缀名 ...

  2. HttpRunner 参数化数据驱动

    HttpRunner 2.0 参数化数据驱动案例,废话不说,直接上干货. 1.测试用例目录结构      api:接口集 testcases:测试用例    testsuites:测试套件 data: ...

  3. HTTPRunner实践二——数据驱动

    基于文档http://cn.httprunner.org/advanced/data-driven/ 场景一:用例集+独立参数+参数列表 1.原始用例文件savePatient_01.yml - co ...

  4. csv参数化,数据驱动

    首先我们要有一个接口测试用例存放的地方,我们这里用EXCEL模板管理,里面包含用例编号.入参.优先级.请求方式.url等等. 1:新建一个txt文件,命名为sjqd,后缀名改为csv,右键excel格 ...

  5. Httprunner学习

    一.简介 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份YAML/JSON脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种测试需求. 核心特性: 继 ...

  6. Httprunner的使用

    一.httprunner的简介 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种 ...

  7. 行为驱动:Cucumber + Selenium + Java(四) - 实现测试用例的参数化

    在上一篇中,我们介绍了Selenium + Cucumber + Java框架下的使用Tags对测试用例分组的实现方法,这一篇我们用数据表格来实现测试用例参数化. 4.1 什么是用例参数化 实际测试中 ...

  8. 数据驱动 vs 关键字驱动:对搭建UI自动化测试框架的探索

    UI自动化测试用例剖析 让我们先从分析一端自动化测试案例的代码开始我们的旅程.以下是我之前写的一个自动化测试的小Demo.这个Demo基于Selenium与Java.由于现在Selenium在自动化测 ...

  9. pytest和unittest中参数化如何做

    参数化应用场景,一个场景的用例会用到多条数据来进行验证,比如登录功能会用到正确的用户名.密码登录,错误的用户名.正确的密码,正确的用户名.错误的密码等等来进行测试,这时就可以用到框架中的参数化,来便捷 ...

随机推荐

  1. Mybatis简单入门--插入数据

    1. 开发环境 IDE:IDEA 构建工具:maven4.0.0 MySQL版本:8.0.11. 记得创建好数据库 Mybatis版本:3.5.7 MySQL不同版本的注意事项 驱动类driver-c ...

  2. Vmware 虚拟机连接外网和设置固定IP

    NAT 模式(地址转换模式) 在NAT模式中,主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,虚拟机借助NAT功能,通过宿主机器所在的网络来 ...

  3. Word 文字多选方式有哪些?

    Ctrl + 鼠标左键:不连续地选择文字. Shift + 鼠标左键:连续地选择文字. Alt + 鼠标左键:自由选择文字.

  4. 我开源了一个Go学习仓库|笔记预览

    前言 大半个月前我参与了字节后端面试,未通过第四面,面试总结写在了这篇文章: https://juejin.cn/post/7132712873351970823 在此文的末尾,我写到为了全面回顾Go ...

  5. 从new File("")到jdk源码

    1. 概述 今天在项目中看到下面两行代码,看注释说是获取当前工作路径,之前也没有用过这种用法,比较好奇还能这样用,所以研究了一下源码. //获取当前工作路径 File file = new File( ...

  6. 【java】基础1-字符串、堆、栈、静态与引用类型

    /*结论:1,一般变量(int,float,boolean..)使用==比较,引用类型(String,int[],对象)使用equals比较.2,一般的变量存放在栈中,new出来的对象都存放在堆中,字 ...

  7. 【java】学习路线2-构造、Scanner包导入、字符串操作、数组、引用类型

    请先查看前置知识: [JAVA]基础1-字符串.堆.栈.静态与引用类型 https://www.cnblogs.com/remyuu/p/15990274.html import java.util. ...

  8. 【unity游戏入门】2 使用代码编写Hello Unity游戏

    作者 罗芭Remoo 2021年9月24日 第一章.许可证的安装 下载好Unity之后,我们还需要一个前置操作才可以进入Unity引擎----许可证. 当然不用担心,Unity是一个开放的引擎,一切以 ...

  9. KingbaseES V8R6C5单实例sys_backup.sh备份案例

    ​ 案例说明: KingbaseES V8R6C5版本中使用了securecmdd工具,用于主机节点间的通讯,默认端口8890.备份工具sys_backup.sh默认使用了securecmdd工具,对 ...

  10. LIKE与等式查询比较

    我们知道 char 是定长类型的数据,如果数据长度小于定义的长度,会在字符串尾部加上空格.而对于空格的处理,对于等式匹配,或length等,会忽略空格.而对于like 或模式匹配,空格不能忽略. 一. ...