前言
  • 参数化在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. 论文解读(ChebyGIN)《Understanding Attention and Generalization in Graph Neural Networks》

    论文信息 论文标题:Understanding Attention and Generalization in Graph Neural Networks论文作者:Boris Knyazev, Gra ...

  2. Linux 10 安装JDK

    参考源 https://www.bilibili.com/video/BV187411y7hF?spm_id_from=333.999.0.0 版本 本文章基于 CentOS 7.6 这里使用 rpm ...

  3. 如何在Linux快速搭建一套ADB环境

    一.ADB简介 1.什么是ADB Android Debug Bridge,安卓调试桥,它借助adb.exe(Android SDK安装目录platform-tools下),用于电脑端与模拟器或者真实 ...

  4. 全局异常处理及参数校验-SpringBoot 2.7 实战基础 (建议收藏)

    优雅哥 SpringBoot 2.7 实战基础 - 08 - 全局异常处理及参数校验 前后端分离开发非常普遍,后端处理业务,为前端提供接口.服务中总会出现很多运行时异常和业务异常,本文主要讲解在 Sp ...

  5. 大家都能看得懂的源码 - 如何封装 cookie/localStorage/sessionStorage hook?

    本文是深入浅出 ahooks 源码系列文章的第九篇,该系列已整理成文档-地址.觉得还不错,给个 star 支持一下哈,Thanks. 今天来看看 ahooks 是怎么封装 cookie/localSt ...

  6. 网站优化,dns预解析,解析缓存

    DNS Prefetch 是一种 DNS 预解析技术.当你浏览网页时,浏览器会在加载网页时对网页中的域名进行解析缓存,这样在你单击当前网页中的连接时就无需进行 DNS 的解析,减少用户等待时间,提高用 ...

  7. 在Windows Server 2019中配置多元密码策略

    长久以来,微软活动目录中的账户只能配置同一个密码策略.上到管理员账户,下到普通用户的密码策略都是一样的.而且密码策略只能在域级别配置生效.OU级别的密码策略只会对该OU中计算机的本地账户生效.通常认为 ...

  8. Windows LDAP加固之替换LDAP加密证书

    之前两篇文章介绍了LDAP的安全加固,其中提到了TLS加密LDAP通信.对于通常的网页加密,RDP加密都可以在对应的管理界面中选择使用哪个证书来加密.那么对于LDAP服务,怎么确定当前使用的是哪张证书 ...

  9. Svelte Ui Admin后台管理系统|svelte3+svelteUI中后台前端解决方案

    基于svelte3.x+svelteKit+svelte-ui网页后台管理系统SvelteAdmin. Svelte-Ui-Admin 基于svelte3.x+svelteKit+vite3+echa ...

  10. 从零打造“乞丐版” React(一)——从命令式编程到声明式编程

    这个系列的目的是通过使用 JS 实现"乞丐版"的 React,让读者了解 React 的基本工作原理,体会 React 带来的构建应用的优势 1 HTML 构建静态页面 使用 HT ...