BDD简介

BDD(Behavior Driven Development),即行为驱动开发。BDD是ATDD验收测试驱动开发的一种升级版,根据明确的预期行为(一组场景)来进行开发和测试。

这种预期行为使用一种特定规的范格式进行描述,旨在消除需求从客户,到产品经理,再到开发/测试时的信息失真问题。

如一个后台登录功能,可以描述如下。

Feature: 登录功能

Scenario: 正常登录

Given 用户名 admin 密码 123456

When 打开后台页面

And 输入用户名

And 输入密码

And 点击登录按钮

Then 页面中应不包含 您输入的帐号信息不正确

Scenario: 账号为空登录

Given 用户名为空 密码 123456

When 打开后台页面

And 输入用户名

And 输入密码

And 点击登录按钮

Then 页面中应包含 您输入的帐号信息不正确

Scenario: 密码为空登录

Given 用户名 admin 密码为空

When 打开后台页面

And 输入用户名

And 输入密码

And 点击登录按钮

Then 页面中应包含 您输入的帐号信息不正确

产品整理完用户需求,梳理出如上明确的行为场景,开发根据这些行为场景进行开发,测试根据这些场景进行测试,也可以扩展更多的场景。

在BDD中,常用的概念如下

Epic: 史诗,一般指一个版本或一批功能更新

Feature: 特性,一般指一个功能点,如登录,添加商品,查询商品等,在测试中对应一个测试套件

Scenario:场景,即Story,一个明确的场景,对应一个测试用例

Step: 步骤,测试步骤有Given/When/Then三种

Given: 假设,给定数据或前置条件,对应测试中的setup

When: 当...时,对应一个测试步骤

Then: 然后,即期望结果,对应一个测试断言

And: 同上,可以用于Given/When/Then后

行为驱动多用于UI层的测试。因此BDD框架的自动化一般结合Selenium使用。

behave基本使用

常用的BDD框架有

最出名的BDD框架应该是Cucumber,使用Ruby语言,Python中常用的有behave、pytest-bdd和lettuce,其中lettuce不支持Python3。

behave是比较易用的一款BDD测试框架,github地址为:https://github.com/behave/behave

使用BDD进行测试的基本步骤为:

graph LR

A[编写场景文件] ---> B[将每一个步骤翻译成Selenium操作] ---> C[测试场景]

使用方法如下,以百度搜索为例。

安装behave和selenium

使用PyCharm新建一个空白项目behave_bdd

安装behave和selenium:

pip install behave

pip install selenium

编写场景文件

在目录中新建一个名为features的目录,咋features中新建一个baidu.feature的文件,内容如下。

Feature: 百度搜索

Scenario: 搜索关键词

Given 关键词 behave

When 打开百度页面

And 输入关键词

And 点击百度一下按钮

Then 页面标题中应包含关键词

实现场景步骤

在features中新建steps目录,在steps目录中新建baidu_steps.py

从behave中导入given,when,then等关键字

对应场景的每个步骤编写一个step_impl(context)函数,上方有对应的关键字装饰器匹配对应的场景步骤,如

from behave import given, when, then

@given('关键词 {keyword}') # 对应步骤 Given 关键词 behave, 参数放在{}中

def step_impl(context, keyword): # context是上下文对象,有参数的话,加上对应参数

context.keyword = keyword # 将参数绑定上下文对象,以便其他步骤使用

其他步骤一一实现即可,完整代码如下

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

测试场景

打开命令行,cd到项目所在目录,输入behave运行即可,项目结构及效果如下。

结合allure生成报告

安装allure-behave:pip install allure-behave

behave -f allure_behave.formatter:AllureFormatter -o allure_data

其中-o是指定allure报告数据输出目录

allure_data中生成的是json格式的报告数据,需要使用allure命令行工具才能转为html报告,

allure命令行工具,mac系统可以使用brew安装

allure命令行工具依赖JAVA,需要配置JAVA_HOME

brew tap qameta/allure

brew install allure

Windows系统可以下载allure-commandline源码,v2.13.6下载链接

解压后,将其中的bin目录配置到环境变量Path中即可。

allure命令行工具安装或配置好后,使用以下命令生成html报告。

allure generate allure_data -o allure_html

参考:

behave java_BDD模式-Python behave的简单使用相关推荐

  1. behave java_BDD框架:behave学习记录

    本人学习的时候基本上是按照behave的tutorial教程一步步学习的,这篇文章就当Behave教程的翻译版吧(*^__^*) 嘻嘻--. 1安装behave 安装好python后,使用 pip i ...

  2. Python Behave框架学习

    behave是python语言的行为驱动开发,全称:Behavior-driven development,简称BDD,它是一种敏捷软件开发技术,它鼓励软件项目中的开发人员.QA和非技术或业务参与者之 ...

  3. python工厂模式 简书_[Python设计模式] 01 - 简单工厂模式

    设计模式的目的是让代码易维护.易扩展,不能为了模式而模式,因此一个简单的工具脚本是不需要用到任何模式的. 简单工厂模式又叫静态工厂方法模式,工厂模式家族中最简单的一种模式.这个模式的基本工作方式: 通 ...

  4. python界面设计-手把手教你用Python设计一个简单的命令行界面

    原标题:手把手教你用Python设计一个简单的命令行界面 对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰.今天,我们就来教大家如何设计功能完整的 Pyth ...

  5. python推荐系统-利用python构建一个简单的推荐系统

    摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...

  6. python的编程模式-Python设计模式:为了整洁又时尚的代码

    关键时刻,第一时间送达! 作者ANDREI BOYANOV - 高级软件工程师 @TOPTAL 让我们再重申一下:Python是一种具有动态类型和动态绑定的高级编程语言.我将它描述为一个强大的高级动态 ...

  7. 基于python的系统构建_利用python构建一个简单的推荐系统

    摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...

  8. python推荐_利用Python构建一个简单的推荐系统

    原标题:利用Python构建一个简单的推荐系统 摘要:快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫.在此之前读者需要对pandas和numpy等数据分析包有所了解. 什么 ...

  9. 怎样学好python编程-3个月学好Python有多简单?

    原标题:3个月学好Python有多简单? 风变科技推出Python小课,最初源于中国编程教育最令人费解的两个问题: 职场上那么多重复繁琐的工作,十几行代码就可以搞定大部分,大家为什么 不用编程来解决呢 ...

最新文章

  1. PHP微信公众号开发插件,基于ThinkCMF1.5.0开发的微信公众号插件
  2. python函数拟合不规则曲线_python中的多变量(多项式)最佳拟合曲线?
  3. 基于linux和php的稳定的分布式数据采集架构
  4. 建立索引和主外约束_Mysql索引原理
  5. 再见python你好go语言_再见Shell,你好Python
  6. linux 查询wwid命令,Linux磁盘及分区之wwid和uuid
  7. URL different URI
  8. python的优点有哪些-Python为何这么火,究竟有哪些优势?
  9. 【宝塔】【cloudreve】挂载阿里云OSS到ECS服务器内网上
  10. Spring 的 init-method 和 destory-method
  11. jeesit 初学项目创建
  12. 非线性动力方程中的解析法和数值法(解析解和数值解)
  13. Java百宝箱——实现ip地址、手机号、身份证号归属地查询
  14. vue.runtime.esm.js?2b0e:619 [Vue warn]: Failed to mount component: template or render function not d
  15. 3G移动网络,给WAP带来什么?
  16. 明道云对接小鹅通,沉淀内容付费平台数据
  17. Java实现扫雷(简化版)
  18. Github:解决电脑无法登陆github.com问题
  19. CarSim教程(一)- 基本操作
  20. 对球面线性插值的理解

热门文章

  1. contextmenu的使用
  2. Matlab学习-CDF(累积分布函数图)绘制
  3. CoinUp:元宇宙解析“未来天堂”
  4. TTS | 语音合成常见数据集及数据格式详情
  5. AJAX W3CSchool 学习笔记
  6. 通过阿里云物联网平台实现PLC间的远程通讯
  7. 分享一个工业现场常用的运动控制案例
  8. kubernetes集群证书过期处理
  9. 怎样使用联系人在苹果Mac上打印信封?
  10. 1372: 水仙花数