Pytest-Bdd vs Behave:选择最适合的 Python BDD 框架

news/2024/12/19 1:37:34/

Pytest-Bdd vs Behave:选择最适合的 Python BDD 框架

        • Pytest BDD vs Behave:选择最适合的 Python BDD 框架
        • BDD 介绍
        • Python BDD 框架列表
        • Python Behave
        • Pytest BDD
        • Pytest BDD vs Behave:关键区别
        • Pytest BDD vs Behave:最佳应用场景
        • 结论

在选择适合你需求的 Python BDD 框架时,本文将通过深入的 Pytest BDD 与 Behave 比较,帮助你做出明智的决策。
在这里插入图片描述

Pytest BDD vs Behave:选择最适合的 Python BDD 框架

和所有流行的编程语言一样,Python 也有许多可供选择的 BDD 框架。在这些框架中,Pytest BDD 和 Behave 是最为广泛使用的两个框架。作为一家领先的自动化测试公司,我们根据项目的业务需求使用了 Pytest BDD 和 Behave。我们认为,对于每个测试人员来说,了解如何实现一个可读且业务友好的自动化测试解决方案至关重要。因此,本文将通过对比 Pytest BDD 和 Behave,帮助你选择最适合的框架。

如果你不熟悉或刚接触 Python 和 BDD,我们将首先进行简单的介绍,然后再开始 Pytest BDD 与 Behave 的对比。如果你已经熟悉它们,可以直接跳到比较部分。

BDD 介绍

行为驱动开发(BDD)是一种敏捷软件开发技术,为了促进开发人员、测试人员与非技术或业务相关人员之间的协作。BDD 通过采用简单的“Given(给定)、When(当)、Then(那么)”格式(Gherkin 语言)来编写测试用例,使得任何人都能够理解。在进行 Pytest BDD 与 Behave 比较之前,让我们先看一下 Python 中常见的 BDD 框架。

Python BDD 框架列表
  1. Behave
  2. Pytest BDD
  3. radish
  4. lettuce
  5. freshen

虽然还有其他 Python BDD 框架,但这些是最为知名和广泛使用的选项。不过需要注意的是,并非所有 BDD 框架都适合每个人,因此我们选择了 Pytest BDD 和 Behave 进行对比。

Python Behave

如果你有使用 Cucumber BDD 框架的经验,你会发现 Behave 在很多方面非常相似。但即使你是新手,Behave 也很容易上手。其主要原因在于 Behave 提供了良好的在线文档和简单易用的教程。我们将在介绍 Pytest BDD 与 Behave 的优缺点后,直接进入它们的比较部分。

优点:

  • 完全支持 Gherkin 编程语言。
  • 环境函数和 fixtures 简化了设置和清理工作。
  • 与 Django 和 Flask 集成良好。
  • 在 Python BDD 从业人员中被广泛使用。

缺点:

  • Behave 的社区支持相对有限。
  • 无法并行执行测试。
Pytest BDD

Pytest BDD 实现了 Gherkin 语言的一个子集,用于项目需求测试和行为驱动开发。使用 Pytest 编写的 fixtures 可以在特性步骤设置和操作中重用,并通过依赖注入实现真正的 BDD,避免了维护一个包含 Gherkin 命令副作用的上下文对象。

让我们先列出 Pytest BDD 的优缺点,再继续进行 Pytest BDD 与 Behave 的对比。

优点:

  • 与 Pytest 和所有主要的 Pytest 插件无缝集成。
  • Fixtures 是管理步骤之间上下文的极好方法。
  • 可以与其他 Pytest 测试一起运行过滤后的测试。
  • conftest.py 文件使得共享步骤定义和钩子更加简单。
  • 更好地支持数据驱动的测试和表格数据处理。

缺点:

  • 特性文件必须显式声明在步骤定义模块中(通过 “@scenario” 或 “scenarios” 函数)。
  • 场景大纲步骤必须以不同的方式解析。
  • 在特性文件之间共享步骤可能会有些麻烦。
Pytest BDD vs Behave:关键区别

以下是优化后的表格格式,特别是在项目结构部分进行了调整,使其更加清晰和易于阅读:

描述Pytest BDDPython Behave
定价免费开源免费开源
项目结构<项目根目录>
产品代码包
测试目录
    features
        *.feature
        step_defs
        __init__.py
        conftest.py
        test_*.py
     [pytest.ini, tox.ini, setup.cfg]
<项目根目录>
产品代码包
features
    *.feature
    environment.py
    steps
        *_steps.py
    [behave.ini, .behaverc, tox.ini, setup.cfg]
步骤定义文件命名语法步骤定义文件名应以“test”作为前缀或后缀,如 test_filename.py文件名可以是任何 .py 扩展名
测试目录命名语法测试目录应命名为 tests测试目录应命名为 features
IDE 支持仅支持 PyCharm 专业版,Visual Studio Code 等仅支持 PyCharm 专业版,Visual Studio Code 等
报告Pytest BDD 支持:
1. HTML 报告
2. Allure 报告(作为单独插件安装)
Behave 支持:
1. Allure 报告
2. JSON 报告
3. Junit 报告
并行执行支持并行执行不支持并行执行
测试运行器Pytest(作为单独插件安装)Behave(内置测试运行器)
社区支持良好良好
启动测试通过特定的步骤定义文件启动测试:
例如:pytest -k your_step_definition.py
通过特定的特性文件启动测试:
例如:behave features/your_feature.feature
通过标签运行使用关键字 -m 运行测试文件:
例如:pytest -m @yourTag
使用关键字 --tags 运行测试文件:
例如:behave --tags @yourTag
解析器场景大纲步骤需要单独解析无需单独解析场景大纲步骤
显式声明特性文件必须在步骤定义中显式声明:
通过 scenarios 函数
不需要在步骤定义中显式声明特性文件
Pytest BDD vs Behave:最佳应用场景

Pytest BDD:

  • 并行执行 – Behave 没有内建功能支持测试的并行执行。而曾经流行的框架 behave-parallel 也已经退役。因此,如果并行测试执行对你来说至关重要,Pytest BDD 绝对是更好的选择。
  • 统一单元和功能测试 – Pytest BDD 可以将单元测试和功能测试统一起来,减少了持续集成服务器配置的负担,并且可以重用测试设置。
  • HTML 报告 – 如果你需要 HTML 报告,而 Behave 不支持 HTML 报告,那么你必须选择 Pytest BDD。Pytest BDD 还支持 Allure 报告,这也是一种常用的报告类型。

Behave:

  • 易用性 – 如 Pytest BDD 与 Behave 比较表所示,Behave 在步骤定义命名方面更为简便,因为 Pytest 需要定义前缀或后缀。由于需要声明场景、实现场景大纲以及在 Pytest BDD 中共享步骤,Behave 通常更容易上手。它还内置了测试运行器,设置也更简单。
  • 日志输出 – 在 Behave 中,终端日志比 Pytest 更加详细。因为 Behave 运行的测试基于使用 Given、When、Then 格式编写的特性文件,所以可以很容易地识别出错误的位置。
结论

显然,Pytest BDD 和 Behave 各有优缺点。根据你的自动化测试需求,你可以使用我们的 Pytest BDD 与 Behave 对比表和建议来做出明智的选择。作为一家测试自动化服务提供商,我们在许多项目中主要使用了 Pytest BDD。如果你能够处理 Pytest BDD 的复杂性,它是一个非常不错的选择。如果不行,Behave 也可以作为一个很好的替代方案。

原文链接:https://codoid.com/automation-testing/pytest-bdd-vs-behave-pick-the-best-python-bdd-framework/


http://www.ppmy.cn/news/1556261.html

相关文章

Cesium 无人机航线规划(航点航线)

航线规划实现定制航线&#xff0c;一键巡检功能 小镜头模拟的是此方向的拍照效果&#xff0c;觉得合适可以打个拍照印记 设置里可调控参数 保存后反显的样子&#xff0c;主要是为了区分航线

构建虚幻引擎中的HUD与UI

在游戏开发中,用户界面(UI)和头部显示(HUD)是玩家体验的重要组成部分。它们提供了关键信息,并增强了游戏的互动性。虚幻引擎(Unreal Engine, UE)以其强大的可视化脚本系统Blueprint和C++ API支持,为开发者提供了一个灵活且功能丰富的环境来创建复杂的UI和HUD元素。 本…

[C++]类的继承

一、什么是继承 1.定义&#xff1a; 在 C 中&#xff0c;继承是一种机制&#xff0c;允许一个类&#xff08;派生类&#xff09;继承另一个类&#xff08;基类&#xff09;的成员&#xff08;数据和函数&#xff09;。继承使得派生类能够直接访问基类的公有和保护成员&#xf…

论文翻译 | ChunkRAG: Novel LLM-Chunk Filtering Method for RAG Systems

摘要 使用大型语言模型&#xff08;LLM&#xff09;的检索-增强生成&#xff08;RAG&#xff09;系统经常由于检索不相关或松散相关的信息而生成不准确的响应。现有的在文档级别操作的方法无法有效地过滤掉此类内容。我们提出了LLM驱动的块过滤&#xff0c;ChunkRAG&#xff0…

apache中的Worker 和 Prefork 之间的区别是什么?

文章目录 内存使用稳定性兼容性适用场景 Apache中的Worker和Prefork两种工作模式在内存使用、稳定性以及兼容性等方面存在区别 内存使用 Worker&#xff1a;由于使用线程&#xff0c;内存占用较少。Prefork&#xff1a;每个进程独立运行&#xff0c;内存消耗较大。 稳定性 W…

Rust关键字实例解析

Rust是一种注重安全性、并发性和性能的系统编程语言。在Rust中&#xff0c;关键字是保留的标识符&#xff0c;用于语言的特定语法结构。这些关键字不能用作普通的标识符&#xff0c;除非使用原始标识符&#xff08;raw identifiers&#xff09;。下面&#xff0c;我们将通过实例…

You need to call SQLitePCL.raw.SetProvider()

在.NET环境中使用Entity Framework Core&#xff08;EF Core&#xff09;连接SQLite数据库时&#xff0c;报错。 使用框架 .NET8 错误信息&#xff1a; Exception: You need to call SQLitePCL.raw.SetProvider(). If you are using a bundle package, this is done by calling…

开疆智能Ethernet/IP转Profinet网关连接纳博特控制器配置案例

该案例是西门子PLC通过开疆智能研发的Ethernet/IP转Profinet网关KJ-PNG-108连接纳博特控制器的配置案例首先下载控制器的EDS文件&#xff0c;解析出其中的ethernet参数. 将EDS文件导入解析软件&#xff0c;透过软件可以看到数据长度默认为32字节&#xff0c;连接点为150/100 打…