Pytest-Bdd-Playwright 系列教程(17):标签管理(Tags)

news2025/2/28 0:32:49

Pytest-Bdd-Playwright 系列教程(17):标签管理(Tags)

  • 前言
  • 一、创建Feature文件
  • 二、创建步骤定义文件
  • 三、pytest.ini 配置文件
  • 四、conftest.py文件
  • 五、运行测试
    • 5.1 运行带有特定标签的测试
    • 5.2 运行带有多个标签的测试
    • 5.3 运行带有任意标签的测试
    • 5.4 排除特定标签的测试
    • 5.5 使用 -k 参数筛选运行测试
  • 总结

前言

  • 为了有效地管理和执行大量的测试用例,我们需要一种灵活的方式来控制哪些测试用例应该执行,哪些可以跳过;
  • Pytest-BDD作为一种基于 Behavior Driven Development(BDD)的测试框架,提供了标签(Tags)功能,允许我们在Feature文件和Scenario中添加标签,从而灵活地控制测试的执行顺序与范围。

一、创建Feature文件

新增features/tag_demo.feature文件,内容如下:

@feature_tag_1 @feature_tag_2
Feature: Tags

    @scenario_tag_1 @scenario_tag_01
    Scenario: Tags 1
        Given 这是一个前置条件步骤

    @scenario_tag_2 @scenario_tag_02
    Scenario: Tags 2
        Given 这是一个前置条件步骤

    @todo
    Scenario: To-do

在这个示例中,我们为Feature和每个Scenario都添加了标签。Feature和Scenario均可以添加一个或多个标签。标签可以帮助我们在运行时选择性地执行某些特定的功能或场景。

注:@todo标签表示该场景尚未实现,可以在测试运行时将其跳过。

二、创建步骤定义文件

新增test_tag_demo.py文件,内容如下:

from pytest_bdd import given, scenarios

@given('这是一个前置条件步骤')
def _():
    return 'given'

scenarios('tag_demo.feature')

在这段代码中,@given装饰器将这是一个前置条件步骤与Python函数进行了关联。当pytest-bdd执行测试时,遇到这个步骤时将调用该函数。在这个简单的例子中,我们只是返回了字符串’given’,实际应用中可以根据需求进行更复杂的操作。

此外,scenarios(‘tag_demo.feature’)用于加载tag_demo.feature文件中的所有场景。如果Feature文件中有多个场景,我们可以在步骤定义文件中统一加载它们,并根据需要定义相应的步骤。

三、pytest.ini 配置文件

为了让pytest-bdd识别和执行Feature文件中的标签,我们需要在pytest.ini配置文件中为标签添加标记。通过在配置文件中定义markers,我们可以告知pytest哪些标签是有效的,并可以根据这些标签来选择性地运行特定的功能或场景。

[pytest]
markers =
    feature_tag_1
    feature_tag_2
    rule_tag_01
    scenario_tag_1
    scenario_tag_01
    scenario_tag_2
    scenario_tag_02

在上面的配置文件中,我们为每个标签添加了标记,确保pytest能够识别并根据这些标签来执行相应的测试。例如,当我们只希望运行带有@scenario_tag_1标签的场景时,可以使用pytest命令行选项来过滤标签。

四、conftest.py文件

在项目根目录的conftest.py文件,新增内容如下:

def pytest_bdd_apply_tag(tag, function):
    if tag == 'todo':
        marker = pytest.mark.skip(reason="该用例尚未实现")
        marker(function)
        return True
    else:
        # 回退到pytest-bdd的默认行为
        return None

在这段代码中,pytest_bdd_apply_tag钩子函数会检查每个场景的标签。如果场景的标签是@todo,则会使用pytest.mark.skip标记该场景为跳过,并在测试执行时跳过该场景。通过这种方式,我们可以灵活地控制测试用例的执行,确保未实现的场景不会被执行。

五、运行测试

5.1 运行带有特定标签的测试

假设我们希望只运行带有 @scenario_tag_1 标签的场景,可以使用以下命令:

pytest -m scenario_tag_1

在这里插入图片描述

5.2 运行带有多个标签的测试

如果我们希望运行带有多个标签的测试,例如 @scenario_tag_2 和 @scenario_tag_02,可以使用 and 操作符:

pytest -m "scenario_tag_2 and scenario_tag_02"

在这里插入图片描述

5.3 运行带有任意标签的测试

如果我们希望运行带有任意标签的测试,例如 @scenario_tag_1 或 @scenario_tag_2,可以使用 or 操作符:

pytest -m "scenario_tag_1 or scenario_tag_2"

在这里插入图片描述

5.4 排除特定标签的测试

如果我们希望排除某些标签,例如排除 @scenario_tag_1 标签的场景,可以使用 not 操作符:

pytest -m "not scenario_tag_1"

5.5 使用 -k 参数筛选运行测试

与 -m 参数不同,-k 可以通过匹配Feature、Scenario、函数名、标签等来进行更精细的筛选。

如果我们想要运行所有包含 feature_tag_1 标签的场景,可以使用以下命令:

pytest -k "feature_tag_1"

在这里插入图片描述

-k 的更多使用方式
按名称部分匹配:我们还可以通过 -k 参数部分匹配测试名称,例如,如果我们只想运行名称中包含“Tag”的测试,可以使用:

pytest -k "Tags"

这会匹配所有名称中包含"Tags"的测试,无论它们是否包含具体的标签。
在这里插入图片描述

组合使用 -m 和 -k:如果我们希望根据标签和测试名称的组合进行筛选,可以同时使用 -m 和 -k,例如,运行带有 scenario_tag_1 标签且名称中包含“Tags”的测试:

pytest -m "scenario_tag_1" -k "Tags"

总结

通过标签化管理,我们可以更加灵活和高效地控制 Pytest-BDD 测试的执行。

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

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

相关文章

基于深度学习的猫狗识别系统【深度学习课设】

🏆 作者简介:席万里 ⚡ 个人网站:https://dahua.bloggo.chat/ ✍️ 一名后端开发小趴菜,同时略懂Vue与React前端技术,也了解一点微信小程序开发。 🍻 对计算机充满兴趣,愿意并且希望学习更多的技…

java常见的集合框架

常见的集合框架 JAVA的集合框架可以分成两类。 Collection,主要有List、vector、set、queue List代表有序,可重复的集合,像动态数组ArrayList和链表LinkedList Set代表无序不可重复的集合。像HashSet、TreeSet Queue代表队列,像…

期末速成C++【类和对象】

目录 1.面向对象的编程思想 2.面向对象的三大特征 3.封装 4.类的定义 5.成员函数 6.对象的创建和使用 7.字符串string的使用 8.this指针 9.构造函数VS析构函数 9.1🎇构造函数 9.1.1无参构造函数&有参构造函数​ 9.1.2构造函数的初始化表 9.1.3重…

牛客周赛 Round 72 <字符串>

<1>小红的01串&#xff08;一&#xff09; #include<stdio.h> #include<string.h> char ch[100]; int main() {scanf("%s",ch);int count0;int lenstrlen(ch);for(int i0;i<len-1;i){if(ch[i]!ch[i1]){count;} }printf("%d",count);…

2024.12.14 TCP/IP 网络模型有哪几层?

2024.12.14 TCP/IP 网络模型有哪几层? 2024.12.14 今天周六 看到大伙都在考六级&#xff0c;我来复盘小林coding的计算机网络的知识点&#xff1a; TCP/IP 网络模型有哪几层? 问大家&#xff0c;为什么要有 TCP/IP 网络模型? 对于同一台设备上的进程间通信&#xff0c;有…

将 Ubuntu 22.04 LTS 升级到 24.04 LTS

Ubuntu 24.04 LTS 将支持 Ubuntu 桌面、Ubuntu 服务器和 Ubuntu Core 5 年&#xff0c;直到 2029 年 4 月。 本文将介绍如何将当前 Ubuntu 22.04 系统升级到最新 Ubuntu 24.04 LTS版本。 备份个人数据 以防万一&#xff0c;把系统中的重要数据自己备份一下~ 安装配置SSH访问…

商业化大前端在性能优化领域的探索与实践

导读&#xff1a;在业务飞速发展的过程中&#xff0c;用户体验是必不可少的一个环节&#xff0c;而页面性能是直接影响用户体验的重要因素。当页面加载时间过长、交互操作不流畅时&#xff0c;意味着业务可能会出现转化率降低、用户流失等业务问题。在过去一年&#xff0c;为了…

Envoy 进阶指南(下):深入探究Envoy服务和架构

接上篇&#xff1a;《Envoy 进阶指南&#xff08;上&#xff09;&#xff1a;从入门到核心功能全掌握》 链接 文章目录 3.深入探究Envoy3.1 Envoy服务发现机制3.1.1文件订阅3.1.2 gRPC 流式订阅3.1.3 REST-JSON 轮询订阅 3.2监听器&#xff08;Listener&#xff09;3.3.架构3.3…

将PDF流使用 canvas 绘制展示在页面上(一)

将PDF流展示在页面上 使用 pdfjs-dist 库来渲染 PDF 页面到 canvas 上进行绘制展示 安装 pdfjs-dist 依赖 npm install pdfjs-dist 或者 yarn add pdfjs-dist创建一个组件来处理 PDF 流的加载和渲染 该组件中是一个包含 PDF 文件的 Base64。 将 pdf 流传入该组件中使用 /** fo…

PCIE概述

PCIE概述 文章目录 PCIE概述前言一、应用场景二、PCIE理论2.1 硬件2.2 拓扑结构&#xff1a;处理器和设备之间的关系2.3 速率2.4 层次接口2.5 四种请求类型2.5.1 bar空间2.5.2 memory2.5.3 IO2.5.4 configuration2.5.5 message 前言 参考链接&#xff1a; pcie总线知识点解析 …

序列模型的使用示例

序列模型的使用示例 1 RNN原理1.1 序列模型的输入输出1.2 循环神经网络&#xff08;RNN&#xff09;1.3 RNN的公式表示2 数据的尺寸 3 PyTorch中查看RNN的参数4 PyTorch中实现RNN&#xff08;1&#xff09;RNN实例化&#xff08;2&#xff09;forward函数&#xff08;3&#xf…

Elasticsearch8.17.0在mac上的安装

1、下载并安装 下载8.17版本es(目前最新版本)&#xff1a;Download Elasticsearch | Elastic 也可以通过历史版本列表页下载&#xff1a;Past Releases of Elastic Stack Software | Elastic 当然也可以指定具体版本号进行下载&#xff1a;Elasticsearch 8.17.0 | Elastic …

【自动控制原理】学习地图

分值分布 选择+填空+判断:50分 大题:50分 概念 控制系统的数学模型 在控制系统的分析和设计中,首先要建立系统的数学模型。控制系统的数学模型是描述系统内部物理量(或变量)之间关系的数学表达式。 在静态条件下(即变量各阶导数为零),描述变量之间关系的代数方程叫静态…

Synchronous Serial Port 协议详解

1、简介 Synchronous Serial Port (SSP) &#xff0c;基于下图文档的设计标准 1.1、包含3种数据帧格式&#xff1a; a Motorola SPI-compatible interface&#xff08;以下简称SPI&#xff09;a Texas Instruments synchronous serial interface&#xff08;简写SSI&#xff…

前端OpenAPI根据后端Swagger自动生成前端接口报错

测试之后发现是因为Map<Long,List<CommentVO>>的返回值类型的锅&#xff0c;改成Page<List<CommentVO>>即可解决。 前端使用的umiMAX的openapi&#xff0c;报错如下&#xff1a; originalRef: BaseResponseboolean\n "401&q…

在线预约陪诊小程序

一、前言 随着社会老龄化加剧以及人们健康意识的提高&#xff0c;就医过程中的陪伴需求日益增长。许多患者在面对复杂的医院环境、繁琐的就医流程时&#xff0c;需要有人协助挂号、候诊、取药等&#xff0c;而家属可能因工作繁忙无法全程陪同。同时&#xff0c;异地就医的患者更…

信号滤波分析-低通分析(Matlab)

Matlab低通滤波 信号滤波分析-低通分析&#xff08;Matlab&#xff09; 【标价是仅源码的价格】 【有课程设计答辩PPT和设计文档报告】 需要或感兴趣可以随时联系博主哦&#xff0c;常在线秒回&#xff01; 低通滤波分析方案的设计包括&#xff1a; 1.信号生成原理 2.低通滤波…

全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之复合运算符

&#xff08;一&#xff09;、复合运算符 在C中&#xff0c;可以通过“赋值语句”来修改变量的值。赋值语句的格式&#xff1a; 变量名 值或者表达式&#xff1b;其中""称为"赋值运算符"。 除此之外&#xff0c;在赋值运算符当中&#xff0c;C有复合赋…

半导体器件与物理篇5 1~4章课后习题

热平衡时的能带和载流子浓度 例 一硅晶掺入每立方厘米10^{16}个砷原子&#xff0c;求室温下(300K)的载流子浓度与费米能级。 需要用到的公式包括1.本征载流子浓度公式 2.从导带底算起的本征费米能级 2.从本征费米能级算起的费米能级 载流子输运现象 例1:计算在300K下&#x…

Qt-Advanced-Docking-System配置及使用、心得

Qt-Advanced-Docking-System 1. Qt-Advanced-Docking-System描述2. 功能特点2.1. 灵活的停靠方式2.2. 嵌套停靠2.3. 自定义布局保存与恢复2.4. 外观和行为定制 3. 与Qt原生停靠系统的比较4. 使用场景4.1. 集成开发环境&#xff08;IDE&#xff09;4.2. 图形设计软件4.3. 数据分…