第 12 章 行为驱动测试
行为驱动的概念(Behavior-Drivern Development,简称 BDD)在国内测试领域还不怎么流行,应用面也不是特别广泛。在行为驱动中运用结构化的自然语言描述测试场景,然后将这些结构化的自然语言转化为可执行的测试脚本或者其他形式。BDD 的一种优势是,它建立了一种「通用语言」,而这种通用语言可以同时被客户和开发者拿来使用,因此建立在同一种语言之后的沟通就会避免很多不一致的问题。对于自动化测试人员来说,掌握了 BDD 之后,可以试着利用它去提升测试团队的自动化测试程度,因为 BDD 不会去关注程序相关函数等对象的细节,而只关注其功能点,所以可以减轻回归测试任务的压力。从本章开始,笔者将介绍行为驱动,从环境准备开始到实例演示逐步深入。
12.1 环境安装
要把 BDD 的环境准备好。需要安装模块 behave,安装步骤和在 Python 环境中安装其他模块的方式一样,可以执行命令「pip install behave」。安装好之后可以通过执行命令「pip list」来查看 behave 是否在已安装列表中。
12.2 行为驱动之小试牛刀
小试牛刀的目的是,先根据一个小案例来了解行为驱动的运行模式及简单的应用规则。此案例是官方给出的一个例子。笔者画了一个项目目录结构图以方便读者对案例整体进行了解及把握。具体如图 12.1 所示。
图 12.1
在开始了解具体 BDD 案例代码之前,可以先熟悉一下 BDD 的一些关键字。具体如下:
(1)Given,表示「假设」,可以在此处设置一些前置条件之类,如在 BDD 之前,假设 behave 模块已经安装,等等。也可以理解成用户或者外部系统等对应用在进行交互(操作)前,需要将系统置于一个已知状态(如系统已安装 behave 模块等)。
(2)When 表示「当」,从字面意思上理解是对条件进行判断的意思。此时或者当某种条件满足时,用户或外部系统所采取的与被测系统的交互步骤。交互步骤能改变系统的状态(与系统真实地产生了交互)。
(3)And 表示「和」,是和 When 关键字搭配使用的。
(4)Then 表示「那么」,待观察的结果或者期望结果。
通过以上对 behave 的 Scenario(场景)中关键字的描述,可能让读者产生和自然语言很像的感觉。这样的场景描述可读性较强。具体的场景描述文字如图 12.2 所示,文件名为「example.feature」。
第一步,场景描述,其功能点(Feature)表示此脚本用于展示 behave 的用法;场景目的是「Run a simple test」;假设为「we have behave installed」;如果「we implement 5 tests」,那么「behave will test them for us!」。通过以上对场景中用到的关键字的解释,以及对具体场景的分析,相信读者们对这种描述测试场景的方式已经比较熟悉了。
图 12.2
第二步,对以上类似自然语言一样的场景描述进行代码的编写,让其转换成可以运行的基于行为驱动的测试脚本。文件名为「example_steps.py」,其位置在 steps 包下。代码中的函数通过 assert 语句进行断言,其中有一点需要注意的是,里面用到了参数 context。context 是全局变量,它可以被程序中的所有对象或者函数调用,在行为驱动中有承上启下的作用。此外,需要导入 behave 模块中的 given、when、then、step 等功能。
第三步,执行脚本。首先,在命令行模式下切换到项目主目录下;然后,执行命令「behave」即可;最后,查看执行结果,如图 12.3 所示。在测试结果中发现,1 个功能通过,1 个场景通过,3 个步骤测试通过。
图 12.3
第四步,以上步骤可以理解为一个正向测试用例。现在以一个反向测试用例来验证 behave 的测试输出结果。首先更改 step 实现中的断言条件,使其判断为失败。在代码文件「example_steps.py」中将断言部分的「assert number > 1」改为「assert number > 10」,更改之后的代码文件内容如下,执行结果如图 12.4 所示。
图 12.4