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 优化:非常适合多个场景都依赖同一个功能文件的情况。

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

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

相关文章

安装gentoo之第二步:安装gentoo基本系统

目标 :将gentoo配置为服务器, 一、下载并解压stage文件 1.官网下载stage文件 网址:https://www.gentoo.org/downloads/ 将gentoo配置为服务器,所以只下载了stage3-amd64-systemd-20241117T163407Z.tar.xz这个最小的stage文件. 基…

Methode Electronics EDI 需求分析

Methode Electronics 是一家总部位于美国的全球性技术公司,专注于设计和制造用于多个行业的电子和电气组件,产品涵盖汽车、工业、电信、医疗设备以及消费电子等多个领域,提供创新的解决方案。 填写Methode_EDI_Parameters_Template Methode_…

Java基础知识(六)

文章目录 StringString、StringBuffer、StringBuilder 的区别?String 为什么是不可变的?字符串拼接用“” 还是 StringBuilder?String#equals() 和 Object#equals() 有何区别?字符串常量池的作用了解吗?String s1 new String("abc&qu…

一文解决Latex中的eps报错eps-converted-to.pdf not found: using draft setting.

在使用Vscode配的PDFLatex编译IEEE TII的Latex模板时,出现eps文件不能转换为pdf错误,看了几十篇方法都没用,自己研究了半天终于可以正常运行了。主要原因还是Settings.JSON中的PDFLatex模块缺少:"--shell-escape", 命令…

Redis基本的全局命令

在学习redis基本的全局命令之前呢,我们必须先进入redis-cli客户端才行。 如图: get和set get和set是redis两个最核心的命令。 get:根据key来获取value。 set:把key和value存储进去。 如set命令如图: 对于上述图中&…

力扣题目总结

1.游戏玩法分析IV AC: select IFNULL(round(count(distinct(Result.player_id)) / count(distinct(Activity.player_id)), 2), 0) as fraction from (select Activity.player_id as player_idfrom (select player_id, DATE_ADD(MIN(event_date), INTERVAL 1 DAY) as second_da…

量子计算来袭:如何保护未来的数字世界

目录 前言 一、量子计算安全的学习方向 1. 量子物理学基础 2. 量子计算原理与技术 3. 传统网络安全知识 4. 量子密码学 5. 量子计算安全政策与法规 二、量子计算的漏洞风险 1. 加密算法被破解风险 2. 区块链安全风险 3. 量子密钥分发风险 4. 量子计算系统自身风险 …

AJAX笔记 (速通精华版)

AJAX(Asynchronous Javascript And Xml) 此笔记来自于动力节点最美老杜 传统请求及缺点 传统的请求都有哪些? 直接在浏览器地址栏上输入URL。点击超链接提交 form 表单使用 JS 代码发送请求 window.open(url)document.location.href urlwi…

net某高校社交学习平台的设计与实现

摘 要 高校社交学习平台是一个融合了社交网络特性的在线学习交流系统,旨在促进高校学生之间的信息共享与学习互动。该平台通过提供学习资料、学习视频和学习交流等功能,支持发布学习动态、参与知识问答、并实时追踪学习进度。为学生提供一个全面且便捷的…

七、利用CSS和多媒体美化页面的习题

题目一&#xff1a; 利用CSS技术&#xff0c;结合表格和列表&#xff0c;制作并美化 “ 翡翠阁 ”页面。运行效果如下 运行效果&#xff1a; 代码 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>翡翠阁</title>&…

学习虚幻C++开发日志——委托(持续更新中)

委托 官方文档&#xff1a;Delegates and Lamba Functions in Unreal Engine | 虚幻引擎 5.5 文档 | Epic Developer Community | Epic Developer Community 简单地说&#xff0c;委托就像是一个“函数指针”&#xff0c;但它更加安全和灵活。它允许程序在运行时动态地调用不…

Linux:自定义Shell

本文旨在通过自己完成一个简单的Shell来帮助理解命令行Shell这个程序。 目录 一、输出“提示” 二、获取输入 三、切割字符串 四、执行指令 1.子进程替换 2.内建指令 一、输出“提示” 这个项目基于虚拟机Ubuntu22.04.5实现。 打开终端界面如图所示。 其中。 之前&#x…

如何更改手机GPS定位

你是否曾想过更改手机GPS位置以保护隐私、玩游戏或访问受地理限制的内容&#xff1f;接下来我将向你展示如何使用 MagFone Location Changer 更改手机GPS 位置&#xff01;无论是在玩Pokmon GO游戏、发布社媒贴子&#xff0c;这种方法都快速、简单且有效。 第一步&#xff1a;下…

【AI大模型引领变革】探索AI如何重塑软件开发流程与未来趋势

文章目录 每日一句正能量前言流程与模式介绍【传统软件开发 VS AI参与的软件开发】一、传统软件开发流程与模式二、AI参与的软件开发流程与模式三、AI带来的不同之处 结论 AI在软件开发流程中的优势、挑战及应对策略AI在软件开发流程中的优势面临的挑战及应对策略 结论 后记 每…

Chapter 2 - 16. Understanding Congestion in Fibre Channel Fabrics

Transforming an I/O Operation to FC frames A read or write I/O operation (Figure 2-28) between an initiator and a target undergoes a series of transformations before being transmitted on a Fibre Channel link. 启动程序和目标程序之间的读取或写入 I/O 操作(图…

VMWARE虚拟交换机的负载平衡算法

一、基于源虚拟端口的路由 虚拟交换机可根据 vSphere 标准交换机或 vSphere Distributed Switch 上的虚拟机端口 ID 选择上行链路。 基于源虚拟端口的路由是 vSphere 标准交换机和 vSphere Distributed Switch 上的默认负载平衡方法。 ESXi主机上运行的每个虚拟机在虚拟交换…

web——sqliabs靶场——第十二关——(基于错误的双引号 POST 型字符型变形的注入)

判断注入类型 a OR 1 1# 发现没有报错 &#xff0c;说明单引号不是闭合类型 测试别的注入条件 a) OR 1 1# a)) OR 1 1# a" OR 11 发现可以用双引号闭合 发现是")闭合 之后的流程还是与11关一样 爆破显示位 先抓包 是post传参&#xff0c;用hackbar来传参 unam…

AI时代,百度的三大主义

现实主义、长期主义、理想主义。 定焦One&#xff08;dingjiaoone&#xff09;原创 作者 | 苏琦 郑浩钧 编辑 | 魏佳 “人工智能很像是一次新的工业革命&#xff0c;这意味着它不会三五年就结束&#xff0c;也不会一两年就出现‘超级应用’&#xff0c;它更像是三五十年对于整…

基于YOLOv11的火焰实时检测系统(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型)

100多种【基于YOLOv8/v10/v11的目标检测系统】目录&#xff08;pythonpyside6界面系统源码可训练的数据集也完成的训练模型 摘要&#xff1a; 本文提出了一种基于YOLOv11算法的火灾检测系统&#xff0c;利用1852张图片&#xff08;1647张训练集&#xff0c;205张验证集&#…

算法——两两交换链表中的节点(leetcode24)

这是一道对于链表节点进行操作的题目非常考验对于链表操作的基本功&#xff1b; 解法: 本题的解法结合下图来进一步解释 创建一个虚拟节点指向头结点以便使代码逻辑看起来更为简便且操作节点容易,定义cur是为了方便找到cur之后的两个节点进行交换操作定义pre和aft是为了保存执…