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 关键词 behaveWhen 打开百度页面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.hqwc.cn/news/179417.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode【41】缺失的第一个正数

题目: 分析: 第i个位置的数,如果再数组 0到length-1范围内,则将其放到对应的位置; 再遍历一遍数组,找到第一个不在位置i的正数数字,即为所求 思路:https://blog.csdn.net/weixin_45…

打开GeoTIFF文件失败:Unknown field with tag

用QGIS输出的数据类型为UInt16的TIFF文件,无法在GIMP中打开。 GIMP消息提示: 调查 用ImageMagick打开TIFF文件,虽然会出现警告,但是最终还是打开了: 在ImageMagick中重新保存后,就可以用GIMP打开了。使用…

vue-router配置

1、路由安装 npm install vue-router4 2、创建router目录 3、编辑文件且引入router包 4、main.js引入

qtcreator中其他控件的使用

scroll area 是 Tool Box是 tabwidget是网页 这三个可以用进行连接 用按钮实现切换 combo box的使用 使用label添加图片动图

SOLIDWORKS Flow Simulation阀门内流体仿真

Flow Simulation 导读 阀门作为输送系统中的控制设备其主要功能是接通管路中的流体介质,又或是调节流体的流量、压力等,在阀门的设计中,流量系数Cv,Kv,以及流阻系数都是基本参数,本节将讲解通过SOLIDWORKS Flow Simulation在三维…

SDL2 播放音频数据(PCM)

1.简介 这里以常用的视频原始数据PCM数据为例,展示音频的播放。 SDL播放音频的流程如下: 初始化音频子系统:SDL_Init()。设置音频参数:SDL_AudioSpec。设置回调函数:SDL_AudioCallback。打开音频设备:SD…

黑马程序员微服务 分布式搜索引擎3

分布式搜索引擎03 0.学习目标 1.数据聚合 **聚合(aggregations)**可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎?这些手机的平均价格、最高价格、最低价格?这些手机每月的销售…

【linux】htop 命令行工具使用

htop是一个跨平台的交互式流程查看器。 htop允许垂直和水平滚动进程列表,以查看它们的完整命令行和相关信息,如内存和CPU消耗。还显示了系统范围的信息,如负载平均值或交换使用情况。 显示的信息可以通过图形设置进行配置,并且可…

前端实现RSA非对称加密及生成RSA公私密钥

前端实现RSA非对称加密 RSA简介安装jsencryptRSA加密RSA解密如何生成公私秘钥(windows) RSA简介 RSA用于保密性时,就是公钥加密,私钥解密。 因为公钥是可以公开了, 那么任何人都可以使用公钥对信息进行加密&#xff0…

云课五分钟-03第一个开源游戏复现-贪吃蛇

前篇 云课五分钟-02第一个代码复现-终端甜甜圈C 视频 云课五分钟-03第一个开源游戏复现-贪吃蛇 一个终端的动态字符显然很难调动编程的积极性,那么更有趣的开源的游戏也许是一种更好的启发。 文本 蓝桥ROS机器人之绚丽贪吃蛇 如何在Linux下使用 DungeonRush-mast…

全民运动时代,气膜建筑备受瞩目

气膜体育场馆,作为当今新型的临时建筑运动场馆,在满足大型体育赛事需求方面展现出显著的优势。相较于传统体育场馆,气膜建筑不仅拥有更宽敞的空间,而且造价成本更为经济,成为体育场馆领域备受关注的建筑形式。 气膜建筑…

ABAP使用异步远程RFC实现并行处理

1、使用场景 当开发复杂报表,需要处理大量数据,不管怎么优化计算和查询语句,程序的运行效率还是达不到用户要求,怎么办? 为了解决这个问题,就需要程序实现并行处理。 本文档就是通过异步调用远程RFC的办…