当前位置:首页>python>BDD-python+behave自动化测试搭建

BDD-python+behave自动化测试搭建

  • 2026-09-12 21:01:31
BDD-python+behave自动化测试搭建
TECH NOTE · 教程 2021.10.10

behave 自动化测试搭建 · BDD

Behave 是一种基于行为驱动开发(BDD)的 Python 测试框架。

DOODLE

用 Gherkin 自然语言编写用例,结合 Selenium 实现 UI 自动化测试。

BDD PYTHON

01

PART

BDD 简介

BEHAVIOR DRIVEN DEVELOPMENT

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

BDD 使用 Gherkin 的自然语言风格来编写测试用例,文件格式为 *.feature,如一个后台登录功能,可以描述如下:

. . . gherkin

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 页面中应包含 您输入的帐号信息不正确

以上就表示了一个完整的测试,由于使用的是自然语言,因此这种自动化测试用例无论是从书写上,还是阅读上都是很容易的,完全可以交付给非技术类型的人去编写。

Gherkin 语法中的关键词:

. . . gherkin

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

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

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

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

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

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

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

甚至可以将关键词改为中文的描述,例如:

# language: zh-CN

功能: 测试数字加法计算结果正确

 场景: 验证计算结果

  假如 输入50 输入50

  那么 结果是 100

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

02

PART

behave 基本使用

QUICK START

Step 1 常用的 BDD 框架

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

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

Step 2 安装 behave 和 selenium
. . . python

pip install behave

pip install selenium

演示项目仓库:https://gitea.kiki.kim/ha/behave-web-demo.git

Step 3 项目所需的最小目录结构
. . . shell

+--features/

|  +--steps/    # -- 存放测试步骤的目录

|  |  +-- *.py  # -- 测试步骤的具体实现

|  +-- *.feature  # -- 测试用例

|  +-- environment.py # 可选,用于自定义behave的环境变量

Step 4 编写场景文件

在 features 中新建一个 baidu.feature 的文件,内容如下:

. . . gherkin

Feature: 百度搜索

 Scenario: 搜索关键词

  Given 关键词 behave

  When 打开百度页面

  And 输入关键词

  And 点击百度一下按钮

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

Step 5 实现场景步骤

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

. . . python

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

Step 6 运行

直接在 features 同级目录执行 behave 即可:

03

PART

扩展

EXTENSIONS

基于 behave 框架,GitHub 上有很多好用的第三方插件可以使用:

 behaving 

基于 behave 的 web 自动化测试:https://github.com/ggozad/behaving

 behave-http 

基于 behave 的接口自动化测试:https://github.com/mikek/behave-http

 behave-db 

基于 behave 的数据库自动化测试:https://github.com/M-HALLIDAY/behave-db

我是 小梦同学,一个爱折腾技术的测试工程师,专注分享踩坑经验

如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见。

如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见。

赞
在看
收藏

THANKS FOR READING

最新文章

随机文章