行为驱动,Behave-Driven Development,简称BDD。在行为驱动中运用结构化的自然语言描述场景测试,然后将这些结构化的自然语言转化为可执行的测试脚本或者其他形式。BDD的一种优势是,它建立了一种通用语言,而这种语言可以同时被客户和开发者拿来使用,因此建立在同一种语言知乎的沟通就会避免很多不一致的问题。
BDD的环境:安装模块behave,pip install behave。
BDD一些关键字的解释:
(1)Feature,可简单描述此场景是什么,如登录。
(2)Given,表示‘假设’,可以在此设置一些前置条件之类,如在BDD之前,假设behave模块已经安装等待。
(3)When,表示‘当’,对条件进行判断的意思,或者当某次条件满足时,用户或外部系统所采取的与被测系统的交互步骤。交互步骤,就是与系统真实的产生了交互。
(4)And,表示‘和’,是和When关键字搭配使用的。
(5)Then表示‘那么’,待观察的结果或者期望结果。
步骤:
第一步:场景描述,拆分为四步操作:打开登录页面 --》输入用户名 --》输入密码 --》输入图形验证码。场景文件名为login.feature。
Feature: Login
Scenario: open website
When I open login website
Then I input the username
Then I input the password
Then I input the captcha
第二步:对以上类似的自然语言一样的场景描述进行代码的编写,让其转换成可以运行的基于行为驱动的测试脚本。文件名为login_steps.py,其位置在steps包下。
# coding = utf-8
from behave import *
from selenium import webdriver
# 打开网站
@when('I open login website')
def step_imp1(context):
context.driver = webdriver.Chrome()
context.driver.maximize_window()
context.driver.get('https://u.uzai.com/reg/login')
# 输入用户名
@then('I input the username')
def step_imp2(context):
context.driver.find_element_by_id('user_name').send_keys('test')
# 输入密码
@then('I input the password')
def step_imp3(context):
context.driver.find_element_by_id('password').send_keys('123456')
# 输入图形验证码
@then('I input the captcha')
def step_imp4(context):
context.driver.find_element_by_id('txtVCImg').send_keys('12')
第三步,执行脚本。首先,在命令行模式下切换到项目主目录下,然后执行命令:behave;最后查看执行结果。如图所示,1个功能通过,1个场景通过,4个步骤测试通过。