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
使用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的简单使用相关推荐
- behave java_BDD框架:behave学习记录
本人学习的时候基本上是按照behave的tutorial教程一步步学习的,这篇文章就当Behave教程的翻译版吧(*^__^*) 嘻嘻--. 1安装behave 安装好python后,使用 pip i ...
- Python Behave框架学习
behave是python语言的行为驱动开发,全称:Behavior-driven development,简称BDD,它是一种敏捷软件开发技术,它鼓励软件项目中的开发人员.QA和非技术或业务参与者之 ...
- python工厂模式 简书_[Python设计模式] 01 - 简单工厂模式
设计模式的目的是让代码易维护.易扩展,不能为了模式而模式,因此一个简单的工具脚本是不需要用到任何模式的. 简单工厂模式又叫静态工厂方法模式,工厂模式家族中最简单的一种模式.这个模式的基本工作方式: 通 ...
- python界面设计-手把手教你用Python设计一个简单的命令行界面
原标题:手把手教你用Python设计一个简单的命令行界面 对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰.今天,我们就来教大家如何设计功能完整的 Pyth ...
- python推荐系统-利用python构建一个简单的推荐系统
摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...
- python的编程模式-Python设计模式:为了整洁又时尚的代码
关键时刻,第一时间送达! 作者ANDREI BOYANOV - 高级软件工程师 @TOPTAL 让我们再重申一下:Python是一种具有动态类型和动态绑定的高级编程语言.我将它描述为一个强大的高级动态 ...
- 基于python的系统构建_利用python构建一个简单的推荐系统
摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...
- python推荐_利用Python构建一个简单的推荐系统
原标题:利用Python构建一个简单的推荐系统 摘要:快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫.在此之前读者需要对pandas和numpy等数据分析包有所了解. 什么 ...
- 怎样学好python编程-3个月学好Python有多简单?
原标题:3个月学好Python有多简单? 风变科技推出Python小课,最初源于中国编程教育最令人费解的两个问题: 职场上那么多重复繁琐的工作,十几行代码就可以搞定大部分,大家为什么 不用编程来解决呢 ...
最新文章
- PHP微信公众号开发插件,基于ThinkCMF1.5.0开发的微信公众号插件
- python函数拟合不规则曲线_python中的多变量(多项式)最佳拟合曲线?
- 基于linux和php的稳定的分布式数据采集架构
- 建立索引和主外约束_Mysql索引原理
- 再见python你好go语言_再见Shell,你好Python
- linux 查询wwid命令,Linux磁盘及分区之wwid和uuid
- URL different URI
- python的优点有哪些-Python为何这么火,究竟有哪些优势?
- 【宝塔】【cloudreve】挂载阿里云OSS到ECS服务器内网上
- Spring 的 init-method 和 destory-method
- jeesit 初学项目创建
- 非线性动力方程中的解析法和数值法(解析解和数值解)
- Java百宝箱——实现ip地址、手机号、身份证号归属地查询
- vue.runtime.esm.js?2b0e:619 [Vue warn]: Failed to mount component: template or render function not d
- 3G移动网络,给WAP带来什么?
- 明道云对接小鹅通,沉淀内容付费平台数据
- Java实现扫雷(简化版)
- Github:解决电脑无法登陆github.com问题
- CarSim教程(一)- 基本操作
- 对球面线性插值的理解