behave java_BDD模式-Python behave的简单使用

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

f27ada125d7bd8a5c5fd8216afc9a47b.png

使用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运行即可,项目结构及效果如下。

95f72931dd3da7a0be659b48c4929bfc.png

结合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

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值