Pytest-Bdd-Playwright 系列教程(14):Docstring 参数

Pytest-Bdd-Playwright 系列教程(14):Docstring 参数

  • 前言
  • 一、什么是docstring?
  • 二、基本语法
  • 三、主要特点
  • 四、实际例子
  • 五、注意事项
  • 六、使用建议
  • 总结

前言

  • 在自动化测试的过程中,我们经常需要处理复杂的测试数据或需要输入多行文本。Pytest-Bdd
    提供了一种解决方案——Docstring 参数,它能够有效地解决这些问题;
  • Docstring 参数允许在 Gherkin 语法的步骤中嵌入多行文本,这在多种测试场景下都非常有用,包括但不限于复杂业务规则的描述、长文本输入的测试、详细测试步骤的记录、复杂预期结果与API 响应内容的验证以及文本内容的比对等。

一、什么是docstring?

在 Python 中,Docstring 是指位于函数、模块或类定义开头的字符串,通常用于描述其用途和参数等信息。而在 Pytest-BDD 中,Docstring 被赋予了新的含义,它是指在 Gherkin 步骤中定义的多行文本,这些文本使用三重引号 (“”") 来包围。这种特性使得测试编写者能够在测试步骤中直接嵌入大量文本数据,而无需通过外部文件加载或硬编码的方式。

二、基本语法

在 Pytest-BDD 中使用 Docstring 的基本语法如下所示:

When 这是一个简单的docstring:
      """
      这是一个测试文本
      包含两行内容
      """

上述示例中,When 关键字后面的步骤定义了一个 Docstring,其中包含了两行文本。这些文本将作为一个整体传递给相应的步骤函数。

三、主要特点

  • 单个字符串传递:无论 Docstring 包含多少行文本,它都会作为一个单个的字符串传递给步骤函数;
  • 多行支持:多行文本之间通过换行符 \n 分隔;
  • 自动处理缩进:Pytest-BDD 会自动移除 Docstring 内部的前导缩进,确保文本格式的一致性;
  • 专属性质:只有在定义了 Docstring 的步骤中,才能使用 Docstring 参数。

四、实际例子

# features/docstring_demo.feature
Feature: 文档字符串演示

  Scenario: 带有docstring的场景
    Given 准备测试docstring
    When 这是一个简单的docstring:
      """
      这是一个测试文本
      包含两行内容
      """
# tests/test_docstring_demo.py
from functools import partial
from pytest_bdd import given, when, parsers, scenario

scenario = partial(scenario, 'docstring_demo.feature')

@scenario('带有docstring的场景')
def test_docstring_demo():
    pass

@given('准备测试docstring')
def _():
    pass

@when(parsers.parse('这是一个简单的docstring:\n{docstring}'))
def step_with_docstring(docstring):
    # docstring参数将包含完整的文档字符串内容
    assert docstring == "这是一个测试文本\n包含两行内容"

运行命令:

pytest ./tests/test_docstring_demo.py

运行结果如下:

在这里插入图片描述

五、注意事项

  • 如果步骤没有定义docstring但在函数中使用了docstring参数,会抛出错误。
  • docstring的缩进会被自动处理,例如:
Then 步骤
"""
    即使有缩进
    也会被去除
"""

实际得到的字符串会是:“即使有缩进\n也会被去除”

六、使用建议

  • 长文本数据:当需要传递较长的测试数据时,使用 Docstring 可以使代码更加简洁和易读;
  • 多行文本内容:适合用于测试多行文本内容,如日志文件、配置文件等;
  • 复杂输出结果:可以用于验证复杂的输出结果,特别是当输出结果包含多行文本或结构化数据时;
  • API 响应验证:在测试 API 接口时,使用 Docstring 可以方便地定义和验证复杂的 JSON 响应。

总结

通过合理使用 Docstring 参数,我们可以更好地组织和管理 BDD 测试用例,使测试代码更加清晰和专业。在实际项目中,建议根据具体需求灵活运用这一功能,以提升自动化测试的效率和可维护性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Quad Remesher使用教程

为什么要拓扑? 我们知道,模型在三维软件中的表现,是由一系列的面通过不同角度组合而成的。3D模型制作层面上的拓扑,按我的理解来说,就是一个模型的面的结构分布——布线。想表现和制作一个三维模型,有无限…

智慧政务数据中台建设及运营解决方案

数据中台:政府数字化转型的引擎 数据中台作为政府数字化转型的核心驱动力,起源于美军的作战体系,强调高效、灵活与强大。它不仅促进了政府决策的科学性,还推动了政府服务的精细化与智能化。 数据中台的应用场景:数字…

Transformer: Attention Is All You Need (2017) 翻译

论文:Attention Is All You Need 下载地址如下: download: Transformer Attention Is All you need Attention Is All You Need 中文 《Attention Is All You Need》是《Transformer》模型的开创性论文,提出了一种全新的基于注意力机制的架构&#xf…

Android 系统应用重名install安装失败分析解决

Android 系统应用重名install安装失败分析解决 文章目录 Android 系统应用重名install安装失败分析解决一、前言1、Android Persistent apps 简单介绍 二、系统 persistent 应用直接安装需求分析解决1、系统应用安装报错返回的信息2、分析解决 三、其他1、persistent系统应用in…

3D一览通在线协同设计,助力汽车钣金件设计与制造数字化升级

汽车行业已迎来智能化的汹涌浪潮,在此背景下,零部件制造商唯有积极应对,以智能制造为核心驱动力,方能跟上行业发展步调,在激烈的市场竞争中抢占先机。作为整车制造不可或缺的核心组件之一,汽车钣金件亦需紧…

如何将你的 Ruby 应用程序从 OpenSearch 迁移到 Elasticsearch

作者:来自 Elastic Fernando Briano 将 Ruby 代码库从 OpenSearch 客户端迁移到 Elasticsearch 客户端的指南。 OpenSearch Ruby 客户端是从 7.x 版 Elasticsearch Ruby 客户端分叉而来的,因此代码库相对相似。这意味着当将 Ruby 代码库从 OpenSearch 迁…

Kafka系列教程 - Kafka 生产者 -2

1. 生产者简介 不管是把 Kafka 作为消息队列系统、还是数据存储平台,总是需要一个可以向 Kafka 写入数据的生产者和一个可以从 Kafka 读取数据的消费者,或者是一个兼具两种角色的应用程序。 使用 Kafka 的场景很多,诉求也各有不同&#xff…

动态规划:0-1背包问题 图文+举例超详细说明

一、题目描述 给定n(n<100)种物品和一个背包。物品i的重量是wi(wi<100)&#xff0c;价值为vi(vi<100)&#xff0c;背包的容量为C(C<1000)。 应如何选择装入背包中的物品&#xff0c;使得装入背包中物品的总价值最大? 在选择装入背包的物品时&#xff0c;对每种物…

实例:图片处理

目录 图片处理 Python代码展示 代码逐行注释 图片素材 运行结果 需要注意的几点&#xff1a; 运行思路 1. 导入必要的模块及类&#xff08;开头部分&#xff09; 2. 定义文件相似度检查函数&#xff08;file_similarity_checker 函数部分&#xff09; 3. 指定要比较的…

鸿蒙项目云捐助第四讲鸿蒙App应用的登陆注册页实现

根据app的操作流程可以知道&#xff0c;当启动页启动后&#xff0c;点击启动页中的页面就进入到了登录页。本讲就是针对于登录注册页的实现&#xff0c;实现的界面参考下图。 这里根据这个素材的参考实现鸿蒙Next云捐助的登录页。 一、鸿蒙Next云捐助登录页的实现 在项目中继…

大屏开源项目go-view二次开发1----环境搭建(C#)

最近公司要求做一个大屏的程序用于展示公司的产品&#xff0c;我以前也没有相关的经验&#xff0c;最糟糕的是公司没有UI设计的人员&#xff0c;领导就一句话要展示公司的产品&#xff0c;具体展示的内容细节也不知道&#xff0c;全凭借自己发挥。刚开始做时是用wpf做的&#x…

WHLUG丨deepin、华中科技大学开放原子开源俱乐部、 RustSBI 和清华大学开源操作系统训练营共话开源新生代成长之路

2024年11月30日下午&#xff0c;由 deepin&#xff08;深度&#xff09;社区联合华中科技大学开放原子开源俱乐部、 RustSBI 开源社区和清华大学开源操作系统训练营共同举办的WHLUG&#xff08;武汉Linux用户组&#xff09;线下沙龙在华中科技大学成功举办。 本次活动聚集了50余…

操作系统的基本认识

操作系统的感性认识 操作系统这个词可能或多或少听说过&#xff0c;比如windows, linux, macOS。这些其实都是工程师们经过实践后的具象化产物。而操作系统原理这六个字就是操作系统的抽象化&#xff0c;更准确的说&#xff0c;操作系统原理是很理论化的东西。举一个不是很恰当…

强化学习Q-learning及其在机器人路径规划系统中的应用研究,matlab代码

一、Q-learning 算法概述 Q-learning 是一种无模型的强化学习算法&#xff0c;它允许智能体&#xff08;agent&#xff09;在没有环境模型的情况下通过与环境的交互来学习最优策略。Q-learning的核心是学习一个动作价值函数&#xff08;Q-function&#xff09;&#xff0c;该函…

微信小程序横屏页面跳转后,自定义navbar样式跑了?

文章目录 问题原因&#xff1a;解决方案&#xff1a; 今天刚遇到的问题&#xff0c;横屏的页面完成操作后跳转页面后&#xff0c;自定义的tabbar样式乱了&#xff0c;跑到最顶了&#xff0c;真机调试后发现navbar跑到手机状态栏了&#xff0c;它正常应该跟右边胶囊一行。 知道问…

分布式 Paxos算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & Paxos算法 & 总结》《分布式 & Paxos算法 & 问题》 参考文献 《图解超难理解的 Paxos 算法&#xff08;含伪代码&#xff09;》《【超详细】分布式一致性协议 - Paxos》 Basic-Paxos 基础帕克索斯算法…

10.qml使用 shadereffect 实现高斯模糊

目录 高斯模糊sigma获取加权均值获取 高斯二维公式实现高斯一维公式实现使用总结 高斯模糊 高斯模糊应用领域我就不过多讲解&#xff0c;想了解自己去了解 高斯模糊有 一维公式 二维公式 当然我们图像是二维的 但是实际上二维公式用于计算那是消耗大量的算力的&#xff0c…

从 CephFS 到 JuiceFS:同程旅游亿级文件存储平台构建之路

随着公司业务的快速发展&#xff0c;同程旅行的非结构化的数据突破 10 亿&#xff0c;在 2022 年&#xff0c;同程首先完成了对象存储服务的建设。当时&#xff0c;分布式文件系统方面&#xff0c;同程使用的是 CephFS&#xff0c;随着数据量的持续增长&#xff0c;CephFS 的高…

相机测距原理

基础概念的回顾 焦距的定义 焦距是指透镜或镜头的光学中心&#xff08;通常是透镜的几何中心&#xff09;到其焦点的距离。 焦点是光线的交点&#xff0c;它指的是透镜或镜头聚焦所有入射光线后汇聚的位置。焦点的位置与透镜的曲率和光线的入射角度相关。就是说所有光线经过…

AOF和RDB【Redis持久化篇】

文章目录 1.什么是持久化&#xff1f;2.RDB3.AOF 1.什么是持久化&#xff1f; Redis是跑在内存里的&#xff0c;当程序重启或者服务器崩溃&#xff0c;数据就会丢失&#xff0c;如果业务场景希望重启之后数据还在&#xff0c;就需要持久化&#xff0c;即把数据保存到可永久保存…