前言
  • 参数化在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. 基于vue2.0原理-自己实现MVVM框架之computed计算属性

    基于上一篇data的双向绑定,这一篇来聊聊computed的实现原理及自己实现计算属性. 一.先聊下Computed的用法 写一个最简单的小demo,展示用户的名字和年龄,代码如下: <body ...

  2. 案例复现,带你分析Priority Blocking Queue比较器异常导致的NPE问题

    摘要:本文通过完整的案例复现来演示在什么情况会触发该问题,同时给出了处理建议.希望读者在编程时加以借鉴,避免再次遇到此类问题. 本文分享自华为云社区<Priority Blocking Queu ...

  3. Apache 首次亚洲在线峰会: Workflow & 数据治理专场

    背景 大数据发展到今天已有 10 年时间,早已渗透到各个行业,数据需 求越来越多,这使得大数据 业务间的依赖关系也越来越复杂,另外也相信做数据的伙伴肯定对如何治理数据也是痛苦之至,再加上现今云原生时代 ...

  4. 2021年5月15日海外 Meetup 演讲内容分享

    北京时间 2021 年 5 月 16 日 05:00-08:00 我们与Apache ShardingSphere 联合举办了第一场海外Meetup,感谢各位小伙伴的参与,让本次活动圆满结束. 同时我 ...

  5. Apache DolphinScheduler 1.2.0 task 任务存储结构说明

    本文章经授权转载 Table of Contents 任务总体存储 Shell节点 SQL节点 存储过程节点 SPARK节点 MapReduce(MR)节点 Python节点 Flink节点 HTTP ...

  6. .NET 扩展 官方 Logger 实现将日志保存到本地文件

    .NET 项目默认情况下 日志是使用的 ILogger 接口,默认提供一下四种日志记录程序: 控制台 调试 EventSource EventLog 这四种记录程序都是默认包含在 .NET 运行时库中 ...

  7. LuoguP1922 女仆咖啡厅桌游吧 (树形动态规划)

    #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...

  8. 延时任务-基于netty时间轮算法实现

    一.时间轮算法简介 为了大家能够理解下文中的代码,我们先来简单了解一下netty时间轮算法的核心原理 时间轮算法名副其实,时间轮就是一个环形的数据结构,类似于表盘,将时间轮分成多个bucket(比如: ...

  9. [HFCTF2020]EasyLogin-1|JWT身份伪造

    1.打开之后只有一个登陆界面和注册界面,右键检查发现app.js代码,结果如下: app.js代码如下: /** * 或许该用 koa-static 来处理静态文件 * 路径该怎么配置?不管了先填个根 ...

  10. CF914G Sum the Fibonacci (快速沃尔什变换FWT + 子集卷积)

    题面 题解 这是一道FWT和子集卷积的应用题. 我们先设 cnt[x] 表示 Si = x 的 i 的数量,那么 这里的Nab[x]指满足条件的 Sa|Sb=x.Sa&Sb=0 的(a,b)二 ...