Pytest-Bdd-Playwright 系列教程(9):datatable 参数的使用

Pytest-Bdd-Playwright 系列教程(9):datatable 参数的使用

  • 前言
  • 一、什么是 `datatable` 参数?
    • Gherkin 表格示例
  • 二、`datatable` 参数的基本使用
    • feature文件:获取用户信息并执行相关操作的
    • 使用 `datatable` 处理表格数据
    • `Given` 步骤:处理用户数据
    • `When` 步骤:分配角色
    • `Then` 步骤:验证权限

前言

  • 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文件:获取用户信息并执行相关操作的

假设我们有一个场景,要求在系统中创建多个用户并赋予不同的角色。我们可以通过以下 Gherkin 场景来定义数据表:

Feature: 用户账户管理Scenario: 创建新用户并分配角色Given the following user details:| name  | email             | age || John  | john@example.com   | 30  || Alice | alice@example.com  | 25  |When each user is assigned the following roles:| role      | description             || Admin     | 系统的完全访问权限      || Contributor | 可以添加内容          |And the page is savedThen the user should have the following permissions:| permission       | allowed || view dashboard   | true    || edit content     | true    || delete content   | false   |

在这个场景中,我们首先定义了一个包含用户详细信息的表格(Given the following user details),然后在 When 步骤中,我们为每个用户分配了不同的角色,最后在 Then 步骤中,我们验证每个用户是否拥有正确的权限。

使用 datatable 处理表格数据

首先,我们需要导入 pytest-bdd 提供的步骤装饰器,并定义每个步骤对应的处理函数。

Given 步骤:处理用户数据

Given 步骤中,我们需要处理 Gherkin 场景中定义的用户数据表。通过 datatable 参数,我们可以将每一行数据提取出来并存储在一个列表中。

from pytest_bdd import given, when, then@given("the following user details:", target_fixture="users")
def _(datatable):users = []for row in datatable[1:]:  # 跳过表头users.append({'name': row[0],'email': row[1],'age': row[2]})print(users)return users

在这个步骤中,我们首先跳过表头(datatable[1:]),然后将每一行数据转换为字典形式,最后将所有用户数据返回。

When 步骤:分配角色

When 步骤中,我们需要将每个用户分配角色。通过 datatable 参数,我们可以获得角色数据,并遍历每个用户,进行角色分配。

@when("each user is assigned the following roles:")
def _(datatable, users):for user in users:for role_row in datatable:assign_role(user, role_row[0], role_row[1])

在这个步骤中,我们遍历每个用户,并为每个用户分配角色。datatable 包含了角色信息,我们通过 role_row[0]role_row[1] 获取角色名称和描述,并调用 assign_role 函数进行分配。

Then 步骤:验证权限

Then 步骤中,我们需要验证每个用户是否拥有正确的权限。datatable 参数再次用于提供期望的权限数据,并将其与每个用户的实际权限进行对比。

@then("the user should have the following permissions:")
def _(datatable, users):expected_permissions = []for row in datatable[1:]:  # 跳过表头expected_permissions.append({'permission': row[0],'allowed': row[1]})assert users_have_correct_permissions(users, expected_permissions)

在这个步骤中,我们首先提取期望的权限数据,并将其存储为字典列表。然后,使用 assert 语句验证每个用户的权限是否与期望值一致。

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

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

相关文章

2分钟在阿里云ECS控制台部署个人应用(图文示例)

作为一名程序员,我有大量的个人代码和应用托管在Github/Gitee这些代码仓库。当我想要部署这些代码到我的阿里云ECS服务器时,往往会很麻烦,主要问题有这些: 需要手动安装和配置git,过程非常繁琐。每次都需要登录到机器…

【Kafka】集成案例:与Spark大数据组件的协同应用

🐇明明跟你说过:个人主页 🏅个人专栏:《大数据前沿:技术与应用并进》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是kafka 2、Kafka 的主要特性 3、Kafka 的…

Docker 的安装与使用

Docker 的安装 Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。 Docker CE 的安装请参考官方文档&#xf…

逐行加载 HTML 内容并实时显示效果:使用 wxPython 的实现

这篇博客中,我们将详细分析如何使用 wxPython 构建一个简单的桌面应用程序,用于逐行加载并显示 HTML 文件的内容,并在加载完成后通过浏览器组件呈现最终页面。通过该应用,我们可以体验到逐行加载 HTML 内容的视觉效果,…

【Linux】HTTP协议和HTTPS加密

文章目录 HTTP1、概念2、认识URL3、协议格式、请求方法和状态码4、HTTP请求和响应报头5、Cookie和Session HTTPS1、对称和非对称加密2、对称非对称加密安全分析3、证书 HTTP 1、概念 我们在应用层定制协议时,不建议直接发送结构体对象,因为在不同的环境…

计算机网络 (1)互联网的组成

一、互联网的边缘部分 互联网的边缘部分由所有连接在互联网上的主机组成,这些主机又称为端系统(end system)。端系统可以是各种类型的计算机设备,如个人电脑、智能手机、网络摄像头等,也可以是大型计算机或服务器。端系…

网络延迟对Python爬虫速度的影响分析

Python爬虫因其强大的数据处理能力和灵活性而被广泛应用于数据抓取和网络信息收集。然而,网络延迟是影响爬虫效率的重要因素之一。本文将深入探讨网络延迟对Python爬虫速度的影响,并提供相应的代码实现过程,以帮助开发者优化爬虫性能。 网络…

单片机设计电流与温度监控python上位机监控平台设计

目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 电路图采用Altium Designer进行设计: 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 在现代工业自动化和智能设备管理中,对电流和温度的实时监控是…

通过MongoDB Atlas 实现语义搜索与 RAG——迈向AI的搜索机制

目录 通过MongoDB Atlas 实现语义搜索与 RAG——迈向AI的搜索机制 一、引言 二、语义搜索与 MongoDB Atlas 的背景 三、MongoDB Atlas 的向量搜索功能 1. 向量搜索的实现方式 2. 典型操作示例 四、RAG 在 MongoDB Atlas 的应用 1、RAG是什么 2、RAG 的实现过程 3、RA…

Spring——事务

事务 JdbcTemplate 简介 Spring框架对JDBC进行封装&#xff0c;使用JdbcTemplate方便实现对数据库操作 准备工作 ①搭建子模块 搭建子模块&#xff1a;spring-jdbc-tx ②加入依赖 <dependencies><!--spring jdbc Spring 持久化层支持jar包--><dependenc…

C++ —— 哈希详解 - 开散列与闭散列

目录 1. 哈希的概念 1.1 直接定址法 1.2 哈希冲突 1.3 负载因子 1.4 哈希函数 1.4.1 除法散列法/除留余数法 1.4.2 乘法散列法 1.4.3 全域散列法 1.5 处理哈希冲突 1.5.1 开放定址法&#xff08;闭散列&#xff09; 1. 线性探测&#xff08;挨着查找&#xff09; 2.…

苦等三年!金克斯大人回来了!

2021年《英雄联盟&#xff1a;双城之战》第一季上线&#xff0c;该动画连续三周在全球 52 个国家和地区占据榜单前十&#xff0c;并在第49届安妮奖中斩获最佳电视 / 流媒体类动画、最佳艺术指导、最佳角色动画等9项大奖。 苦等三年&#xff01;&#xff01;&#xff01; 《双城…

NVR录像机汇聚管理EasyNVR多品牌NVR管理工具/设备:大华IPC摄像头局域网访问异常解决办法

在当今社会&#xff0c;安全监控已成为各类场所不可或缺的一部分。无论是家庭、学校、商业场所还是公共场所&#xff0c;安全监控设备都扮演着至关重要的角色。在众多监控品牌中&#xff0c;大华IPC摄像头凭借其高清画质、强大功能和卓越稳定性&#xff0c;赢得了市场的广泛认可…

随机数

目录 一、传统方式&#xff1a;std::rand 和 std::srand 使用方法&#xff1a; 优缺点&#xff1a; 二、现代方式&#xff1a; 库&#xff08;推荐&#xff09; 1. 随机整数 2. 随机浮点数 3. 布尔值 4. 字符 5. 正态分布&#xff08;高斯分布&#xff09; 6. 离散分…

Python Plotly 库使用教程

Python Plotly 库使用教程 引言 数据可视化是数据分析中至关重要的一部分&#xff0c;它能够帮助我们更直观地理解数据、发现潜在的模式和趋势。Python 提供了多种数据可视化库&#xff0c;其中 Plotly 是一个功能强大且灵活的库&#xff0c;支持交互式图表的创建。与静态图表…

LeetCode题解:5.最长回文子串【Python题解超详细,中心拓展、动态规划、暴力解法】

题目描述 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 解答 class Solution(object):def longestPalindrome(self, s):""":type s: str:rtype: str"""# 思路一&#xff1a;中心拓展def extend_from_center(left,right):# 从中心向…

企业一站式管理系统odoo的研究——PLM插件的搭建

大纲 1. 环境准备1.1 安装操作系统1.2 更新操作系统1.3 配置用户组和用户1.3.1 创建用户组 odoo1.3.2. 创建用户 odoo1.3.3. 设置用户 odoo 的密码1.3.4. 验证用户和组1.3.5. 将用户 odoo 添加到添加sudo组&#xff1a;1.3.6. 切到odoo用户 2. 安装 Odoo1. 安装依赖项目2.2. 安…

Keil基于ARM Compiler 5的工程迁移为ARM Compiler 6的工程

环境&#xff1a; keil版本为5.38&#xff0c;版本务必高于5.30 STM32F4的pack包版本要高于2.9 软件包下载地址&#xff1a;https://zhuanlan.zhihu.com/p/262507061 一、更改Keil中编译器 更改后编译&#xff0c;会报很多错&#xff0c;先不管。 二、更改头文件依赖 观察…

ABAP开发学习——ST05 ABAP SQL跟踪工具

操作步骤 第一步使用ST05之前&#xff0c;将要查的程序停留想要看的操作的前一步&#xff0c;这里想看到取数操作&#xff0c;所以停留在选择界面 第二步进入ST05 选择SQL Trace 然后激活 第三步去执行程序 第四步ST05取消激活 第五步查看操作 选完时间直接执行

C/C++语言基础--C++模板与元编程系列六,C++元编程相关库的讲解与使用

本专栏目的 更新C/C的基础语法&#xff0c;包括C的一些新特性 前言 模板与元编程是C的重要特点&#xff0c;也是难点&#xff0c;本人预计将会更新10期左右进行讲解&#xff0c;这是第六期&#xff0c;讲解元编程相关库等&#xff0c;本人感觉这一部分内容还是比较复杂的&am…