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

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

前言

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

一、功能文件路径的配置

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

1.1 全局设置功能文件路径

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

ini 复制代码
# pytest.ini
[pytest]
bdd_features_base_dir = features/

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

1.2. 在场景中覆盖路径

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

python 复制代码
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 函数。例如:

python 复制代码
import pytest
from steps.search_steps import *
from pytest_bdd import scenario
from functools import partial

scene = 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 优化:非常适合多个场景都依赖同一个功能文件的情况。
相关推荐
测试者家园3 小时前
ChatGPT生成接口文档的方法与实践
软件测试·chatgpt·测试用例·接口测试·接口文档·ai赋能·用chatgpt做软件测试
Heaven6455 小时前
6.8 Newman自动化运行Postman测试集
软件测试·自动化·接口测试·postman·newman
测试老哥9 小时前
Python自动化测试图片比对算法
自动化测试·软件测试·python·测试工具·程序人生·职场和发展·测试用例
测试者家园17 小时前
ChatGPT接口测试用例生成的流程
软件测试·chatgpt·测试用例·接口测试·测试图书·质量效能·用chatgpt做测试
互联网杂货铺1 天前
几个常见的Jmeter压测问题
自动化测试·软件测试·测试工具·jmeter·职场和发展·测试用例·压力测试
测试者家园1 天前
ChatGPT与接口测试工具的协作
软件测试·测试工具·chatgpt·接口测试·ai赋能·用chatgpt做软件测试·测试图书
爱学测试的雨果1 天前
分布式测试插件 pytest-xdist 使用详解
分布式·pytest
测试19981 天前
Chrome+Postman做接口测试
自动化测试·软件测试·chrome·测试工具·职场和发展·测试用例·postman
爱学测试的李木子1 天前
性能】JDK和Jmeter的安装与配置
java·开发语言·软件测试·测试工具·jmeter
字节程序员1 天前
Jmeter分布式测试的注意事项和常见问题
软件测试·分布式·jmeter