Behave介绍和快速示例

news2024/11/24 6:10:41

Behave是一个用于行为驱动开发 (Behavior-Driven Development, BDD) 的 Python 库。使用 Behave,可以编写自然语言格式的使用场景来描述软件的行为,然后用 Python 实现这些场景下的步骤,形成可直接运行的测试。

Behave的目标是帮助用户、开发人员和QA人员通过让他们写出更易于理解的测试用例来更好地理解和构建软件产品。Behave使用Gherkin语言来编写测试用例,该语言是一种自然语言,易于理解,并且可以很好地与非技术人员共享和交流测试结果。

Behave提供了一种将业务逻辑和测试逻辑分离的方法,因此它可以使测试代码更加可读,可维护和可重用。Behave支持多种输出格式,包括HTML,JSON和JUnit XML,并且可以与Selenium等其他Python测试框架结合使用。

Behave在Python BDD中的地位

BDD的框架中最流行的当属 Cucumber 了,作为描述BDD的领域特定语言(DSL)Gherkin ,一开始就是开发给Cucumber使用的,Cucumber官方提供了很多语言的支持,包括Java,Node.js , Ruby 等。
Cucumber没有直接提供Python语言的库,官方推荐使用半官方的库 Behave, 所谓半官方就是不是 Cucumber官方开发和维护, 但是使用了Cucumber的组件。
在这里插入图片描述

基于Python的BDD框架很多, 到目前使用比较多的应该是pytest-bdd和Behave, pytest-bdd的优势是基于 pytest,可以整合单元测试和功能测试。关于pytest-bdd的介绍可以参考:
pytest-bdd快速示例和问题解决

环境准备:安装 behave 和 selenium

本篇的示例需要安装两个模块 behave 和 selenium,其中selenium是用于Web端自动化测试的,因为本篇使用behave和selenium进行一个百度页面搜索的测试。

关于Selenium

Selenium是一个自动化测试工具,可以用于测试Web应用程序,支持多种语言(Java、C#、Python等)。Selenium可以模拟用户在网页上的行为,如点击、填写表单等操作,自动化地进行测试,从而提高测试效率和准确性。Selenium的核心是WebDriver,它可以驱动各种浏览器进行测试,并提供了丰富的API接口,方便管理和执行测试用例。Selenium还支持分布式测试、并行测试和测试结果的自动化分析等功能,可用于单元测试、集成测试和系统测试等场景。由于Selenium的开源和广泛应用,有很多社区和第三方库支持,可方便地应用于不同的项目和环境。

安装扩展

可以使用 pip show behavepip show selenium 查看是否安装了这两个模块,如果没有安装,使用如下命令进行安装:

pip install behave
pip install selenium

测试示例和目录结构

目录结构其实没有特别的要求,这里遵循易于管理的原则,定义目录结构如下:

├────features/   # 用户场景


│    ├────baidu.feature # 用户规格
│    ├────steps

│    │    ├────test_baidu.py  # 步骤函数

步骤

这里的步骤很简单,包括三步:

  1. 编写场景文件。在“features”的目录下创建后缀名为.feature文件,描述测试情景。
  2. 编写场景步骤。
  3. 测试。

测试场景与代码文件

这里测试在百度上进行搜索的功能, 各文件的内容如下:

  1. 场景文件 baidu.feature
Feature: 百度搜索
  Scenario: 搜索关键词
    Given 关键词 behave
    When 打开百度页面
    And  输入关键词
    And  点击百度一下按钮
    Then 页面标题中应包含关键词

  1. 场景步骤 test_baidu.py
from behave import given, when, then
from selenium import webdriver
from time import sleep

@given('关键词 {keyword}')    # 对应步骤  Given 关键词 behave, 参数放在{}中
def step_impl(context, keyword):   # context是上下文对象,有参数的话,加上对应参数
    context.keyword = keyword  # 将参数绑定上下文对象,以便其他步骤使用

@when('打开百度页面')
def step_impl(context):
    context.driver = driver = webdriver.Chrome()  # 同样绑定上下文对象
    driver.implicitly_wait(10)
    driver.get('https://www.baidu.com')


@when('输入关键词')
def step_impl(context):
    context.driver.find_element('id', 'kw').send_keys(context.keyword)


@when('点击百度一下按钮')
def step_impl(context):
    context.driver.find_element('id', 'su').click()
    sleep(0.5)


@then('页面标题中应包含关键词')
def step_impl(context):
    assert context.keyword in context.driver.title

整个测试用例包含四个步骤:

  1. 给定关键词:用 @given 装饰器定义了一个关键词的步骤,传入一个参数 keyword,将其保存到 context 对象中,以便后续步骤可以使用。

  2. 打开百度页面:用 @when 装饰器定义了一个打开页面的步骤,创建了一个 Chrome 浏览器并打开百度首页。

  3. 输入关键词:用 @when 装饰器定义了一个输入关键词的步骤,找到页面上的搜索框并输入之前给定的关键词。

  4. 点击百度一下按钮,用 @when 装饰器定义了一个点击按钮的步骤,找到页面上的搜索按钮并点击。

  5. 页面标题中应包含关键词:用 @then 装饰器定义了一个标题验证的步骤,验证页面标题是否包含之前给定的关键词。

在 Behave 中,“given-when-then”是常用的测试步骤流程模式,用来描述测试场景和测试步骤,其中 given 表示给定前置条件,when 表示触发动作,then 表示验证结果。整个测试用例包含了完整的测试步骤和断言,可通过运行 Behave 测试框架来执行测试用例并输出结果

  1. 命名行切换到 features目录, 运行 behave 命令。

测试的时候会新开一个Chrome窗口, 打开baidu的网址,在搜索框自动输入 behave, 严重完成关闭窗口, 在控制台会打印测试的步骤以及测试的结果。
在这里插入图片描述

在执行 Behave 测试用例后,Behave 会自动输出测试结果,结果包括了测试用例总数、通过数和失败数等信息。一个典型的 Behave 测试结果如下所示:

 复制插入1 feature passed, 0 failed, 0 skipped
1 scenario passed, 0 failed, 0 skipped
4 steps passed, 0 failed, 0 skipped, 0 undefined
Took 0m3.204s
复制插入

其中,feature 表示测试用例模块数量,scenario 表示测试用例数量,steps 表示测试步骤数量,未定义的步骤表示测试用例中定义了但未实现或未完成的步骤。如果测试用例执行失败,会在结果中输出失败信息,包括具体的失败原因和错误堆栈等。在 Behave 中,测试结果可通过各种格式的报告来生成,如HTML、JSON、XML等。比如结合allure 生成更易阅读的测试报告,报告的格式可以是JSON 格式,也可以是在线的Web网页。

参考

  • https://github.com/behave/behave
  • Allure官方文档 :https://docs.qameta.io/allure/#_behave
  • https://cucumber.io/docs/installation/?sbsearch=python


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

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

相关文章

【Machine Learning in R - Next Generation • mlr3】

本篇主要介绍mlr3包的基本使用。 一个简单的机器学习流程在mlr3中可被分解为以下几个部分: 创建任务 比如回归、分裂、生存分析、降维、密度任务等等挑选学习器(算法/模型) 比如随机森林、决策树、SVM、KNN等等训练和预测 创建任务 本次示…

JVM——类加载器(JDK8及之前,双亲委派机制)

目录 1.类加载器的分类1.实现方式分类1.虚拟机底层实现2.JDK中默认提供或者自定义 2.类加载器的分类-启动类加载器3.类加载器的分类-Java中的默认类加载器4.类加载器的分类-扩展类加载器5.类加载器的分类-类加载器的继承 2.类加载器的双亲委派机制 类加载器(ClassLo…

Vue3.3 + Vite4.3 + TypeScript5+ Element-Plus:从零到一构建企业级后台管理系统(前后端开源)

vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 Element Plus 版本的后台管理前端解决方案,技术栈为 Vue3 Vite4 TypeScript Element Plus Pinia Vue Router 等当前主流框架。 相较于其他管理前端框架,vue3-element-admin 的优势在于一…

笔记本配USB拓展坞网卡经常时不时掉线

ThinkPad X1 Carbon大概是2015年的老笔记本,自己买的USB3.0拓展坞(带网卡)的,我的笔记本不带网卡, 使用网线时不时右下角显网络掉线 , 就掉了,各种排查排除,不是线,路由器,拓展坞问题,最后更新拓展坞网卡芯片驱动,解决问题.下面是步骤: 搜索关键字:Realtek USB GbE Family Cont…

OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)

文章目录 OpenCV的色彩空间——RGB与BGROpenCV的色彩空间——HSV与HSLHSV主要用于OpenCV中HSL OpenCV色彩空间转换YUV主要用于视频中题目 图像操作的基石Numpy【基础操作】np.arraynp.zerosnp.onesnp.fullnp.identitynp.eye Numpy基本操作之矩阵的检索与赋值Numpy基本操作三——…

c# - - - Application.StartupPath(程序安装目录)和Environment.CurrentDirectory(程序工作目录)

Application.StartupPath 应用程序的安装目录,不会改变。 在C:\Users\Administrator\source\repos\ConsoleApp6\bin\Debug目录中,运行ConsoleApp6.exe。 安装目录为:C:\Users\Administrator\source\repos\ConsoleApp6\bin\Debug 在C:\Users…

Git相关: 拉取、git push提交 过程遇到的错误

目录 解决git push报错error: RPC failed; HTTP 413 curl 22 关于这个问题,其实千万别用gitlab,因为你怎么推送 也不可能把几G的文件推上去。 error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 se 解决git push报错error: RPC failed;…

【外汇天眼】解析外汇交易平台:深度了解DD与NDD两大模式

外汇交易平台种类繁多,涵盖不同的分类与运营模式,令投资者难以甄别,也增加了选择的难度。为了解决这一问题,我们将更深入地了解外汇平台的多样性。 在线外汇交易平台主要分为两大类:处理平台模式(Dealing …

springcloud仓库管理系统源码

开发技术: jdk1.8,mysql5.7,idea,nodejs,vscode springcloud springboot mybatis vue elementui 功能介绍: 统计分析:查看产品,销售数量;统计近7日出入库统计 客户管…

RHCE8 资料整理(六)

RHCE8 资料整理 第 6 篇 软件管理第 23 章 用rpm管理软件23.1 rpm查询23.2 rpm卸载23.3 软件包升级23.4 rpm验证 第 24 章 用yum/dnf管理软件包24.1 yum架构介绍24.2 用光盘搭建yum源24.3 创建私有仓库24.4 yum客户端配置24.5 yum基本使用24.5.1 查询24.5.2 安装与卸载24.5.3 下…

ETL数据转换工具类型与适用场景

ETL数据转换工具在企业数据管理中扮演着重要的角色,能够帮助企业从多个数据源中提取、转换和加载数据,实现数据整合和分析。以下是针对Kettle、DataX和ETLCloud这几个工具的详细介绍及其适用场景。 Kettle(Pentaho Data Integration&#xf…

提高生存能力的7个关键技巧!

作为一款备受热议和玩家喜爱的多人在线射击游戏,《绝地求生》中生存能力的提高是取得胜利的关键。在这篇实用干货分享中,我们将详细说明7个关键技巧,帮助你在游戏中提高生存能力,获得更多胜利。 1.选择降落点:选择适合…

【Azure 架构师学习笔记】-Azure Storage Account(6)- File Layer

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Storage Account】系列。 接上文 【Azure 架构师学习笔记】-Azure Storage Account(5)- Data Lake layers 前言 上一文介绍了存储帐户的概述,还有container的一些配置,在…

【C++】深拷贝与浅拷贝

1、深拷贝与浅拷贝 当我们对复杂类型(结构体或者类)的对象进行初始化时,如果将同类型的对象A赋值给同类型的对象B,此时就涉及深拷贝和浅拷贝的问题。 浅拷贝:简单的赋值拷贝操作。把类/结构体的对象的属性原封不动的赋值给另一个同类型的对…

数据库进阶教学——索引

目录 一、索引概述 1、介绍 2、演示 3、优缺点 二、索引结构 1、B树 2、Hash 三、索引分类 四、索引语法 1、语法 2、示例 五、SQL性能分析 1、SQL执行频率 2、慢查询日志 3、profile详情 4、explain执行计划 六、索引使用 七、索引设计原则 一、索引概述 …

【android】install android NDK

目录 1 下载NDK 2 解压 3 android-ndk的配置 1 下载NDK 下载网址:NDK 下载 | Android NDK | Android Developers 如果没有所需要的版本,则点击页面下面 不受支持的 NDK 下载需要的版本。 2 解压 将压缩文件(例如 android-ndk-r25c-…

Hoppscotch:开源 API 开发工具,快捷实用 | 开源日报 No.77

hoppscotch/hoppscotch Stars: 56.1k License: MIT Hoppscotch 是一个开源的 API 开发生态系统,主要功能包括发送请求和获取实时响应。该项目具有以下核心优势: 轻量级:采用简约的 UI 设计。快速:实时发送请求并获得响应。支持多…

【机器学习基础】多元线性回归(适合初学者的保姆级文章)

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!后面的内容会越来越有意思~ 💡往期推荐: 【机器学习基础】机器学习入门(1) 【机器学习基…

知虾数据分析软件:了解知虾数据分析软件提升Shopee店铺运营效果

在如今电商竞争激烈的市场中,了解市场趋势和产品数据是成功经营一家Shopee店铺的重要因素之一。而知虾——Shopee生意参谋作为一款功能强大的数据分析软件,可以帮助店主深入了解行业概况、产品潜力以及市场趋势,从而制定最优的运营策略。本文…

大型语言模型与知识图谱融合方法概述

背景意义 大型语言模型(LLM)已经很强了,但还可以更强。通过结合知识图谱,LLM 有望解决缺乏事实知识、幻觉和可解释性等诸多问题;而反过来 LLM 也能助益知识图谱,让其具备强大的文本和语言理解能力。而如果…