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

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/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Unity3D】无限循环列表(扩展版)

基础版&#xff1a;【Unity技术分享】UGUI之ScrollRect优化_ugui scrollrect 优化-CSDN博客 using UnityEngine; using UnityEngine.UI; using System.Collections.Generic;public delegate void OnBaseLoopListItemCallback(GameObject cell, int index); public class BaseLo…

【Elasticsearch】使用阿里云 infererence API 及 semantic text 进行向量搜索

原作者&#xff1a;Elastic布道师 刘晓国 在之前的文章 “Elasticsearch 开放推理 API 新增阿里云 AI 搜索支持”&#xff0c;它详细描述了如何使用 Elastic inference API 来针对阿里的密集向量模型&#xff0c;稀疏向量模型&#xff0c; 重新排名及 completion 进行展示。在…

景联文科技:精准语音标注,驱动语音技术新发展

在人工智能迅速发展的今天&#xff0c;语音技术的应用已经渗透到我们生活的方方面面。从智能音箱、语音助手到自动语音识别系统&#xff0c;高质量的语音数据是这些应用成功的关键。景联文科技作为领先的AI数据服务提供商&#xff0c;专注于为客户提供高精度、高效的语音标注服…

windows免登录linux

windows 生成秘钥文件 ssh-keygen -t rsa 将公钥传送到服务器 scp C:\Users\xx/.ssh/id_rsa.pub xxxx:/home/ruoyi/id_rsa.pub linux 使用ssh-copy-id -i ~/.ssh/id_rsa.pub userhost 如果禁用root登录&#xff0c;先开启 vim /etc/ssh/sshd_config PermitRootLogin yes …

基于容器的云原生,让业务更自由地翱翔云端

无论是要构建一个应用或开发一个更庞大的解决方案&#xff0c;在技术选型时&#xff0c;技术的开放性和可移植性已经成为很多企业优先考虑的问题之一。毕竟没人希望自己未来的发展方向和成长速度被自己若干年前选择使用的某项技术所限制或拖累。 那么当你的业务已经上云&#x…

Visual Studio 使用 GitHub Copilot 协助调试

&#x1f380;&#x1f380;&#x1f380;【AI辅助编程系列】&#x1f380;&#x1f380;&#x1f380; Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码Visual Studio 安装和管理 GitHub CopilotVisual Studio 使用 GitHub Copilot 扩展Visual Studio 使用 GitHu…

springboot限流注解

我们在工作中 有些接口访问量过大 为了保证服务的正常运行可以增加限流 第一步 引入aop和redis <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency…

MySQL多表查询时有哪些连接方式?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL多表查询时有哪些连接方式?】面试题。希望对大家有帮助&#xff1b; MySQL多表查询时有哪些连接方式? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 MySQL 中进行多表查询时&#xff0c;常见的连接方式有以下…

Python | 虚拟环境01 - 什么是虚拟环境、它的由来

导言 python3真的不是安装了就完事&#xff0c;必须理解虚拟环境是什么才算是初步掌握python环境。 学习python3虚拟环境&#xff0c;建议参考B站教程。这位博主用了6个视频&#xff0c;每一个视频仅仅几分钟。居然把python3的虚拟环境讲明白了。 虚拟环境&#xff08;Virtual…

【已解决】在Visual Studio里将应用与Microsoft Store关联时提示网络异常

发布Windows应用时。在Visual Studio里点击"发布“&#xff0c;将应用与Microsoft Store关联时&#xff0c;一直提示网络错误。 查了一下论坛&#xff0c;发现之前也经常出现&#xff0c;但我是第一次遇到。 不能就这样一直被卡着呀&#xff0c;研究了一下&#xff0c;还…

html基础-认识html

1.什么是html html是浏览器可以识别的的标记语言&#xff0c;我们在浏览器浏览的网页就是一个个的html文档 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>认识html</title> </head> <body><h1…

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(四)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(四) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…

MySQL 深入理解隔离性

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 MySQL 深入理解隔离性 收录于专栏[MySQL] 本专栏旨在分享学习MySQL的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 由于之前在 MySQL 事务特…

Nacos 3.0 考虑升级到 Spring Boot 3 + JDK 17 了!

Nacos 由阿里开源&#xff0c;是 Spring Cloud Alibaba 中的一个重要组件&#xff0c;主要用于发现、配置和管理微服务。 由于 Spring Boot 2 的维护已于近期停止&#xff0c;Nacos 团队考虑升级到 Spring Boot 3 JDK 17&#xff0c;目前正在征求意见和建议。 这其实是一件好…

【硬件接口】I2C总线接口

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时&#xff0c;也能帮助其他需要参考的朋友。如有谬误&#xff0c;欢迎大家进行指正。 一、概述 I2C总线是一种非常常用的总线&#xff0c;其多用于一个主机&#xff08;或多个&#xff09;与单个或多个从设备通讯…

监控视频汇聚融合云平台一站式解决视频资源管理痛点

随着5G技术的广泛应用&#xff0c;各领域都在通信技术加持下通过海量终端设备收集了大量视频、图像等物联网数据&#xff0c;并通过人工智能、大数据、视频监控等技术方式来让我们的世界更安全、更高效。然而&#xff0c;随着数字化建设和生产经营管理活动的长期开展&#xff0…

GEE+本地XGboot分类

GEE本地XGboot分类 我想做提取耕地提取&#xff0c;想到了一篇董金玮老师的一篇论文&#xff0c;这个论文是先提取的耕地&#xff0c;再做作物分类&#xff0c;耕地的提取代码是开源的。 但这个代码直接在云端上进行分类&#xff0c;GEE会爆内存&#xff0c;因此我准备把数据下…

Spring Boot 集成 MyBatis 全面讲解

Spring Boot 集成 MyBatis 全面讲解 MyBatis 是一款优秀的持久层框架&#xff0c;与 Spring Boot 集成后可以大大简化开发流程。本文将全面讲解如何在 Spring Boot 中集成 MyBatis&#xff0c;包括环境配置、基础操作、高级功能和最佳实践。 一、MyBatis 简介 1. SqlSession …

Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:电影院后台管理系统(前后端源码 + 数据库 sql 脚本)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 项目介绍 2.0 用户登录功能 3.0 用户管理功能 4.0 影院管理功能 5.0 电影管理功能 6.0 影厅管理功能 7.0 电影排片管理功能 8.0 用户评论管理功能 9.0 用户购票功…

【字符串匹配算法——BF算法】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 BF算法介绍及过程演示代码实现过程下节预告KMP算法利用next数组存储子串中j回退的位置&#xff08;…