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

图片

如果说 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.mzph.cn/news/868993.shtml

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

相关文章

6元/年英国Giffgaff卡申请和使用

官网:https://www.giffgaff.com/freesim-international 今天和大家分享一款来自英国的电话卡——Giffgaff,它能够在大陆正常使用,并且保号的费用也十分便宜,大约6元/年。自己免费申请的卡已经激活成功,将过程与大家分…

亚信安全新一代终端安全TrustOne2024年重磅升级

以极简新主义为核心,亚信安全新一代终端安全TrustOne自2023年发布以来,带动了数字化终端安全的革新。60%,安装部署及管理效率的提升;50%,安全管理资源的节省;100%,信创非信创场景的全覆盖。Trus…

FastReport 指定sql 和修改 数据库连接地址的 工具类 :FastReportHelper

FastReport 指定sql 和修改 数据库连接地址的 工具类 :FastReportHelper 介绍核心代码:完整代码: 介绍 在FastReport中,经常会遇到需要给 sql 加条件的情况,或者给数据库地址做更换。 (废话不多说&#x…

java之循环练习题

思路分析&#xff1a; 代码&#xff1a; public static void main(String[] args) {int sum0;for (int i1;i<100;i){for (int j1;j<i;j) {sum j;}}System.out.println(sum);} 结果为&#xff1a;

DeepViT:字节提出深层ViT的训练策略 | 2021 arxiv

作者发现深层ViT出现的注意力崩溃问题&#xff0c;提出了新颖的Re-attention机制来解决&#xff0c;计算量和内存开销都很少&#xff0c;在增加ViT深度时能够保持性能不断提高 来源&#xff1a;晓飞的算法工程笔记 公众号 论文: DeepViT: Towards Deeper Vision Transformer 论…

提升爬虫OCR识别率:解决嘈杂验证码问题

引言 在数据抓取和网络爬虫技术中&#xff0c;验证码是常见的防爬措施&#xff0c;特别是嘈杂文本验证码。处理嘈杂验证码是一个复杂的问题&#xff0c;因为这些验证码故意设计成难以自动识别。本文将介绍如何使用OCR技术提高爬虫识别嘈杂验证码的准确率&#xff0c;并结合实际…

大模型面试(三)

这次是某家公司的一个电话面试&#xff0c;问的过程还比较简单直接。 问&#xff1a;我们在大模型开源项目的应用上遇到了什么困难&#xff1f; 这个。。有两个困难&#xff0c;一个是RAG的优化&#xff0c;一开始RAG是比较慢的&#xff0c;而且召回率不高&#xff1b; 后来…

Winform切换开关自定义控件的实现

1、实现切换开关自定义控件 (1)、设置初始化; (2)、扩展自定义属性; (3)、控件重绘; (4)、定义事件。 2、自定义控件代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; …

面向对象的程序设计设计思想(解决问题所需要的类),面向过程的程序设计思想(解决问题的步骤)

一、引言 面向对象思想是现代编程语言的主流编程思想&#xff0c;除了C语言外&#xff0c;其他的主流编程语言&#xff0c;无论是脚本的还是非脚本的&#xff0c;基本上都引入了面向对象这一设计思想&#xff0c;面向对象设计思想是怎样的&#xff1f;为什么现在的编程语言大都…

模型驱动开发(Model-Driven Development,MDD):提高软件开发效率与一致性的利器

目录 前言1. 模型驱动开发的原理1.1 什么是模型驱动开发1.2 MDD的核心思想 2. 模型驱动开发的优势2.1 提高开发效率2.2 确保代码一致性2.3 促进沟通和协作2.4 方便维护和扩展 3. 实现模型驱动开发的方法3.1 选择合适的建模工具3.1.1 UML3.1.2 BPMN3.1.3 SysML 3.2 建模方法3.2.…

Linux驱动更新,以及ubuntu18.04升级22.04过程记录

驱动版本465.19.01升级为驱动555.58.02 Linux x64 (AMD64/EM64T) Display Driver驱动网址 下载转到root路径下,要不然会提示权限不够 sudo mv /path/to/filename.run /root/这里,‌/path/to/filename.run是要移动的驱动文件的当前路径,自行替换为实际的文件路径。‌ ls查…

全局变量与局部变量同名优先级

如果全局变量与局部变量同名&#xff0c;则局部变量将优先。这是因为局部变量在函数执行时会被推到作用域的最前端&#xff0c;从而在作用域链中具有更高的优先级。 直接看代码 var val 10 function test(){console.log(val)var val 100console.log(val) } test()undefined…

大学生竞赛管理系统-计算机毕业设计源码37276

大学生竞赛管理系统的设计与实现 摘 要 随着教育信息化的不断发展&#xff0c;大学生竞赛已成为高校教育的重要组成部分。传统的竞赛组织和管理方式存在着诸多问题&#xff0c;如信息不透明、效率低下、管理不便等。为了解决这些问题&#xff0c;提高竞赛组织和管理效率&#x…

K8S 上部署大数据相关组件

文章目录 一、前言二、Redis 一、前言 Artifact Hub 是一个专注于云原生应用的集中式搜索和发布平台。它旨在简化开发者在 CNCF&#xff08;Cloud Native Computing Foundation&#xff09;项目中寻找、安装和分享包与配置的过程。用户可以通过这个平台方便地发现、安装各类云原…

用SurfaceView实现落花动画效果

上篇文章 Android子线程真的不能刷新UI吗&#xff1f;(一&#xff09;复现异常 中可以看出子线程更新main线程创建的View&#xff0c;会抛出异常。SurfaceView不依赖main线程&#xff0c;可以直接使用自己的线程控制绘制逻辑。具体代码怎么实现了&#xff1f; 这篇文章用Surfa…

理解EtherCAT ESI文件中的插槽和模块配置

理解EtherCAT ESI文件中的插槽和模块配置 在工业自动化和控制系统中&#xff0c;EtherCAT是一种广泛应用的高速通讯协议。为了确保设备之间的兼容性和互操作性&#xff0c;EtherCAT系统使用EtherCAT Slave Information (ESI) 文件来定义从站设备的详细配置。这篇博客将深入探讨…

vscode启用项目后,没有触发debugger

启动项目后在debugger时&#xff0c;一直不走断点&#xff0c;重启vscode和电脑&#xff0c;打开其他vscode项目&#xff0c;都不行 1.F12点击设置 2.然后取消忽略列表的勾选即可。

js实现一个异步锁,超时自动释放,队列等待

文章目录 前言一、js实现二&#xff0c;使用总结 前言 异步锁是一种用于控制并发访问的锁机制&#xff0c;主要用于多线程/多任务环境下。异步锁允许多个任务并行执行&#xff0c;但是只允许一个任务在同一时间获取锁并执行临界区代码&#xff0c;其他任务需要等待该锁释放后才…

【力扣高频题】042.接雨水问题

上一篇我们通过采用 双指针 的方法解决了 经典 容器盛水 问题 &#xff0c;本文我们接着来学习一道在面试中极大概率会被考到的经典题目&#xff1a;接雨水 问题 。 42. 接雨水 给定 n 个非负整数&#xff0c;表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子…

java springboot中@OneToMany、@ManyToOne以及@ManyToMany讲解

在 Spring Boot 应用中&#xff0c;使用 JPA (Java Persistence API) 进行对象关系映射 (ORM) 时&#xff0c;OneToMany, ManyToOne, 和 ManyToMany 注解是用来定义实体之间的关联关系的。 下面详细介绍这些注解及其在 Spring Boot 中的应用。 1. ManyToOne ManyToOne 注解表…