Pytest-Bdd-Playwright 系列教程(15):背景(Background)

Pytest-Bdd-Playwright 系列教程(15):背景(Background)

  • 前言
  • 一、什么是背景(Background)
  • 二、特性文件
  • 三、测试脚本
  • 四、运行测试
  • 总结

前言

在测试的过程中,我们往往会遇到这样的问题:多个测试场景需要相同的前置条件。如果每个场景重复编写这些前置条件,不仅显得冗余,还增加了维护成本。因此,pytest-bdd框架通常提供一种机制来解决这一问题,那就是背景(Background)。

一、什么是背景(Background)

在pytest-bdd中,背景(Background)用于定义在每个场景执行之前需要共享的步骤。通过使用背景,我们可以避免在多个场景中编写相同的Given步骤,从而减少重复并提高可读性。背景中的步骤在每个场景执行之前都会被调用,这样可以确保所有场景都有相同的初始条件。

背景的应用实例

假设在多个场景中,计算器的初始化状态是相同的。如果没有背景,每个场景都需要重复编写初始化步骤。使用背景,能够确保每个场景的前置条件一致,简化了代码。

二、特性文件

首先,新增features/calculator_demo.feature文件。背景部分通常位于.feature文件的开头,格式及内容如下:

Feature: 计算器一个简单的计算器,用于执行基本的算术操作。Background:Given 我已经准备好计算器Scenario: 检查计算器的尺寸Then 计算器的宽度应该是 12.5And 计算器的高度应该是 20.0And 计算器的厚度应该是 0.5Scenario: 打开计算器Given 我按下电源按钮Then 屏幕应该亮起Scenario Outline: 两个数字的计算Given 我检查按钮是否正常And 第一个数字是 <first_number>And 第二个数字是 <second_number>When 我按下 <operation>Then 结果应该是 <expected_result>Examples:| first_number | second_number | operation | expected_result || 5            | 3            | 加号       | 8               || 10           | 4            | 减号       | 6               || 2            | 6            | 乘号       | 12              || 8            | 2            | 除号       | 4               |

在这个示例中,背景部分定义了一些共同的前置条件,这些条件会在每个场景执行之前自动运行。通过这种方式,可以确保每个场景开始时的条件是一致的,避免了代码重复。

三、测试脚本

然后,新增test_calculator_demo.py文件,内容如下:

from pytest_bdd import given, when, then, parsers, scenario@scenario('calculator_demo.feature', '检查计算器的尺寸')
def test_calculator_size():pass@scenario('calculator_demo.feature', '打开计算器')
def test_open_calculator():pass@scenario('calculator_demo.feature', '两个数字的计算')
def test_two_numbers_calculation():pass@given("我已经准备好计算器")
def _():print("计算器已准备好!")@given("我检查按钮是否正常")
def _():print("按钮已检查。")@given("我按下电源按钮")
def _():pass@then("屏幕应该亮起")
def _():pass@then(parsers.parse("计算器的宽度应该是 {expected_width:f}"))
def _(expected_width: float):print(f"宽度: {expected_width}")@then(parsers.parse("计算器的高度应该是 {expected_height:f}"))
def _(expected_height: float):print(f"高度: {expected_height}")@then(parsers.parse("计算器的厚度应该是 {expected_thickness:f}"))
def _(expected_thickness: float):print(f"厚度: {expected_thickness}")@given(parsers.parse("第一个数字是 {first_number:d}"), target_fixture="first_number")
def _(first_number):return first_number@given(parsers.parse("第二个数字是 {second_number:d}"), target_fixture="second_number")
def _(second_number):return second_number@when(parsers.parse("我按下 {operation}"), target_fixture="result")
def _(operation, first_number, second_number):if operation == "加号":return first_number + second_numberelif operation == "减号":return first_number - second_numberelif operation == "乘号":return first_number * second_numberelif operation == "除号":return first_number / second_numberelse:raise ValueError(f"不支持的操作: {operation}")@then(parsers.parse("结果应该是 {expected_result:d}"))
def _(result, expected_result):assert result == expected_result

在这段代码中,我们定义了与计算器相关的步骤,并通过pytest-bdd的装饰器将其与特性文件中的场景绑定,每个步骤都与特性文件中的Given、When、Then对应。

四、运行测试

使用以下命令运行测试:

pytest ./tests/test_calculator_demo.py

运行结果如下:
在这里插入图片描述

总结

使用背景(Background)可以让我们的BDD测试更具可维护性和可读性,减少重复的代码,并帮助确保测试场景中的前提条件始终一致。在实际的项目中,善用背景和BDD的相关功能,可以极大地提升测试代码的质量和执行效率。

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

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

相关文章

Excel + Notepad + CMD 命令行批量修改文件名

注意&#xff1a;该方式为直接修改原文件的文件名&#xff0c;不会生成新文件 新建Excel文件 A列&#xff1a;固定为 renB列&#xff1a;原文件名称C列&#xff1a;修改后保存的名称B列、C列&#xff0c;需要带文件后缀&#xff0c;为txt文件就是.txt结尾&#xff0c;为png图片…

GESP202412 八级【排队】题解(AC)

》》》点我查看「视频」详解》》》 [GESP202412 八级] 排队 题目描述 小杨所在班级共有 n n n 位同学&#xff0c;依次以 1 , 2 , … , n 1,2,\dots,n 1,2,…,n 标号。这 n n n 位同学想排成一行队伍&#xff0c;其中有些同学之间关系非常好&#xff0c;在队伍里需要排在…

Ubuntu22.04 docker如何发布镜像(和用git差不多)

在dockerhub上创建远程仓库&#xff1a;https://hub.docker.com/ 将本地镜像打tag&#xff0c;并修改成可以上传到 dockerhub 的形式 # 查看本地镜像# 修改镜像 ## docker tag 镜像名称:标签 新的镜像名称&#xff08;要和远程仓库dockerhub上的一致&#xff09;:新的标签pus…

C#中的string操作详解-截取、分割、连接、替换等

在C#中&#xff0c;string 类提供了许多用于操作字符串的方法&#xff0c;包括截取、分隔和连接等。以下是一些常用字符串操作的介绍和实例&#xff1a; 1. 截取字符串 Substring 方法 用于从字符串中截取子字符串。 语法&#xff1a; //从startIndex开始截取&#xff0c;…

26. Three.js案例-自定义多面体

26. Three.js案例-自定义多面体 实现效果 知识点 WebGLRenderer WebGLRenderer 是 Three.js 中用于渲染场景的主要类。它支持 WebGL 渲染&#xff0c;并提供了多种配置选项。 构造器 new THREE.WebGLRenderer(parameters) 参数类型描述parametersObject可选参数对象&…

【IC面试问题:UCIE PHY LSM AXI Cache】

IC面试问题&#xff1a;UCIE PHY LSM && AXI && Cache 1 UCIE PHY LSM有几种状态&#xff1f; 以及L1和L2这两种低功耗状态有什么区别&#xff1f;2 AXI的特性&#xff1f; 通道之间有依赖关系吗&#xff1f; master和slave的valid和ready关系&#xff1f; 写数…

PPT技巧:将幻灯片里的图片背景设置为透明

在PPT中添加了图片&#xff0c;想要将图片中的背景设置为透明或者想要抠图&#xff0c;有什么方法吗&#xff1f;今天分享两个方法。 方法一&#xff1a; 添加图片&#xff0c;选中图片之后&#xff0c;点击【图片格式】功能&#xff0c;点击最左边的【删除背景】 PPT会自动帮…

池化在深度学习中增强特征的作用

目录 ​编辑 引言 池化的基本作用与特征降维 池化的定义与目的 池化操作的实现 提取关键特征与计算效率的提升 池化对特征提取的影响 平均池化的应用 提高特征鲁棒性与过拟合的防止 池化对模型鲁棒性的贡献 池化防止过拟合的原理 增强多级特征与特征表达能力的提升…

分布式 Raft算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & Raft算法 & 总结》《分布式 & Raft算法 & 问题》 参考文献 《Raft一致性算法论文译文》《深入剖析共识性算法 Raft》 简介 Raft 木筏是一种基于日志复制实现的分布式容错&一致性算法。在Raft算法…

基于强化学习Q-learning算法的栅格地图路径规划算法,可以更改地图大小及起始点,可以自定义障碍物,MATLAB代码

Q-learning是一种无模型的强化学习算法&#xff0c;它允许智能体&#xff08;agent&#xff09;在与环境&#xff08;environment&#xff09;交互的过程中学习如何通过执行动作&#xff08;actions&#xff09;来最大化累积奖励&#xff08;cumulative rewards&#xff09;。 …

JAVA学习笔记——第十一章 枚举和注解

一、引出枚举类 1.先看一个需求demo package com.hspedu.enum_;public class Enumration01 {public static void main(String[] args) {Season Spring new Season("春天", "温暖");Season Summer new Season("夏天", "炎热");Seas…

腾讯微信Android面试题及参考答案(多张原理图)

Android 应用的启动流程如下&#xff1a; 当用户点击应用图标时&#xff0c;首先会通过 Launcher&#xff08;桌面启动器&#xff09;来响应这个操作。Launcher 本身也是一个 Android 应用&#xff0c;它运行在系统中&#xff0c;负责管理和显示桌面上的图标等信息。 系统会检查…

SQL server学习02-使用T-SQL创建数据库

目录 一&#xff0c; 使用T-SQL创建数据库 1&#xff0c;数据库的存储结构 2&#xff0c;创建数据库的语法结构 1&#xff09;使用T-SQL创建学生成绩管理数据库 二&#xff0c;使用T-SQL修改数据库 1&#xff0c;修改数据库的语法结构 1&#xff09;修改学生成绩管理数…

python web练习案例:基于表单类的商品管理(修改并删除商品信息)

目录 1、修改商品信息 &#xff08;1&#xff09;修改show.html页面&#xff0c;增加 修改 栏 &#xff08;2&#xff09;创建 update.html 网页&#xff0c;继承 add.html 模板 &#xff08;3&#xff09;定义视图函数 &#xff08;4&#xff09;定义路由 (5) 浏览器查看 …

前端成长之路:CSS(1)

在前端三件套中&#xff0c;CSS的主要是用于美化网页、进行页面布局的。 HTML的局限性 HTML是一个非常单纯的语言&#xff0c;它只关心内容的语义&#xff1a; 比如看见h1标签&#xff0c;就表明这是一个大标题、看见p标签&#xff0c;就表明这是一个段落、看见img标签&#…

【开源】基于SpringBoot框架的房屋租赁系统 (计算机毕业设计)+万字毕业论文 T020

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境&#xff1a; Tomcat 7.x,8.x,9.x版本均可 操作系统…

hbuilder 本地插件配置

插件存放路径&#xff0c;项目根目录nativeplugins下&#xff0c;没有就新建。 aar文件存放路径\nativeplugins\module\android package.json存放路径\nativeplugins\module\ 配置package.json文件 { "name": "module", "id": "modu…

内圆弧转子泵绘制工具开发

接着上期的Gerotor 泵的话题继续。最近有小伙伴找我开发一个内圆弧摆线泵的计算绘制工具&#xff0c;也就是把上次计算绘制的过程做成一个桌面应用工具&#xff0c;这样用起来会更方便、效率更高。那究竟是什么样的工具呢&#xff1f;一起来看看&#xff1a; 前面不是已经有了上…

(持续更新)linux网络编程中需要注意的内核参数与网络机制

目录 零、基本说明 一、内核参数 二、相关机制 1、GRO &#xff08;1&#xff09;适用场景 &#xff08;2&#xff09;优缺点 &#xff08;3&#xff09;相关操作 2、Nagle 算法 &#xff08;1&#xff09;基本规则 &#xff08;2&#xff09;优缺点 &#xff08;3&…

转:Quad Remesher 1.0.1使用说明(中文)

Blender 重拓扑插件&#xff0c;使用起来相当简单。不仅能自定义控制局部面数&#xff0c;还能根据不同的材质球来检测硬边进行重拓扑。 QuadRemesher2023版maya报错问题解决方案 马奇诺 编辑于 2023年05月11日 04:39 收录于文集 ChadTips_Maya 1篇 新版maya导入QuadRemes…