关键词:
CucumberBDD测试
摘要:
Cucumber是BDD(Behaviour-Driven Development)模式下实现可执行规范(Executable Specifications)的开源工具,但是它的使命并不局限于做自动化验收测试,更加重要的在于其能够在团队成员之间构建统一的交流基础(feature文件)、规范交流用语(Domain
Specific Language)、提高各个利益相关方(Business
Stakeholders)沟通效率和效果,从而达到提升产品质量、做成客户期望得到的产品这一最终目标。
案例描述
从环境搭建到实际使用场景,展开介绍Cucumber的使用。
案例分析
了解Cucumber,了解Cucumber安装及使用过程。
1.cucumber是一种支持BDD(behavior driven development,行为驱动开发)的自动化测试框架
2.cucumber是敏捷开发团队常用的一种测试框架,它鼓励了系统开发环节中各个参与者来进行协作,其中也包括非技术人员
3.cucumber的测试用例一般由测试场景和测试步骤组成
4.cucumber中的测试场景一般由纯自然语言来进行描述,很易懂,因此,非技术人员也可以来编写测试用例,然后通过技术人员来进行实现它。一般的描述语言(比如中文,英文,此处省略N个)它都能支持
5.cucumber中的测试步骤是对测试场景描述的实现是,其测试步骤实现的语言也是支持很多种的,比如常用的c#, java, ruby, javascript(nodejs)等
6.cucumber本身是由ruby编写的
7.现在jenkins之类的自动构建工具对cucumber的支持也十分的友好
官方网址:https://cucumber.io/
1.1.2Cucumber环境搭建
1、安装ruby
已ubuntu系统为例:
# sudo apt-get update
# sudo apt-get install ruby-------也可以安装指定版本如:sudo apt-get install ruby2.0
2、安装Cucumber
# gem install cucumber
如下图:
至此环境安装完毕。
执行cucumber --version来保证cucumber安装正确,如下图:
1.1.3通过一个简单的例子来了解Cucumber的使用过程
1.1.3.1cucumber的目录结构
cucumber的执行需要特定的目录结构的。我们首先需要先创建这样的一个目录结构:
创建完成后查看该项目的结构如下图:
创建完成后查看该项目的结构如下图:
在图中,HelloWorld这个目录下面包含了一个名为features目录,在features目录下面有一个名为hello_cucumber.feature的文件以及一个名为step_definitions的目录,在step_definitions这个目录下面有一个名为hello_cucumber.rb的文件。下面解释下各个目录以及文件的作用:
HelloWorld
这个根目录可以理解为工程所在的目录,存放了所有需要用到的文件和资源;
features
这个目录下面包含了所有的场景文件和实现场景文件中描述的步骤文件;
hello_cucumber.feature
这个文件包含了场景的描述,也就是对测试用例的描述,里面一般交代了测试的前提和测试需要的条件并且当发生某一事件的时候能够得到一个什么样的结果,这些描述一般使用很易懂的自然语言来进行描述它,所以技术或者非技术人员都能看懂;
在features目录下可以包含一个或者多个feature文件,一般情况下,对于具有相同性质的测试场景会放到同一个feature文件中,以便于维护;
step_definitions
这个目录包含了实现测试场景描述的步骤文件;
hello_cucumber.rb
这个文件包含对应的测试场景的实现代码,这个步骤文件取决于你使用的什么语言,我这里是使用的ruby;
1.1.3.2代码实现
代码主要是包含在hello_cucumber.feature和hello_cucumber.rb文件中:
hello_cucumber.feature
这里我们主要描述这样一个场景,以平常一个登陆系统来做为例子吧。在测试中的话,首先会有对这个登陆系统的描述和一些基本的需求。主要是作为一个登陆系统的使用者,希望登陆系统的运作正常。正常的使用中,一个登陆场景如下:
前置条件:进入到登陆页面
事件:在用户名输入框输入正确的用户名,在密码框输入正确的密码,点击确定
预期结果:成功登陆
这是一个比较简单的测试用例,看看在cucumber中是如何实现它的。
首先我们先要将这个用例转换成cucumber所知道的描述语言,这部分描述是在feature文件中来进行实现的。代码如下:
代码中的Feature,Scenario,Given,And,When,Then都是cucumber中的关键字,Feature说明了这个测试场景的大体情况和一些基本的描述,一般由需求人员和测试人员去完成,Scenario指明了具体场景的标题,以及这个场景是用来干什么的。Given给出了具体的测试场景的条件,When给出了事件,And表示一个连接,Then是预期的结果。在一个feature文件中可以包含多个Scenario。
这个文件主要包含了feature文件中描述的场景的实现,代码如下:
在feature文件中的每一个步骤都需要一个相应的ruby代码来与之对应,如果没有对应的实现步骤,则在执行用例的时候会出现找不到步骤的异常。在feature寻找步骤的时候,是通过正则表达式来进行匹配的,step文件中的Given /^...$/会匹配feature文件中符合这个正则的步骤。这个匹配是会忽略Given When之类的关键字的。如果在匹配的时候feature中的步骤没有找到step中对应的实现,则才执行的时候会报出忽略这一个步骤的异常而导致用户不会通过的。
1.1.3.3运行用例
在命令行下进入到HelloWorld这个文件夹,然后输入命令
cucumber features/hello_cucumber.feature,结果如下:
1、成功搭建Cucumber。
2、完成一个Cucumber的经典案例并介绍相关关键字。
3、熟悉Cucumber的整个框架。