当前位置: 首页 > article >正文

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, scenarios

scenarios("example.feature")

@given("我已经准备好计算器")
def _():
    print("计算器已准备好!")
@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.kler.cn/a/399557.html

相关文章:

  • 【汇编】c++游戏开发
  • Centos 7 安装wget
  • 十:详解HTTP的请求行
  • 中仕公考怎么样?事业编面试不去有影响吗?
  • GitLab 如何降级?
  • 论文解析:计算能力资源的可信共享:利益驱动的异构网络服务提供机制
  • 【论文阅读】主动推理:作为感知行为的理论
  • hadoop分布式文件系统常用命令
  • ssm118亿互游在线平台设计与开发+vue(论文+源码)_kaic
  • Flutter 新建工程一直等待 解决办法
  • ajax异步请求和嵌套 iframe 资源访问的区别
  • 计算机组成原理笔记----基础篇
  • 【Qualcomm 】CDSP介绍以及简单的使用
  • 探索Python的HTTP利器:Requests库的神秘面纱
  • 基于YOLOv8深度学习的汽车车身车损检测系统研究与实现(PyQt5界面+数据集+训练代码)
  • 如何在Mysql中生成0-23完整的小时数据
  • Docker:查看镜像里的文件
  • 【Android】Android滑动冲突解决方案
  • Android 13 实现屏幕熄屏一段时候后关闭 Wi-Fi 和清空多任务列表
  • UnoCss 安装
  • 【前端知识】Vue组件Vuex详细介绍
  • Ceph层次架构分析
  • 【日志】力扣11.盛水最多的容器
  • git配置用户信息
  • 使用Aria2实现离线下载
  • 【策略模式】最佳实践——Spring IoC实现策略模式全流程深度解析