测试工程师应知应会之行为驱动测试BDD

开发 项目管理
测试用例执行完毕之后会给出测试报告,JBehave提供了多种测试报告可供使用,包括控制台、文本文件、XML文件、HTML页面等。

很多工程师都了解测试驱动开发(Test Driven Development,TDD),但是了解行为驱动开发的人却不是很多。

行为驱动开发(Behavior Driven Development,BDD),是测试驱动开发的延伸,旨在使用简单的,特定于领域的脚本语言(软件外包行业的最大问题?从领域驱动设计说起),通过结构化的方法,将自然语言文本转换为可执行的测试用例。从而在技术与实际的业务需求者之间,建立起一条易于理解的道路。这样,不理解程序员们正在做什么的业务方,就可以更容易的理解他们的工作。

在行为驱动开发中,最关注的核心是业务的设计。而测试驱动开发,则更关心是的使用代码来描述测试用例。因此,在行为驱动开发相关的框架中,采用了多种技术手段,构造自然语言与代码之间的连接关系,使得关注于业务逻辑的使用者,能够使用更容易理解的语言,向测试代码下达他们的指令。

下面我们通过当前最为流行的BDD 框架JBehave来介绍一下BDD对于这种设计的实现。

在JBehave中,完全一个测试用例需要5个步骤。

一、编写测试用例

在JBehave中,一个测试用例由一系列场景(Scenario)组成。而一个场景的编写,需要符合JBehave定义的语法格式。主要格式内容如下:

Story := Description? Meta? Narrative? GivenStories? Lifecycle? Scenario+ ;

Narrative:= "Narrative:" ( InOrderTo AsA IWantTo | AsA IWantTo SoThat ) ;

InOrderTo:= "In order to" NarrativeElementContent ;

IWantTo:= "I want to" NarrativeElementContent ;

SoThat:= "So that" NarrativeElementContent ;

NarrativeStartingWord := ("In order to" | "As a" | "I want to" | "So that") ;

GivenStories:= "GivenStories:" (StoryPath ','?)+ ;

Lifecycle:= "Lifecycle:" LifecycleBefore? LifecycleAfter? Examples?

LifecycleBefore:= "Before:" (Scope? Step+)+

LifecycleAfter:= "After:" (Scope? Outcome? MetaFilter? Step+)+

Scope:= "Scope:" "STEP" | "SCENARIO" | "STORY"

Outcome:= "Outcome:" "ANY" | "SUCCESS" | "FAILURE" ;

在语法格式中,规定了一个测试用例的写法,以及其中特定的关键字,而这种写法力图贴近于自然语言,并且能够被框架所解析。

图片

二、将测试用例映射到Java

编写好测试用例之后,JBehave会将测试用例映射成Java。这种映射主要通过RegexStoryParser(正则表达式)或者是GherkinStoryParser这两种解析器来实现。

通过类似于

@Given("a stock of symbol $symbol and a threshold of $threshold")

public void stock(String symbol, double threshold) {

stock = new Stock(symbol, threshold);

}

的方式,可以将测试用例中的输入映射进Java函数的输入参数中,尽管保持入参的名字和@Given语句中的参数名字一致是一种好的习惯,但是JBehave是按照参数的顺序来赋值的,并不要求名称完全一致。

图片

三、配置测试用例

JBehave的核心是配置的嵌入类,这是提供给IDE的可执行入口,通过执行该嵌入类,系统可以调用框架的相关方法,从而能够完成JBehave提供的相关功能。

JBehave提供的可嵌入类主要有ConfigurableEmbedder和InjectableEmbedder两种。

图片

 

四、运行测试用例

配置好嵌入类之后,就可以通过JUnit在IDE或者是命令行中运行测试用例了。

图片

五、查看报告

测试用例执行完毕之后会给出测试报告,JBehave提供了多种测试报告可供使用,包括控制台、文本文件、XML文件、HTML页面等。


图片


责任编辑:武晓燕 来源: 信息时代风之影
相关推荐

2022-11-04 07:12:24

JavaScript基准测试

2011-05-19 15:27:39

测试工程师

2009-02-23 09:41:29

面试软件测试工程师

2012-10-10 09:42:58

谷歌测试测试工程师

2015-02-13 19:52:47

测试工程师APPTestin云测

2021-05-22 10:01:45

PythonPython列表Python程序开发

2018-04-05 23:13:21

Fiddler调试工具测试

2019-11-08 11:08:29

测试工程师AI人工智能

2018-12-29 15:10:22

工程师爬虫Python

2012-03-02 08:56:25

软件测试

2016-03-25 13:43:19

飞象网

2009-06-16 11:36:34

软件测试工程师猎头职业

2009-03-05 09:39:07

工程师软件测试加班经历

2012-09-07 10:20:53

2009-02-24 10:31:33

软件测试工程师角色定位

2011-04-18 16:41:01

测试工程师软件测试

2022-07-20 00:03:10

Python列表字典推导

2012-08-01 09:29:03

测试测试工程师

2019-09-11 15:29:08

工程师浏览器软件

2009-10-09 09:44:37

点赞
收藏

51CTO技术栈公众号