Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >行为驱动开发:一篇文章带你用 Python 玩转 BDD

行为驱动开发:一篇文章带你用 Python 玩转 BDD

作者头像
AirPython
发布于 2020-06-10 02:54:03
发布于 2020-06-10 02:54:03
1.8K00
代码可运行
举报
文章被收录于专栏:Python 自动化Python 自动化
运行总次数:0
代码可运行

1. BDD 及优势

BDD,行为驱动开发是 敏捷软件开发 的一种技术,鼓励软件项目的所有成员之间的相互协助

传统的软件开发方式主要缺点包含:测试用例比较单一,导致覆盖率不高;业务和产品不能够全面了解产品的行为表现

BDD 的出现主要优势有下面 2 点,主要体现在:

  • 可以很好的减少项目成员之间的沟通成本,增加协作
  • BDD 能够将上线之后的手工测试转换为自动化测试,提升测试效率

2. 软件开发流程

BDD 一般在产品需求文档审核时就开始介入,产品或业务负责人提供产品需求文档的同时,会提供具体的业务场景行为

开发人员根据定义的行为场景,开发软件,并编写场景下面的测试代码

完成 BDD 先在本地进行自测,没问题之后会提交到代码仓库,最后通过 CI 去持续集成,测试通过之后才能上线

BDD 的软件开发流程图如下:

3. Gherkin 语言及 Features

Gherkin 是 BDD 框架 Cucumber 的功能性语言,能够通过自然语言,支持多国语言,描述一个具体的需求

Gherkin 语言使用的是主要英文关键词包含:Scenario、Given、when 、And、Then 等;这些关键词可以转换成中文关键词,比如:场景、加入、当、那么等。

Features 功能文件一般命名为:*.feature,此文件可以编写具体的需求行为,最后可以支持自动化测试

功能文件的编写规范如下:

  • 空格或者制表符用于缩进
  • 每一行以 BDD 框架中预设的关键字开头
  • 使用 # 符号在文件内进行注释
  • 无论是中文或英文编写,「 : 」符号只能用英文格式的冒号,否则运行的时候会报错

下面是一个简单的功能文件,描述的是两个数相加的逻辑:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 功能文件(英文)
Feature: Adding
    Scenario: Adding two numbers
    Given the input "1+1"
    When the calculator is run
    Then output should be "2"

4. Behave

Behave 是 Python 的 BDD 框架,并且可以使用命令行工具进行测试,使用 pip 可以很方便地进行安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 安装 behave 框架
pip3 install behave

编写完功能文件之后,就可以使用 behave 命令直接运行了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 直接运行,控制台查看结果
behave

# 以中文来运行测试
behave --lang=zh-CN

5. 实战一下

下面以自动化测试 Google 搜索为例,来说说具体的使用方式

第 1 步,编写 Features 文件,以中文为例

使用 behave --lang-help zh-CN 命令查看所有的中文关键字:

接着,利用这些关键字结合具体行为,编写的 Feature 文件如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
功能: Google搜索模块测试
  场景大纲: Google搜索一个关键字功能
      假如 搜索框输入一个关键字 <keyword>
        当 点击搜索按钮
        那么 页面标题应该为 <title>
      例子:
          |   keyword  |   title    |
          |   Python   |   Python - Google 搜索       |
          |   AirPython |   AirPython - Google 搜索   |

需要注意的是,文件中定义了两个参数,即:keyword 和 title

实际项目中大部分的自动化测试都是基于数据驱动参数化,因此需要搭配「 场景大纲+例子」一起使用。

第 2 步,编写 step 文件

在 Features 同级目录下新建一个 steps 文件夹,接着,在此文件夹下再新建一个 step.py 文件

然后,就可以对照第 1 步编写的 Features 文件编写测试用例了

借助 @given、@when、@then 装饰器,将文本内容和参数对应上

最后,使用 Selenium 定义的 API 方法操作元素即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from time import sleep
from selenium.webdriver.common.keys import Keys
from behave import *


@given(u'搜索框输入一个关键字 {keyword}')
def step_impl(context, keyword):
    element_input = context.driver.find_element_by_name('q')
    element_input.clear()
    print("准备输入")
    element_input.send_keys(keyword)


@when(u'点击搜索按钮')
def step_impl(context):
    # 模拟Enter键
    context.driver.find_element_by_name("q").send_keys(Keys.ENTER)

    sleep(1)


@then(u'页面标题应该为 {title}')
def step_impl(context, title):
    assert context.driver.title == title

需要指出的是,方法名中的第一个参数 context 是一个全局的字典,可以在步骤方法之间传递数据

第 3 步,编写配置环境文件 environment.py

环境配置文件定义了测试脚本运行过程中,具体步骤、场景之前和之后要执行的内容

比如,我们在 before_feature 方法( 每一个 feature 场景执行之前执行 )前初始化 ChromeDriver,打开目标网站首页;然后在 after_feature 方法( feature 场景测试完成之后执行 )后关闭浏览器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def before_feature(context, feature):
    context.driver = webdriver.Chrome()
    context.driver.get("https://www.google.com/")


def after_feature(context, feature):
    context.driver.quit()

第 4 步,转换 cucumber 测试报告

为了保证下一步在 Jenkins 中能正常显示测试报告,需要将 behave 生成的测试报告转换为 cucumber 兼容的 json 测试报告

首先,安装依赖 behave2cucumber

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# json测试报告文件转换
pip3 install behave2cucumber

然后,在上一步的环境配置文件中重写 after_all 方法,将 behave 格式的测试报告转换为 cucumber 兼容的测试报告

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def after_all(context):
    """
    所有测试完成之后执行
    注意:behave1.2.6生成的json没法正常转换为cucumber兼容的json报告,建议降级为:1.2.5
    :param context:
    :return:
    """

    # 转换
    with open('./test_report.json',encoding='utf-8') as behave_json:
        # 格式转换
        cucumberJson = behave2cucumber.convert(json.load(behave_json))

    jsonStr = json.dumps(cucumberJson)

    # 写入
    jsonReport = open(r'./report/jsonReport.json', 'w',encoding='utf-8')
    jsonReport.write(jsonStr)
    jsonReport.close()

需要注意的是,behave 最新版本转成的 cucumber 测试报告,在 Jenkins 中没法展示出来,建议降低为 1.2.5 版本

第 5 步,本地运行

在 Features 文件同级目录下,执行下面的命令,将在本地生成格式化后 json 格式的测试报告

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 以中文语言的形式在本地运行
# 在本地产生测试报告
behave --lang=zh-CN -f json.pretty -o './test_report.json'

第 6 步,持续集成

首先搭建 Jenkins 环境,然后安装 Cucumber reports 插件

https://plugins.jenkins.io/cucumber-reports

接着,新建一个 Freestyle project 的任务,添加构建步骤 - Execute Shell,写入要执行的 Python 脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 打开目标项目位置
cd /Users/xingag/Desktop/xag/git/marks/Python/测试/Demo/feature_chrome

# 执行测试,并生成测试报告
behave --lang=zh-CN -f json.pretty -o './test_report.json'

最后,添加构建后的操作 - Cucumber reports,指向第 4 步转换后的 json 格式的测试报告

第 7 步,构建 构建后,测试脚本会自动进行执行,然后会在结果栏生成可视化测试报告

6. 最后

文章只是通过 Python 中的 Behave 框架来谈 BDD 在实际项目中的用法

如果你想在 Java 或者 Golang 项目中使用,可以直接 JBehave 或者 GoDog 框架来实现,除了语法外,基本操作方法类似。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AirPython 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
行为驱动开发:一篇文章带你用 Python 玩转 BDD
相信大部分的人都听说过 BDD,即:行为驱动开发,但并未涉及到它的使用方和项目实战。
AirPython
2020/06/08
3.1K1
浅谈BDD下的自动化测试框架
测试驱动开发(TDD)相信大家已经很熟悉了,而行为驱动开发(BDD)其实是TDD的一种演化。那什么是BDD,为什么要使用BDD, BDD下的自动化测试该如何做呢?本文将通过简单的例子,向大家展示如何使用Cucumber 描述需求,编写、执行测试用例,并输出测试报告。
yuanyi928
2018/08/15
7.3K0
浅谈BDD下的自动化测试框架
推荐一款基于业务行为驱动开发(BDD)测试框架:Cucumber!
Cucumber是一个行为驱动开发(BDD)工具,它结合了文本描述和自动化测试脚本。它使用一种名为Gherkin的特定语言来描述应用程序的行为,这种语言非常接近自然语言,使得非技术人员也能够理解和参与测试。
测试开发技术
2024/06/25
4240
推荐一款基于业务行为驱动开发(BDD)测试框架:Cucumber!
如何在python下建立cucumber项目
Gherkin语言使用的是主要英文关键词Scenario、Given、when 、And、Then和But等,这些关键词可以转换成中文关键词,场景、假如、当、那么等。根据用户故事,需求人员或测试人员使用Gherkin语言编写好测试场景的每个步骤
顾翔
2024/09/10
1140
如何在python下建立cucumber项目
[BDD in Python]使用behave框架在Python中实践行为驱动开发
诞生于上世纪末的测试驱动开发(TDD)已经算是很深入人心了,一定程度上来说它通过既有的约定(测试)减少了开发人员间的沟通成本。但这些测试也只是开发人员自己对需求的理解,有时候开发人员、业务人员、市场部门和用户对需求的理解是有分歧的,传统的方案是厚厚的需求说明书,从测试驱动开发引申来的行为驱动开发BDD(Behavior Driven Development)可以有效的解决这个问题。
杜逸先
2018/07/06
4.2K0
[BDD in Python]使用behave框架在Python中实践行为驱动开发
什么是行为驱动的 Python?
您是否听说过 行为驱动开发(behavior-driven development)(BDD),并好奇这是个什么东西?也许你发现了团队成员在谈论“嫩瓜”(LCTT 译注:“ 嫩瓜(gherkin)” 是一种简单的英语文本语言,工具 cucumber 通过解释它来执行测试脚本,见下文),而你却不知所云。或许你是一个 Python 人(Pythonista),正在寻找更好的方法来测试你的代码。 无论在什么情况下,了解 BDD 都可以帮助您和您的团队实现更好的协作和测试自动化,而 Python 的 behave 框架是一个很好的起点。
用户8639654
2021/10/25
1.7K0
Cucumber测试实践
来源:https://cucumber.io/docs/guides/overview/
ThoughtWorks
2022/02/16
9870
Cucumber测试实践
干货 | 基于 BDD 理念的 UI 自动化测试在携程度假的应用
Leo Li,携程高级软件工程师,负责度假 BDD-Test UI 自动化测试框架的研发、维护和迭代等工作。
携程技术
2020/06/24
2.8K0
干货 | 基于 BDD 理念的 UI 自动化测试在携程度假的应用
开源 | 携程机票BDD UI Testing框架 - Flybirds
携程机票从2018年年中正式引入BDD,至今已3年多,成为内部首选的敏捷开发技术。
携程技术
2022/01/18
9020
开源 | 携程机票BDD UI Testing框架 - Flybirds
你不知道的Cypress系列(1) --鸡肋的BDD
Behavioural Driven Development (BDD)是从TDD发展来的(什么,TDD你都不知道?!),它通过自然语言定义系统行为,以功能使用者的角度,编写需求场景,且这些行为描述可以直接形成需求文档,同时也是测试标准。
iTesting
2020/12/15
1.6K0
你不知道的Cypress系列(1) --鸡肋的BDD
测试兵器谱のCucumber-JVM框架篇
最近业务上使用的自动化测试项目在改进项目执行方案,优化框架,正好结合实践记录一下最近遇到的问题和解决方法,打算从以下几个部分跟大家探讨一下:
雷子
2021/03/15
1.6K0
测试兵器谱のCucumber-JVM框架篇
使用Behave实现Python自动化测试BDD的强大实践
自动化测试是现代软件开发中不可或缺的一部分,它能够提高软件质量、加速开发周期并减少回归测试的成本。在Python领域,Behave作为一种行为驱动开发(BDD)工具,为开发人员提供了一种清晰、可读性强的方式来编写和执行测试用例。本文将介绍如何使用Python中的Behave库结合BDD来进行自动化测试,以及一些实际的代码示例。
一键难忘
2024/07/27
1K0
接口自动化测试框架Karate入门
在这篇文章中,我们将介绍一下开源的Web-API自动化测试框架——Karate介绍
顾翔
2019/12/11
3.1K0
接口自动化测试框架Karate入门
Python 自动化测试(五): Pytest 结合 Allure 生成测试报告
所以打造一个美观、一目了然的测试报告,清晰的反应质量问题,并提供给相关人员了解项目的整体状态,是非常必要的。
霍格沃兹测试开发
2020/10/28
1.7K0
Python 自动化测试(五): Pytest 结合 Allure 生成测试报告
Python自动化测试五种模型
在自动化测试中,我们往往将自动化脚本都归纳属于哪种框架模型,比如关键字驱动模型等。
wangmcn
2023/08/22
3520
Python自动化测试五种模型
五大自动化测试的 Python 框架
Python在各大排行榜上一直都是名列前茅。目前,它在Tiobe指数中排名第二,仅次于C。随着该编程语言的广泛使用,基于Python的自动化测试框架也应运而生,且不断发展与丰富。
测试小兵
2021/08/05
9.4K0
五大自动化测试的 Python 框架
3个开源行为驱动的开发工具[DevOps]
行为驱动开发(BDD)似乎非常容易。测试以易于阅读的格式编写,允许产品所有者,业务赞助商和开发人员提供反馈。这些测试是团队的有效文档,因此不需要任何要求。这些工具易于使用,可让自动化测试套件。每次测试运行都会生成报告,以记录每个步骤并向您显示测试失败的地方。
yyx
2019/12/25
1.2K0
3个开源行为驱动的开发工具[DevOps]
BDD测试框架之Cucumber使用入门
cucumber早在ruby环境下应用广泛,作为BDD框架的先驱,cucumber后来被移植到了多平台,简单来说cucumber是一个测试框架,就像是juint或是rspec一样,不过cucumber遵循的是BDD的原则。
软件测试君
2019/06/20
4.5K0
BDD测试框架之Cucumber使用入门
Newbe.Pct 开始使用
前篇介绍了,使用 Newbe.Pct 之前的准备工作。本篇将开始介绍如何使用本项目运行第一个测试用例。
newbe36524
2020/03/16
6820
cucumber测试框架
1.1 什么是BDD(行为驱动开发)   首先了解一个概念,BDD(BehaviorDrivenDevelopment:行为驱动开发)为用户提供了从 开发人员和客户的需求创建测试脚本的机会。因此,开始时,开发人员,项目经理,质量保证,用户验收测试人员和产品所有者(股东)都齐聚一堂,集思广益,讨论应该传递哪些测试场景,以便成功调用此软件/应用程序。这样他们想出了一组测试场景。所有这些测试脚本都是简单的语言,所以它也可以服务于文档。
爱撸猫的杰
2019/08/24
4.1K0
相关推荐
行为驱动开发:一篇文章带你用 Python 玩转 BDD
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验