HttpRunner3.x(6)参数化数据驱动

2023-10-30

在进行接口测试时,有时候需要给一个接口传入多组数据,这时候就会用到参数化数据驱动。

HttpRunner v3.x开始,测试用例和测试用例集都可以实现参数化数据驱动,需要使用parameters关键字,定义参数名称并指定数据源取值方式。

数据源有三种,分别是参数列表,CSV文件,自定义函数。

参数列表

独立参数 

对于单个参数,可以直接传入参数。如下例子,username传入一个列表,每次执行时,会从这个列表取出一个username。

运行这个用例,可以看到一共执行了三个用例,1个通过,2个失败。


config:
    name: "登录成功"
    variables:
        password: tester
        expect_foo2: config_bar2
    base_url: "https://api.pity.fun"
    verify: False
    export:
        - token
    parameters:
        username: [tester,tester1,tester2]

teststeps:
-
    name: 登录成功
    variables:
        foo1: bar1
    request:
        method: POST
        url: /auth/login
        headers:
            Content-Type: "application/json"
        json:
            {"username":"$username","password":"$password"}
    extract:
        token: body.data.token
    validate:
        - eq: ["status_code", 200]
        - eq: [body.code,0]
        - eq: [body.msg,"登录成功"]

多个参数

同时传入username和password,多个参数具有关联性的参数需要将其定义在一起,采用短横线(-)进行链接。


config:
    name: "登录成功"
    variables:
        expect_foo2: config_bar2
    base_url: "https://api.pity.fun"
    verify: False
    export:
        - token
    parameters:
        username-password:
          - [tester,tester]
          - [tester1,tester1]
          - [tester2,tester2]

teststeps:
-
    name: 登录成功
    variables:
        foo1: bar1
    request:
        method: POST
        url: /auth/login
        headers:
            Content-Type: "application/json"
        json:
            {"username":"$username","password":"$password"}
    extract:
        token: body.data.token
    validate:
        - eq: ["status_code", 200]
        - eq: [body.code,0]
        - eq: [body.msg,"登录成功"]

执行用例,可以看到执行了三条,分别传入了三组数据。

CSV文件传参

 CSV 数据文件,需要遵循如下几项约定的规则:

  • CSV 文件中的第一行必须为参数名称,从第二行开始为参数值,每个(组)值占一行;
  • 若同一个 CSV 文件中具有多个参数,则参数名称和数值的间隔符需实用英文逗号;
  • 在 YAML/JSON 文件引用 CSV 文件时,文件路径为基于项目根目录(debugtalk.py 所在路径)的相对路径。

在data目录下新建login.csv,写入测试数据


config:
    name: "登录成功"
    variables:
        expect_foo2: config_bar2
    base_url: "https://api.pity.fun"
    verify: False
    export:
        - token
    parameters:
        username-password: ${P(data/login.csv)}

teststeps:
-
    name: 登录成功
    variables:
        foo1: bar1
    request:
        method: POST
        url: /auth/login
        headers:
            Content-Type: "application/json"
        json:
            {"username":"$username","password":"$password"}
    extract:
        token: body.data.token
    validate:
        - eq: ["status_code", 200]
        - eq: [body.code,0]
        - eq: [body.msg,"登录成功"]

运行测试用例,可以看到执行了四条测试。

 自定义函数

独立参数

对于没有现成参数列表,或者需要更灵活的方式动态生成参数的情况,可以通过在 debugtalk.py 中自定义函数生成参数列表,并在 YAML/JSON 引用自定义函数的方式。

例如,若需对 username 进行参数化数据驱动,参数取值范围为tester,tester1,tester2,tester3,那么就可以在 debugtalk.py 中定义一个函数,返回参数列表。

def get_username():
    return [
        {"username": tester},
        {"username": tester1},
        {"username": tester2},
        {"username": tester3}
    ]

然后,在 YAML/JSON 的 parameters 中就可以通过调用自定义函数的形式来指定数据源。

执行用例,可以看到执行了4条。


config:
    name: "登录成功"
    variables:
        password: tester
        expect_foo2: config_bar2
    base_url: "https://api.pity.fun"
    verify: False
    export:
        - token
    parameters:
        username: ${get_username()}

teststeps:
-
    name: 登录成功
    variables:
        foo1: bar1
    request:
        method: POST
        url: /auth/login
        headers:
            Content-Type: "application/json"
        json:
            {"username":"$username","password":"$password"}
    extract:
        token: body.data.token
    validate:
        - eq: ["status_code", 200]
        - eq: [body.code,0]
        - eq: [body.msg,"登录成功"]

另外,通过函数的传参机制,还可以实现更灵活的参数生成功能,在调用函数时指定需要生成的参数个数。

关联参数 

对于具有关联性的多个参数,实现方式也类似。 例如,在debugtalk.py中定义函数get_account,生成指定数量的账号密码参数列表。

def get_account():
    accounts = [ {"username": "tester","password":"tester"},

        {"username": "tester1","password":"tester"},
        {"username": "tester2","password":"tester"},
        {"username": "tester3","password":"tester"}]

在YAML/JSON的parameters中就可以调用自定义函数生成指定数量的参数列表


config:
    name: "登录成功"
    variables:
        password: tester
        expect_foo2: config_bar2
    base_url: "https://api.pity.fun"
    verify: False
    export:
        - token
    parameters:
        username-password: ${get_account()}

teststeps:
-
    name: 登录成功
    variables:
        foo1: bar1
    request:
        method: POST
        url: /auth/login
        headers:
            Content-Type: "application/json"
        json:
            {"username":"$username","password":"$password"}
    extract:
        token: body.data.token
    validate:
        - eq: ["status_code", 200]
        - eq: [body.code,0]
        - eq: [body.msg,"登录成功"]

需要注意的是,在自定义函数中,生成的参数列表必须为 list of dict 的数据结构,该设计主要是为了与 CSV 文件的处理机制保持一致。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HttpRunner3.x(6)参数化数据驱动 的相关文章

  • 【接口自动化】接口报错500问题解决

    问题呈现 xff1a Python 43 requests接口报错返回500 xff08 后端没进行相关校验 xff0c 直接返回500 xff09 解决探索 xff1a Python 43 request生成的数据放在postman跑 x
  • Python接口自动化——自动化测试分层(1)

    从本期开始 xff0c 我们会围绕 Python接口自动化 做专题连载 xff0c 今天开始做第一讲 自动化测试分层 目录 xff1a 1 1 1 1 单元自动化测试 2 1 1 2 接口自动化测试 3 1 1 3 UI自动化测试 现在流行
  • 全网最详细,Fiddler抓包实战 - 网页浏览器https请求(超详细)

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • 【自用】3.测试框架TestNG

    1 TestNG基本介绍 2 注解 2 1 Test package com course testng import org testng annotations Test public class BasicAnnotation 最基本
  • 全网最牛,接口测试mock详细总结,彻底打通接口测试...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • 超实用的自动化测试平台推荐

    什么是平台 平台就是一种用来实现某种功能的体系 包括各种不同的元素 架构 流程 标准 机制和工具等 而软件测试平台是为客户打造的集高效率 低成本等特性于一身的软件工作空间 它不仅可以大幅缩短软件产品的测试周期 还可以提升产品品质 同时还能充
  • HttpRunner3.x(6)参数化数据驱动

    在进行接口测试时 有时候需要给一个接口传入多组数据 这时候就会用到参数化数据驱动 HttpRunner v3 x开始 测试用例和测试用例集都可以实现参数化数据驱动 需要使用parameters关键字 定义参数名称并指定数据源取值方式 数据源
  • linux系统下部署python自动化程序并配置Jenkins定时执行

    问题 自动化测试脚本代码咱已经有了 项目地址Python接口自动化框架 那么该如何部署到我们的服务器上 在服务器上定时自动执行呢 思路 首先 我们要统一环境 大家知道 python2和python3的语法和库有很多改动 而大多服务器自带的p
  • HttpRunner 2.x接口自动化实战

    1 环境准备 测试环境 python3 8 httprunner版本为2 5 7 pip install httprunner 2 5 7 检查安装结果 httprunner V 创建项目 使用 httprunner命令创建一个项目 htt
  • 史上最细,自动化测试-logging日志采集详细实战(一)

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • 接口自动化测试框架ApiRunner实战+框架解析

    目录 框架结构 快速尝试 测试文件 测试用例yaml文件 RequestUtil 初始化 standand yaml send request read testcase 参数化 用例关联 断言 test文件封装 pytest配置文件 co
  • jmeter——生成多样的接口自动化html报告

    jmeter 生成多样的接口自动化html报告 一 实现目的 二 实现效果 1 jmter自带的HTML报告 2 jmeter ant报告优化 3 批量执行jmeter工具 4 jmeter allure生成测试报告 三 实现方案 1 jm
  • python+unittest+ddt,从0到1搭建接口自动化框架

    最近在学习纯代码的接口自动化框架 在网上查阅大量资料后 结合了多个文章 最后使用python unittest ddt实现了一个简单的接口自动化工具 可以实现读取excel中的测试用例 生成测试报告 并发送邮件的功能 下图是项目的框架结构
  • unittest中用ddt将参数传输进测试用例中

    unittest中用ddt传入参数时 传入的参数有几个元素 用例就会执行几次 下面是一个简单的演示 可以复制后直接运行 import numpy as np import unittest import ddt ddt ddt 使用了ddt
  • Postman强化学习

    一 Postman内置的动态参数 企业当中做接口测试的时候经常会出现接口不能把参数写死 时间戳 timestamp 生成0 1000的随机数 randomInt 生成一个GUID的字符串 guid 很长的一个字符串 二 Postman之接口
  • 接口自动化测试框架-Python+Requests+Yaml

    零代码极限封装的 接口自动化测试框架 目前已经完全能够实现真正的零代码落地并在企业中推广 其中用到的最核心的封装技术如下 核心技术 1 热加载封装 是全网最早应用于自动化测试框架的封装技术 2 Requests统一请求封装 3 接口关联封装
  • HttpRunner 3.x接口自动化: 全面讲解如何落地实战

    今天 我们来一起学习下HttpRunner3 主要讲解如何使用 应用技巧 基本知识点总结和需要注意事项 一篇文章没法面面俱到 如果有重要的地方没写到 可以给我留言 咱们接着补充 整体概览 概述介绍 HttpRunner 是一款面向 HTTP
  • jmeter——BeanShell 预处理程序

    jmeter BeanShell 预处理程序 一 BeanShell 预处理程序描述和作用 二 BeanShell 预处理程序的使用 三 BeanShell 预处理程序的注意事项 四 BeanShell 预处理程序的拓展 一 BeanShe
  • 接口自动化-httprunner3引入基于契约校验响应数据

    背景 在进行接口自动化时 需要对返回数据进行校验 在响应数据中字段少的时候 可以对每个字段进行校验 但当响应数据中字段多时 单独写校验比较麻烦 引入基于契约的校验 可以对返回数据进行基于值或者类型的全量校验 安装 pip install p
  • pytest的介绍与使用

    pytest介绍 pytest整合了unittest 包含了unittest中的方法 并且比其更轻便快捷 而且结合Allure报告能够清晰的生成测试报告 1 安装 pip install pytest 2 测试文件 test py test

随机推荐

  • 【ssh】pycharm链接远程服务器出现:Bad owner or permissions on C:\\Users\\用户名/.ssh/config

    一直以来是用的pycharm 最近改用了vscode登录 并配置了config文件实现了vscode自动连接远程服务器 但是回到pycharm发现terminal端口不管用了 电脑上的powershell也是链接不上远程服务器并报错Bad
  • Unity TileMap 2D 工具基础教程

    Unity TileMap 2D 工具基础教程 Unity TileMap 2D 工具基础教程 TileMap 工程创建 Sprite Editor 工具使用 TileMap 功能说明 TilePalette 调色板功能 Unity Til
  • 网站安全狗

    phpstudy安装yxcms server2012安装phpstudy和网站安全狗 创建一个网站 将文件解压到phpstudy根目录下 访问网站进入安装页面 安装成功 windows服务器安装网站安全狗 启动apache服务 进行安装 安
  • WaterView 自定义圆形水波进度

    这几天不是很忙 完成了工作 利用闲暇的时间来完成一下以前不会玩的自定义动画 自定义圆形水波进度 这个以前把我难死了 死活不会 都怪自己太菜了 那么现在来看看到底难不难 真正最简单的实现方法 先来了解下path类的基本方法 移动起点 move
  • 解读欧债危机-时寒冰

    读这本书 让我有种真的仿佛明白货币就是货币 不是所谓的钱 货币真的那样的不靠谱 应该读一读 货币战争 的 1 1931年 金融危机过后 美元才取代英镑 成为世界货币 海湾的石油全部使用美元作为结算货币 法国曾经挑战美元的权威 用美元换黄金
  • 2021年最新metasploitable3虚拟机安装教程---三分钟搞定

    网上很多教程又是packer又是vagrant的 瞎几把折腾几天也没搞定 一句命令 多处报错 而且安装起来服务器在国外以至于超级慢 超时就自己挂掉且前面安装的也没了 超级恶心 然后在官方github找到了最简洁的安装方法 1 下载ova文件
  • SpringCloud启动报错Failed to initialize DiscoveryClient

    SpringCloud启动报错Failed to initialize DiscoveryClient 1 报错 2 解决办法 参考 1 报错 Error creating bean with name scopedTarget eurek
  • 《Android开发从零开始》视频下载

    Android开发从零开始 1 Android开发环境搭建 mp4 30 64 MB Android开发从零开始 2 模拟器的使用 mp4 20 78 MB Android开发从零开始 3 第一个Android程序 mp4 45 62 MB
  • fgo显示服务器内部异常,fgo服务器数据库异常

    fgo服务器数据库异常 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 云服务器备份的备份存储库和复制存储库分为两种规格
  • Gentle Jena【2020 年 “联想杯” G题】【笛卡尔树/单调栈】

    题目链接 题意 给你N个数 b 1 b n 但是不是一开始就给出的 一开始只给出b 1 后面的都是通过前面的情况得到的 给出p x y z和b 1 p x y z都是涉及b 2 b n 怎样来的 我们定义一个B S 还有 而其中A i 是代
  • PostgreSQL的基本使用整理

    我是目录 1 数据库操作 2 表操作 3 Schema 模式 4 如何备份PG数据库 5 用户操作 6 常用命令总结 1 数据库操作 1 创建数据库 create database mydb 2 查看所有数据库 list 或 l 3 切换当
  • [网络安全提高篇] 一一九.恶意软件动态分析经典沙箱Cape的安装和基础用法详解

    终于忙完初稿 开心地写一篇博客 网络安全提高班 新的100篇文章即将开启 包括Web渗透 内网渗透 靶场搭建 CVE复现 攻击溯源 实战及CTF总结 它将更加聚焦 更加深入 也是作者的慢慢成长史 换专业确实挺难的 Web渗透也是块硬骨头 但
  • Flask 项目用到的插件和技术

    项目地址 https github com laoqiu pypress 作者 老秋 老秋是05年开始从事前端设计的设计师 于07年喜欢上python 目前从事python项目开发 学习并使用过一些流行框架 如django webpy fl
  • 不到 20 人的 IT 公司该去吗?

    周末就不分享技术了 今天早上在知乎看到一个挺有意思的话题 不到 20 人的 IT 公司该去吗 回答区有一位老哥分享了自己在一个20 来人的小公司的奇葩工作经历 分享一下 下面是正文 刚到西安有幸加入了一个 20 来人的 it 公司 本来是不
  • 教育大数据总体解决方案(1)

    目录 一 方案背景 1 1 以教育现代化支撑国家现代化 1 2 教育信息化是教育现代化重要内容和标志 1 3 大数据驱动教育信息化发展 1 4 政策指导大数据推动教育变革 1 5 教育大数据应用生态服务教育现代化 二 建设需求 2 1 地区
  • 二叉树的最大深度C++

    Definition for a binary tree node struct TreeNode int val TreeNode left TreeNode right TreeNode int x val x left NULL ri
  • 使用HTTP爬虫ip中的常见误区与解决方法

    在如今的互联网时代 为了保障个人隐私和实现匿名浏览 许多人选择使用HTTP爬虫ip 然而 由于缺乏了解和使用经验 常常会出现一些误区 本文将为大家介绍使用HTTP爬虫ip过程中常见的误区 并提供相应的解决方法 帮助大家更好地使用HTTP爬虫
  • 用赋值代替 protobuf CopyFrom()

    用赋值代替 protobuf CopyFrom 示例 Replace protobuf CopyFrom with assignment protobuf 生成的 C 代码中 因为 CopyFrom 可以接受任何 Message 作为参数
  • 都2023年啦~用python来玩一次股票.....

    人生苦短 我用python 这不是2023年已经来了吗 总不能空着手回去吧 这次简单用python来玩一下股票 本章源码 更多电子书点击文末名片 准备工作 我们需要使用这些模块 通过pip安装即可 后续使用的其它的模块都是Python自带的
  • HttpRunner3.x(6)参数化数据驱动

    在进行接口测试时 有时候需要给一个接口传入多组数据 这时候就会用到参数化数据驱动 HttpRunner v3 x开始 测试用例和测试用例集都可以实现参数化数据驱动 需要使用parameters关键字 定义参数名称并指定数据源取值方式 数据源