Pytest-Bdd-Playwright 系列教程(9):使用 数据表(DataTable 参数) 来传递参数

Pytest-Bdd-Playwright 系列教程(9):使用 数据表(DataTable 参数) 来传递参数

  • 前言
  • 一、什么是 `datatable` 参数?
    • Gherkin 表格示例
  • 二、`datatable` 参数的基本使用
  • 三、完整代码和运行效果
    • 完整的测试代码

前言

  • pytest-bdd 在编写复杂的 Gherkin 场景时,往往会涉及到大量的表格数据。为了方便地管理和操作这些表格数据,pytest-bdd提供了一个非常有用的功能——datatable 参数。

一、什么是 datatable 参数?

datatable 参数是 pytest-bdd 中提供的一种特殊参数类型,用于处理 Gherkin 场景中定义的表格数据。Gherkin 语言中的表格通常用于提供一组结构化的输入数据或期望的结果数据。当测试场景需要处理多个数据行时,数据表是一种非常有效的方式。datatable 参数正是用来将这些数据表传递到测试步骤函数中的。

pytest-bdd 中,datatable 参数返回的是一个二维列表,其中每一行表示 Gherkin 表格中的一行数据,行与行之间通过列表的方式进行存储。

Gherkin 表格示例

假设我们在 Gherkin 场景中定义了如下的用户数据表:

Given the following user details:
| name  | email             | age |
| John  | john@example.com   | 30  |
| Alice | alice@example.com  | 25  |

在这个场景中,我们定义了一个包含姓名、邮箱和年龄的表格。当我们将这个表格传递到 pytest-bdd 测试步骤中时,它会变成以下结构:

[["name", "email", "age"],["John", "john@example.com", 30],["Alice", "alice@example.com", 25]
]

这就是 datatable 参数在测试步骤中的表现形式。可以看到,datatable 参数将每一行表格数据作为一个列表传递给测试函数,使得你可以像处理普通的 Python 列表一样操作这些数据。

二、datatable 参数的基本使用

在使用 pytest-bdd 编写自动化测试时,datatable 参数通常和 Gherkin 中的表格配合使用。在步骤定义中,我们通过 datatable 参数将表格数据传递给测试函数,并在测试中进行处理。

三、完整代码和运行效果

完整的测试代码

以下是完整的测试代码,包括 feature 文件和 pytest 脚本:

example.feature 文件

Feature: 计算器Scenario: 批量计算两数相加或相减Given 我已经准备好计算器And 以下数据需要进行计算:| 第一个数字 | 第二个数字 | 操作 | 预期结果 || 5         | 3         | 加法 | 8       || 10        | 4         | 减法 | 6       || 7         | 2         | 加法 | 9       |When 执行所有计算Then 计算结果应该正确

在这里插入图片描述

test_calculator.py 文件

import pytest
from pytest_bdd import given, when, then, scenariosscenarios("example.feature")@given("以下数据需要进行计算:", target_fixture="calculations")
def _(datatable):calculations = []for row in datatable[1:]:  # 跳过表头calculations.append({"first_number": int(row[0]),"second_number": int(row[1]),"operation": row[2],"expected_result": int(row[3]),})return calculations@when("执行所有计算", target_fixture="results")
def _(calculations):results = []for calc in calculations:if calc["operation"] == "加法":result = calc["first_number"] + calc["second_number"]elif calc["operation"] == "减法":result = calc["first_number"] - calc["second_number"]else:raise ValueError(f"不支持的操作: {calc['operation']}")results.append(result)return results@then("计算结果应该正确")
def _(results, calculations):for i, calc in enumerate(calculations):assert results[i] == calc["expected_result"], (f"计算错误:输入数据 {calc} 的结果 {results[i]} 不等于预期值 {calc['expected_result']}")

运行测试时,pytest-bdd 会自动解析 datatable 表格,并完成对应的计算和验证。


通过 datatable 参数,我们可以轻松实现批量化、结构化的测试流程,有效提升测试的覆盖率和代码的可维护性。

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

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

相关文章

Java学习——Day10

static修饰的成员变量和方法,从属与类。普通变量和方法从属于对象的 静态块就是类在初始化的执行的语句块,静态块中常调用静态变量和静态方法。 以下编写一段代码举个例子 Java参数传值机制 java中,方法中所有参数都是“值传递”&#xff…

StructRAG Boosting Knowledge 论文笔记

StructRAG: Boosting Knowledge Intensive Reasoning of LLMs via Inference-time Hybrid Information Structurization 论文精读 背景知识 知识密集型推理任务(knowledeg- intensive reasoning task): 知识密集型推理任务(knowledge-inte…

【点云上采样】最近邻插值上采样算法 增加点云密度

看了很多文章都是用CGAL去做的,又是下载安装CGAL的贼麻烦,关键弄好还不能用,气死了。 文章目录 前言一、最近邻插值上采样算法1、原理:2、步骤: 二、完整代码三、效果对比 前言 传感器采集到的点云比较稀疏&#xff0…

C++仿函数

概念 仿函数本质上是一个类(class)或者结构体(struct),不过这个类重载了函数调用运算符 operator(),使得它的实例对象可以像函数那样被调用。从使用方式上看,它能表现出类似函数的行为&#xf…

【Linux进程基础篇】总结 | => 进程环境变量(超详细)

-------------------------------------------------------------------------------------------------------------------------------- 每日鸡汤:Never frown, even when you are sad, because you never know who is falling in love wi…

PowerBI 无法拖动字段到组件上

今天在做PowerBI时发现一个奇怪的问题。 本来好好的报表,突然无法拖动字段到组件上。 后来在网上搜索相关问题,发现原因可能是因为"隐式度量值"被禁用。 就是说报表无法自动聚合计算,所以无法拖动字段到组件上。 正确的: 有问题…

熟食店称重计价秤软件下载 佳易王触摸屏称重自动读取重量自动计算金额系统操作教程

一、概述 【软件资源文件下载在文章最后】 熟食店称重计价秤软件下载 触摸屏称重自动读取重量自动计算金额系统操作教程 1、软件可以自动读取称的重量。2、自动计算金额并累计。不需打印条形码直接称重计算,节省人力和时间。 软件同时支持称重商品和条形码百货商…

十一 手写Spring框架

十一、手写Spring框架 Spring IoC容器的实现原理:工厂模式 解析XML 反射机制。 我们给自己的框架起名为:loveSpring 第一步:创建模块loveSpring 采用Maven方式新建Module:loveSpring 打包方式采用jar,并且引入do…

360多模态及文档理解大模型技术亮相全球机器学习技术大会,共探AI技术新前沿...

北京,2024年11月15日 —— 在人工智能技术飞速发展的今天,全球技术生态正经历着深刻的变革。2024全球机器学习技术大会(北京站)于11月14-15日在北京举行,汇聚了顶尖的AI专家、学者和行业实践者,共同探讨机器…

六自由度双足机器人运动控制

最近迷上了研究机器人,花了很多时间研究机器人的控制和交互。先后开发出来了四足四自自由度,四足八自由度,两足四自由度,两足六自由度机器人,并为他们开发了相应的大模型语音交互。通过努力,既锻炼了动手组…

shell脚本(2)

声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址:shell编程(2)永久环境变量和字符串显位_哔哩哔哩_bilibili 本文主要讲解临时变量和永久变量以及字符串长度截取操作。 一…

SEW MDX61B 变频器调试说明

SEW MDX61B 变频器调试说明 1、打开MOVITOOLS MotionStudio软件 2、创建新项目(可根据需求更改项目名称及保存路径) 新建完成 3、电机初始化 连接新变频器和新电机时,必须进行电机初始化。电机初始化目的为配对电机参数至变频器,简单说就是让变频器知道需要控制的是什么…

【软件测试】设计测试用例的万能公式

文章目录 概念设计测试用例的万能公式常规思考逆向思维发散性思维万能公式水杯测试弱网测试如何进行弱网测试 安装卸载测试 概念 什么是测试用例? 测试⽤例(Test Case)是为了实施测试⽽向被测试的系统提供的⼀组集合,这组集合包…

泛微OA 请求外部数据源

1 .oa 外部数据源配置好 取数据源名称 引用key 固定写法 datasource.A_nc datasource.数据源名称 getConnection("datasource.A_nc",xf);//A账 2 引用方式 package weaver.interfaces.jphr;import java.io.UnsupportedEncodingException; import java.sql.Conne…

深度学习基础—Bleu得分

引言 机器翻译任务中,通常会需要评价指标来评估机器翻译的好坏。仅通过统计翻译词在标准翻译中出现的次数这种方式很不合理,就需要用到Bleu得分来进行评估。 1.n-gram(N元组) 假设要翻译:Le chat est sur le tapis&am…

794: 最近对问题

解法&#xff1a; #include<bits/stdc.h> using namespace std; const int N1e33; struct P{int x,y; }a[N]; int main(int argc, char** argv) {int t,n;cin>>t;while (t--){cin>>n;for (int i0;i<n;i) cin>>a[i].x>>a[i].y;double dis,mn1…

Vue基础(1)_模板语法、数据绑定

模板语法 Vue模板语法有2大类&#xff1a; 1、插值语法&#xff1b; 功能&#xff1a;用于解析标签体内内容。 写法&#xff1a;{{xxx}}&#xff0c;xxx是js表达式&#xff0c;且可以直接读取到data中的所有属性。 2、指令语法&#xff1a; 功能&#xff1a;用于解析标签(包括…

如何清洗电水壶中的水垢亲自实践

以前看过很多生活小妙招&#xff0c;什么柠檬啊&#xff0c;白醋啊&#xff0c;土豆片啊&#xff0c;都测试过。没有用。因为自来水很硬&#xff0c;钙比较重。 钙覆盖在水壶底部&#xff0c;烧水就滋滋得响&#xff0c;而且效率变低。 昨天买洁厕剂&#xff0c;看到一种除垢…

LC13:滑动窗口

文章目录 1052. 爱生气的书店老板 这个专栏记录自己刷题碰到的有关滑动窗口的题目。 1052. 爱生气的书店老板 题目链接&#xff1a;1052. 爱生气的书店老板 第一感应该是滑动窗口可以解决的&#xff0c;随后思考并写了几个版本&#xff0c;最终版本实现结合滑动窗口一次遍历…

酒店管理系统(源码+文档+部署+讲解)

本文将深入解析“酒店管理系统”的项目&#xff0c;探究其架构、功能以及技术栈&#xff0c;并分享获取完整源码的途径。 系统概述 酒店管理系统是一款为酒店行业设计的全面管理软件&#xff0c;旨在通过集成酒店运营的各个关键环节&#xff0c;提高酒店的管理效率和客户满意…