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

Pytest-Bdd-Playwright 系列教程(10):配置功能文件路径 优化场景定义

Pytest-Bdd-Playwright 系列教程(10):配置功能文件路径 & 优化场景定义

  • 前言
  • 一、功能文件路径的配置
    • 1.1 全局设置功能文件路径
    • 1.2. 在场景中覆盖路径
  • 二、避免重复输入功能文件名
    • 2.1 使用方法
    • 2.2 `functools.partial` 的背景
  • 三、应用场景总结

前言

  • 在实际应用的过程中,我们经常需要根据不同的测试需求来调整功能文件(.feature文件)的路径,以及优化测试场景的定义以减少重复代码;
  • 本文将详细介绍如何配置功能文件路径以及如何使用 functools.partial 方法来优化场景定义,帮助大家更高效地管理和执行 BDD 测试。

一、功能文件路径的配置

默认情况下,pytest-bdd 会将当前模块路径作为功能文件(feature file)的查找路径。但我们可以通过以下方式调整此行为:

1.1 全局设置功能文件路径

pytest 的配置文件中(如 pytest.initox.inisetup.cfg),使用 bdd_features_base_dir 键指定一个新的路径。例如:

# pytest.ini
[pytest]
bdd_features_base_dir = features/

这意味着,除非在单个场景中另有指定,否则所有的 BDD 特征文件(.feature 文件)都将从这个指定的路径下查找。在这个例子中,全局路径被设置为项目根目录下的features/路径

1.2. 在场景中覆盖路径

我们可以通过 @scenario 装饰器的 features_base_dir 参数为单个场景设置不同的路径。例如:

from pytest_bdd import scenario@scenario("foo.feature", "Foo 功能")
def test_foo():pass@scenario("demo.feature","Demo 功能",features_base_dir="./test/features/",
)
def test_foo_local():pass

这种方式允许在特定测试中灵活调整功能文件的路径。
第一个场景没有指定 features_base_dir 参数,因此它将使用全局设置的路径 features/;
第二个场景通过 @scenario 装饰器的 features_base_dir 参数指定了一个特定场景覆盖的路径:./test/features/,此时不会使用全局设置的路径。

二、避免重复输入功能文件名

当一个测试文件中包含多个场景时,重复输入相同的功能文件路径可能显得冗余且容易出错。为了解决这个问题,可以借助 Python 的 functools.partial 方法。

2.1 使用方法

test_search.py文件,通过 functools.partial 创建一个带有预设路径的 scenario 函数。例如:
在这里插入图片描述

import pytest
from steps.search_steps import *
from pytest_bdd import scenario
from functools import partialscene = partial(scenario, 'search.feature')@pytest.mark.smoke
@scene('成功搜索')
def test_successful_search():pass@pytest.mark.low
@scenario('search.feature', '失败搜索')
def test_failed_search():pass

上述代码的优势在于只需指定一次功能文件路径 /features/search.feature,即可简化后续的场景定义。

2.2 functools.partial 的背景

functools.partial 是 Python 标准库中的一个工具,允许创建一个新函数,该函数会固定原始函数的部分参数值。有关更多信息,请参考 Python 官方文档。


三、应用场景总结

  • 全局配置路径:适用于大部分功能文件都在同一目录下的项目。
  • 按场景配置路径:适合少量场景需要自定义路径的情况。
  • 使用 partial 优化:非常适合多个场景都依赖同一个功能文件的情况。

相关文章:

Pytest-Bdd-Playwright 系列教程(10):配置功能文件路径 优化场景定义

Pytest-Bdd-Playwright 系列教程(10):配置功能文件路径 & 优化场景定义 前言一、功能文件路径的配置1.1 全局设置功能文件路径1.2. 在场景中覆盖路径 二、避免重复输入功能文件名2.1 使用方法2.2 functools.partial 的背景 三、应用场景总…...

rust逆向初探

rust 逆向葵花宝典 rust逆向技巧 rust逆向三板斧: [!NOTE] 快速定位关键函数 (真正的main函数):观察输出、输入,字符串搜索,断点等方法。定位关键 加密区 :根据输入的flag,打硬件断点,快速捕获…...

【Linux】apt 关闭 ssl 认证

【注意】apt 关闭 ssl 认证可能会引起软件安装风险,请尽量避免关闭。 执行以下命令可以实现全局关闭 sll 验证。 echo Acquire::https::Verify-Peer "false"; >> /etc/apt/apt.conf.d/99disable-signature-verificationecho Acquire::https::Verif…...

【算法】P5018 对称二叉树

题目 P5018 对称二叉树 https://www.luogu.com.cn/problem/P5018 代码 思路:领接表存储二叉树,unordered_map存储各个节点对应的值。dfs遍历一下各个子树的大小个数,再写个递归判断是否是对称二叉树,如果是就更新全局答案。 #…...

Unifying Top-down and Bottom-up Scanpath Prediction Using Transformers

Abstract 大多数视觉注意力模型旨在预测自上而下或自下而上的控制,这些控制通过不同的视觉搜索和自由观看任务进行研究。本文提出了人类注意力变换器(Human Attention Transformer,HAT),这是一个能够预测两种形式注意力…...

JavaSE(十四)——文件操作和IO

文章目录 文件操作和IO文件相关概念Java操作文件文件系统操作文件内容操作字节流FileOutputStreamFileInputStream代码演示 字符流FileWriterFileReader代码演示 缓冲流转换流 案例练习 文件操作和IO 文件相关概念 文件 通常指的是包含用户数据的文件,如文本文件、…...

【视觉SLAM】4b-特征点法估计相机运动之PnP 3D-2D

文章目录 0. 前言1. PnP求解1.1 直接线性变换DLT1.2 P3P1.3 光束平差法BA2. 实现0. 前言 透视n点(Perspective-n-Point,PnP)问题是计算机视觉领域的经典问题,用于求解3D-2D的点运动。换句话说,当知道 N N N个世界坐标系中3D空间点的坐标以及它们在图像上的投影点像素坐标…...

android 性能分析工具(04)Asan 内存检测工具

1 Asan工具简介 1.1 Asan工具历史背景 AddressSanitizer(ASan)最初由Google开发,并作为LLVM项目的一部分。ASan的设计目的是帮助开发者检测并修复内存错误,如堆栈和全局缓冲区溢出、使用已释放的内存等,这些问题可能…...

html中select标签的选项携带多个值

搜索参考资料&#xff1a;SELECT标签中的选项可以携带多个值吗&#xff1f; 【摘抄】&#xff1a; 它可能有一个select选项中的多个值&#xff0c;如下所示。 <select id"ddlEmployee" class"form-control"> <option value"">-- S…...

Lambda表达式如何进行调试

一、概述 Java8提供了lambda表达式&#xff0c;方便我们对数据集合进行操作&#xff0c;我们使用lambda表达式的时候&#xff0c;是不是有这样的疑问&#xff0c;如何对执行过程中的中间数据进行调试呢&#xff1f; 二、例子 在下面的例子中&#xff0c;我们实现随机最多生成…...

C++ —— 剑斩旧我 破茧成蝶—C++11

江河入海&#xff0c;知识涌动&#xff0c;这是我参与江海计划的第2篇。 目录 1. C11的发展历史 2. 列表初始化 2.1 C98传统的{} 2.2 C11中的{} 2.3 C11中的std::initializer_list 3. 右值引用和移动语义 3.1 左值和右值 3.2 左值引用和右值引用 3.3 引用延长生命周期…...

HTML5好看的音乐播放器多种风格(附源码)

文章目录 1.设计来源1.1 音乐播放器风格1效果1.2 音乐播放器风格2效果1.3 音乐播放器风格3效果1.4 音乐播放器风格4效果1.5 音乐播放器风格5效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&…...

C++设计模式行为模式———迭代器模式中介者模式

文章目录 一、引言二、中介者模式三、总结 一、引言 中介者模式是一种行为设计模式&#xff0c; 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互&#xff0c; 迫使它们通过一个中介者对象进行合作。 中介者模式可以减少对象之间混乱无序的依赖关系&…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发十五,解码相关,将h264文件进行帧分隔变成avpacket

前提 前面我们学习了 将YUV数据读取到AVFrame&#xff0c;然后将AVFrame通过 h264编码器变成 AVPacket后&#xff0c;然后将avpacket直接存储到了本地就变成了h264文件。 这一节课&#xff0c;学习解码的一部分。我们需要将 本地存储的h264文件进行帧分隔&#xff0c;也就是变…...

力扣 LeetCode 104. 二叉树的最大深度(Day7:二叉树)

解题思路&#xff1a; 采用后序遍历 首先要区别好什么是高度&#xff0c;什么是深度 最大深度实际上就是根节点的高度 高度的求法是从下往上传&#xff0c;从下往上传实际上就是左右中&#xff08;后序遍历&#xff09; 深度的求法是从上往下去寻找 所以采用从下往上 本…...

如何高效实现汤臣倍健营销云数据集成到SQLServer

新版订单同步-&#xff08;Life-Space&#xff09;江油泰熙&#xff1a;汤臣倍健营销云数据集成到SQL Server 在企业信息化建设中&#xff0c;数据的高效集成和管理是提升业务运营效率的关键。本文将分享一个实际案例——如何通过新版订单同步方案&#xff0c;将汤臣倍健营销云…...

Vue3中使用:deep修改element-plus的样式无效怎么办?

前言&#xff1a;当我们用 vue3 :deep() 处理 elementui 中 el-dialog_body和el-dislog__header 的时候样式一直无法生效&#xff0c;遇到这种情况怎么办&#xff1f; 解决办法&#xff1a; 1.直接在 dialog 上面增加class 我试过&#xff0c;也不起作用&#xff0c;最后用这种…...

具身智能之Isaac Gym使用

0. 简介 Isaac Gym 是由 NVIDIA 提供的一个高性能仿真平台&#xff0c;专门用于大规模的机器人学习和强化学习&#xff08;RL&#xff09;任务。它结合了物理仿真、GPU加速、深度学习框架互操作性等特点&#xff0c;使得研究人员和开发者可以快速进行复杂的机器人仿真和训练。…...

【大数据学习 | Spark】spark-shell开发

spark的代码分为两种 本地代码在driver端直接解析执行没有后续 集群代码&#xff0c;会在driver端进行解析&#xff0c;然后让多个机器进行集群形式的执行计算 spark-shell --master spark://nn1:7077 --executor-cores 2 --executor-memory 2G sc.textFile("/home/ha…...

《Python制作动态爱心粒子特效》

一、实现思路 粒子效果&#xff1a; – 使用Pygame模拟粒子运动&#xff0c;粒子会以爱心的轨迹分布并运动。爱心公式&#xff1a; 爱心的数学公式&#xff1a; x16sin 3 (t),y13cos(t)−5cos(2t)−2cos(3t)−cos(4t) 参数 t t 的范围决定爱心形状。 动态效果&#xff1a; 粒子…...

Java 100 天进阶之路 | 从入门到上岗就业 · 完整目录导航

&#x1f4da; Java 100 天进阶之路 | 从入门到上岗就业 完整目录导航 不背八股文&#xff0c;不堆概念。44篇基础56篇进阶&#xff0c;100天助你达到Java就业水平&#xff0c;从容面对技术面试。 零差评Java教程&#xff0c;从入门到微服务&#xff0c;每篇都有代码、避坑和面…...

信息学奥赛新手村:从‘输出绝对值’这道题,聊聊C++里if-else和fabs()到底怎么选

信息学奥赛解题思维&#xff1a;绝对值计算的方案选择与优化 第一次参加信息学奥赛的新手们&#xff0c;往往会在基础题目上陷入"能用就行"的思维定式。就拿"输出绝对值"这道看似简单的题目来说&#xff0c;表面上看只要结果正确就能得分&#xff0c;但当你…...

终极指南:如何在Windows上使用智能PPT计时器掌控演示时间

终极指南&#xff1a;如何在Windows上使用智能PPT计时器掌控演示时间 【免费下载链接】ppttimer 一个简易的 PPT 计时器 项目地址: https://gitcode.com/gh_mirrors/pp/ppttimer 您是否曾在重要演讲中因为超时而尴尬收场&#xff1f;是否在商务汇报中因为时间把控不准而…...

AI产品技能库实战:将专家经验注入Claude Code,打造你的虚拟产品专家

1. 项目概述&#xff1a;当AI助手遇上产品经理的“武林秘籍”如果你是一名产品经理、创业者&#xff0c;或者任何需要与产品打交道的人&#xff0c;最近可能已经感受到了AI助手带来的效率革命。无论是用Claude、ChatGPT还是其他工具来辅助写文档、分析数据&#xff0c;它们都像…...

传统RAG把文档切碎,TreeSearch不接受,结果反而更快更准

无需 Embedding&#xff0c;无需向量库&#xff0c;无需切分——开源项目TreeSearch 用树结构保留文档灵魂&#xff0c;毫秒级检索万级文档。 你是不是也被 RAG 切碎过&#xff1f; 用过 RAG 的人都知道这个痛点&#xff1a; 文档被机械地切成固定大小的 chunk&#xff0c;喂…...

AI智能体编排框架:一人公司如何用OPC协议构建虚拟团队

1. 项目概述&#xff1a;从单兵作战到AI军团指挥官的蜕变如果你和我一样&#xff0c;是一个独立开发者或者小型创业者&#xff0c;肯定经历过这样的困境&#xff1a;脑子里有一个绝佳的产品创意&#xff0c;但面对从产品设计、前端开发、后端架构、UI/UX、市场增长到法律合规这…...

Epsilla向量数据库实战:10倍性能提升的RAG系统核心架构解析

1. 项目概述&#xff1a;为什么我们需要另一个向量数据库&#xff1f;如果你最近在折腾大语言模型应用&#xff0c;尤其是RAG&#xff08;检索增强生成&#xff09;系统&#xff0c;那你肯定对向量数据库这个概念不陌生。从Pinecone、Weaviate到Milvus、Qdrant&#xff0c;市面…...

可观测性技术栈选型指南:从Prometheus到OpenTelemetry的实践路径

1. 项目概述&#xff1a;一个可观测性技术栈的“藏宝图”如果你正在构建或维护一个现代化的、需要高可靠性的软件系统&#xff0c;那么“可观测性”这个词对你来说一定不陌生。它早已超越了传统的监控&#xff0c;成为确保系统健康、快速定位问题的核心能力。然而&#xff0c;当…...

Enzyme协议:DeFi资产管理智能合约架构与实战指南

1. 项目概述&#xff1a;当智能合约遇上资产管理如果你在区块链领域&#xff0c;特别是DeFi&#xff08;去中心化金融&#xff09;生态里待过一段时间&#xff0c;大概率听说过“Enzyme”这个名字。它不是一个新概念&#xff0c;但绝对是DeFi乐高积木中一块承重墙级别的组件。简…...

喜马拉雅音频本地化实战:绕过xm格式,直接获取mp3文件的两种方法对比

喜马拉雅音频本地化实战&#xff1a;两种高效获取MP3文件的技术方案深度评测 作为国内领先的音频分享平台&#xff0c;喜马拉雅拥有海量优质内容&#xff0c;但其特有的XM格式却给用户跨平台使用带来了困扰。许多技术爱好者尝试过各种转换工具&#xff0c;却发现市面上几乎没有…...