Behave介绍和快速示例

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


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

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

相关文章

RT-DETR算法优化改进:自研独家创新BSAM注意力 ,基于CBAM升级 | 注意力机制大作战

💡💡💡本文全网首发独家改进:提出新颖的注意力BSAM(BiLevel Spatial Attention Module),创新度极佳,适合科研创新,效果秒杀CBAM,Channel Attention+Spartial Attention升级为新颖的 BiLevel Attention+Spartial Attention 1)作为注意力BSAM使用; 推荐指数:…

B/S麻醉临床信息系统(手麻系统)源码

手术麻醉系统是一套以数字形式与医院信息系统(如HIS、EMR、LIS、PACS等)和医疗设备等软、硬件集成并获取围手术期相关信息的计算机系统,其核心是对围手术期患者信息自动采集、储存、分析并呈现。该系统通过整合围手术期中病人信息、人员信息、…

DBeaver还原mysql数据库

DBeaver还原mysql数据库 DBEaver还原mysql数据库新建一个要还原的数据库选择工具》恢复数据库 DBEaver还原mysql数据库 新建一个要还原的数据库 选中数据库,右键新建一个数据库,字符集和排序规则默认的即可 选择工具》恢复数据库 选中刚刚创建好的数据库&#x…

springboot326校园体育场馆(设施)使用管理网站

交流学习: 更多项目: 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示: ————————————————

Garmin佳明发布quatix 7 Pro航海商务智能腕表,于陆地之外乘风破浪

全新航海商务智能腕表,专为水上活动爱好者设计 搭载1.3英寸AMOLED屏幕,内置LED手电筒,长达16天电池续航 【2023年11月16日】今日,专业运动智能可穿戴设备及创新航海设备品牌佳明(纽交所代码:GRMN&#xff…

Linux/麒麟系统上部署Vue+SpringBoot前后端分离项目

目录 1. 前端准备工作 1.1 在项目根目录创建两份环境配置文件 1.2 环境配置 2. 后端准备工作 2.1 在项目resources目录创建两份环境配置文件 2.2 环境配置 3. 前后端打包 3.1 前端打包 3.2 后端打包 4、服务器前后端配置及部署 4.1 下载、安装、启动Nginx 4.2 前端项目部署…

学而优则“创”西电学子助力openGauss教学“破圈”,一举斩获金奖

在你的大学生涯,是否有过发现某本教材作者就是本校老师的经历?是否曾经为在课堂上见到作者本人而感到些许骄傲?实际上,这样的巧合在很多专业领域常有发生,因为一线教师往往既是知识的传道者,也是知识的生产…

Kafka 集群如何实现数据同步?

哈喽大家好,我是咸鱼 最近这段时间比较忙,将近一周没更新文章,再不更新我那为数不多的粉丝量就要库库往下掉了 T﹏T 刚好最近在学 Kafka,于是决定写篇跟 Kafka 相关的文章(文中有不对的地方欢迎大家指出)…

简单高效的定制移动固态硬盘,稳定易用的办公小助手

我在平时的工作中,常常需要处理各种大文件和数据,如果硬盘速度跟不上,那工作效率就会大幅降低。今年固态硬盘的价格大幅下降,有很多国产品牌加入其中,很容易找到一款性价比高的固态硬盘,搭配硬盘盒使用&…

EV代码签名证书

为了增强软件的安全性和可信度,EV代码签名证书(Extended Validation Code Signing Certificate)成为了一种具有最高级别保障的关键工具。 EV代码签名证书是一种由受信任的证书颁发机构(CA)或证书供应商提供的高级别代…

免费最强下载工具IDM,没有之一

IDM(Internet Download Manager)下载工具是我见过的最强下载工具,没有之一。主要以下特点: 下载程度超快实时检测下载行为下载任何文件探测视频下载地址,几分钟下载高清视频可多进程下载,可多线程下载 IDM官网地址:下…

性能测试知多少---系统架构分析

之前有对性能需求进行过分析,那篇主要从项目业务、背景等角度如何抽丝剥茧的将项目的需求抽离出来。在我们进行需求的时候也需要对被测项目的架构有一定的认识,如果不了解被测系统的架构,那么在后期的性能分析与调优阶段将无从下手。 简单系…

八股文-TCP的三次握手

TCP协议是一种面向连接、可靠传输的协议,而建立连接的过程就是著名的三次握手。这个过程保证了通信的双方能够同步信息,确保后续的数据传输是可靠和有序的。本文将深入解析TCP三次握手的步骤及其意义。 漫画TCP的三次握手 TCP连接的建立采用了三次握手的…

Ubuntu16.04上安装Docker

Ubuntu16.04上安装Docker 更新 apt 包索引: sudo apt-get update安装依赖包,以便使用 HTTPS 仓库 sudo apt-get install apt-transport-https ca-certificates curl software-properties-common添加 Docker GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu…

[Mac软件]Infuse 7 PRO v7.6.3 一个强大的视频播放器(激活版)

使用Infuse制作您的视频内容,这是在iPhone、iPad、Apple TV和Mac上观看几乎任何格式的视频的好方法。无需转换文件!Infuse针对macOS 12进行了优化,具有强大的流媒体选项、Trakt同步以及对AirPlay和字幕的无与伦比的支持。华丽的界面。精确控制…

元组(Tuple)操作的经验分享

一、创建元组 复制代码 代码如下: tup1 (physics, chemistry, 1997, 2000); tup2 (1, 2, 3, 4, 5 ); tup3 "a", "b", "c", "d"; 创建空元组 复制代码 代码如下: tup1 (); 元组中只包含一个元素时,需要在元素后面添…

webpack系列之:手把手教你 打包和使用js文件

项目初始化 mkdir demo1 cd demo1 npm init // 一路回车 创建一个package.json文件webpack安装 npm install --save-dev webpackJs文件打包 可以先看一下最后的项目情况,然后我们再开始一步步操作 创建需要打包的js文件 创建文件夹用于存放js文件 // 创建文…

Win10开启FTP与配置

#1.控制面板>程序>启用或关闭Windows功能> (控制面板可在 桌面右键>个性化>主题>桌面图标设置>勾选控制面板>确定) Internet Information Services---勾選FTP服務器,IIS管理控制台 #2.win鍵輸入IIS打开IIS #3.右击网站添加FTP站点 #4.输入…

rtsp、rtmp、m3u8、flv、mkv、3gp、mp4直播流测试地址

✍️作者简介:沫小北/码农小北(专注于Android、Web、TCP/IP等技术方向) 🐳博客主页:沫小北/码农小北 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN 🔔如果文章对您有一定的帮助请&…