pytest-yaml-sanmu(六):YAML数据驱动测试

news2025/4/7 2:05:05

图片

如果说 pytest 中哪些标记使用得最多,那无疑是 parametrize 了,

它为用例实现了参数化测试的能力,进而实现了数据驱动测试的能力。

1. 使用标记

parametrize 的使用需要提高两个内容:

  • 参数名

  • 参数值

pytest 在执行用例时,会分别将参数值,传递给参数名,以此自动生成多个用例。

所以参数化测试的显著结果是:用例执行数量等于参数值的数量。

test_name: 参数化测试mark:  - parametrize:      - n  # 第一个 是参数名      - [1,2,3] # 第二个是参数值steps:  - request:      method: get      url: http://baidu.com

执行结果如下:

图片

图 1.parametrize 标记让用例执行多次

由结果可见,使用了 parametrize 标记的用例一共执行了 3 次,与 parametrize 标记中的参数值的数量是相同的

2. 使用参数

parametrize 中的参数并不仅仅是用来控制数量的,

正如前文所述,pytest 在执行用例时,会分别将参数值传递给参数名。

那么在用例中如何使用参数的?可以使用 ${参数名} 的格式来使用,比如这样

test_name: 参数化测试mark:  - parametrize:      - n      - [1,2,3]steps:  - request:      method: get      url: https://baidu.com?o=${n} # 使用n参数

执行结果如下:

图片

图 2. 在用例中使用 parametrize 标记的参数值

由结果可见,每个用例都得到的 n 是不同的参数值。

3. 加载数据文件

如果参数值较多,yaml 用例文件可能会臃肿,不便于维护。

此时,可将参数值保存在单独数据文件中,并在 yaml 用例中加载该数据文件。

test_name: 从文件中加载数据mark:  - parametrize:      - n      - !include ddt_n.yamlsteps:  - request:      method: get      url: https://baidu.com?o=${n} # 使用n参数

执行结果如下

图片

图 3. 从数据文件中加载参数值

关于 !include 有几点需要注意:

  • 会从当前所在的目录中加载文件文件

  • 也支持相对路径和绝对路径

  • 相对路径是相对于当前 yaml 用例

4. 传递多个参数

在使用参数化时,可以同时传递多个参数,

为了实现这一目标,需要将多个参数放在共一个列表中

test_name: 参数化测试mark:  - parametrize:      - x,y,z # 每次传递3个参数      - [        [1,2,3],        ["a","b","c"],        ["!","?","#"],      ]steps:  - request:      method: get      url: https://baidu.com?o=${x}-${y}-${z}

执行结果如下

图片

图 4. 一个标记传递多个参数

5. 使用多个标记

除了同时传递多个参数之外,也可以使用多个标记

test_name: 参数化测试mark:  - parametrize:      - x      - [1,2,3]  - parametrize:      - y      - ["a","b","c"]  - parametrize:      - z      - ["!","?","#"]steps:  - request:      method: get      url: https://baidu.com?o=${x}-${y}-${z}

执行结果如下

图片

图 5. 多标记会生成更多的用例数量

由结果可知,当使用多个标记时,用例数量不再是参数值的数量,而是所有标记参数的笛卡儿积

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1912879.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MemFire Cloud: 一种全新定义后端即服务的解决方案

在这个快节奏的互联网时代,开发者们最希望的就是能够省时省力地完成项目,快速上线。然而,搭建服务、开发接口API、处理各种后端问题,往往让人头疼不已。别担心,现在有了MemFire Cloud,一款为懒人开发者量身…

Java并发关键字

并发关键字 关键字: synchronized详解关键字: volatile详解关键字: final详解 # Synchronized可以作用在哪里? 对象锁方法锁类锁 # Synchronized本质上是通过什么保证线程安全的? 加锁和释放锁的原理 深入JVM看字节码,创建如下的代码: public cl…

C#中简单Socket编程

C#中简单Socket编程 Socket分为面向连接的套接字(TCP套接字)和面向消息的套接字(UDP 套接字)。我们平时的网络编程是对Socket进行操作。 接下来,我用C#语言来进行简单的TCP通信和UDP通信。 一、TCP通信 新建项目SocketTest,首先添加TCP通信的客户端代…

AWS 云安全性:检测 SSH 暴力攻击

由于开源、低成本、可靠性和灵活性等优势,云基础设施主要由基于linux的机器主导,然而,它们也不能幸免于黑客的攻击,从而影响云的安全性。攻击Linux机器最流行的方法之一是通过SSH通道。 什么是 SSH 安全外壳协议(Sec…

区域特征检测工具的使用

区域特征检测工具的使用 选择区域-》右键-》工具->特征检测

Java核心技术【二十二】Java的I/O流处理:深入文件读写操作、缓冲流、序列化与NIO

Java的I/O流处理:深入文件读写操作、缓冲流、序列化 在Java编程中,I/O流是处理输入输出操作的基础,特别是在文件读写、网络通信等领域。本文将在前文的基础上,进一步探讨缓冲流、序列化以及NIO(New I/O)在…

机器人伦理分析:从扫地机器人到智能伙伴

我发过一个泡泡:机器人和扫地机器人。 意犹未尽,我觉得这是一个值得讨论下去的话题。或者是未来话题 在科技迅猛发展的今天,机器人已经从简单的执行工具演变为能够执行复杂任务的智能实体。特别是在家庭环境中,扫地机器人已经成为…

6.MkDocs附录

安装插件 在 MkDocs 中,插件通常是通过 pip​ 工具安装的。你可以使用以下步骤来安装和配置 MkDocs 插件。 1.使用 pip​ 命令安装你需要的插件。例如 pip install pymdown-extensions‍ 2.更新 mkdocs.yml​ 文件。 ‍ 3.使用 mkdocs serve​ 命令本地预览你…

Python30 使用Gensim库实现Word2Vec对文本进行处理

1.Word2Vec Word2Vec 是一种将词语表示为向量的技术,能够捕捉词语之间的语义关系。它由 Google 的 Tomas Mikolov 等人在 2013 年提出,广泛应用于自然语言处理任务中。其核心概念主要包括: 词嵌入(Word Embeddings) …

如何通过文件分发系统,实现能源电力企业文件的安全分发流转?

随着企业业务的快速发展,能源电力企业会在全国乃至全球,设立总部-分部-办事处/网点等多层级的结构,因此会涉及自动化的文件分发的业务场景。文件分发系统是一种将文件从一个地方自动传输到多个接收者的过程,可以提高工作效率&…

寂静孤独的404页面源码

寂静孤独的404页面源码,灯光闪烁动态效果,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 寂静孤独的404页面源…

禁用华为小米?微软中国免费送iPhone15

微软中国将禁用华为和小米手机,要求员工必须使用iPhone。如果还没有iPhone,公司直接免费送你全新的iPhone 15! 、 这几天在微软热度最高的话题就是这个免费发iPhone,很多员工,收到公司的通知。因为,登录公司…

24/7/10总结

flex布局 父项常见属性 justify-content:设置主轴上的子元素排列方式 flex-wrap:设置子元素是否换行 align-items:设置侧轴上的子元素的排列方式(单行) 拉伸要把子盒子里的高度给去掉 如果两个align-items都是center并且主轴是y轴就是这种效果…

FullCalendar的使用,react日历组件

1.下载 yarn add fullcalendar/core fullcalendar/react fullcalendar/daygrid 2.运行 import React from react; import FullCalendar from "fullcalendar/react"; import dayGridPlugin from "fullcalendar/daygrid";const ExperimentalSchedule () …

matlab仿真 信道(下)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第四章内容,有兴趣的读者请阅读原书) 之前的内容还剩下simulink的仿真过程。 3.simulink中的AWGN模块仿真 系统框图如图所示,TX和RX 模块需要单独实现…

使用esptool工具备份ESP32的固件(从芯片中备份下来固件)

本文以Windows电脑为例 板子为esp32-c3 1下载python 可在官网中下载,此处不进行讲解 使用如下代码查看是否安装了 Python(终端输入) python 2下载esptool 在终端输入如下代码即可下载 使用 pip(推荐): 在你已经安装的 Pyth…

【面试题】正向代理和反向代理的区别?

正向代理(Forward Proxy)和反向代理(Reverse Proxy)是两种常见的代理服务器类型,它们在网络通信中扮演着不同的角色,具有不同的功能和应用场景。 一、正向代理 1. 定义与位置 正向代理是位于客户端和目标…

Python基础知识——(003)

文章目录 P12——11. 保留字和标识符 1. 保留字 2. Python标识符的命名规则(必须遵守) 3. Python标识符的命名规范(建议遵守) P13——12. 变量与常量 变量的语法结构 变量命名应遵循以下几条规则 常量 P14——13. 数值类型…

一键式创建GTest TDD测试平台

适用于C GTest测试平台搭建。直接上python脚本。 #!/usr/bin/env python3 # -*- coding: utf-8 -*-import argparse import os import platform import subprocess from xml.etree import ElementTree as ETdefault_root_path "d:\\test\\UTtest"class DeveloperTe…

leetcode--从中序与后序遍历序列构造二叉树

leeocode地址:从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder …