Cucumber读书笔记

使用Cucumber有一段时间了。最近又重读了一下《Cucumber:行为驱动开发指南》,有点想法,分享读书笔记在这。


一、什么是BDD


        首先谈一下行为驱动开发(behavior-driven development,BDD),与之对应的就是测试驱动开发(Test-Driven-Development TDD)。BDD相当于对TDD的扩展,它打破了TDD由外向内的模式。简而言之他提供了研发、测试、需求的团队都能读懂的实例。各个团队根据实例第一时间得到反馈,相较于TDD他的迭代速度更快。更适合当前敏捷开发的趋势。


二、Cucumber基本结构


        Cucumber框架主要分为业务层和技术层。分过面对业务人员和技术人员。下面用C#代码集成Cucumer插件举例。额外提一句Cucumber for .net 的名字是Specflow。


业务层:

Feature: Login                                          \\feature file
    In order to logon portal

@mytag                                                  \\tag
Scenario:(90.01) Login Portal                           \\Scenario
    Given Login into portal                             \\Step
    When Open menu "Menu | Main | Calendar | 2015"
    When Click on "New"

        每个Scenario由一系列的step组成,Cucumber会一一执行这些step。这些step支持简体中文、繁体中文、日文、韩文和英文在内的15种语言,定义是根据step具体执行内容定义。方便业务人员阅读。每个step相当于技术层提供的借口,具体实现方式由技术层实现。如果一个Scenario中所有的step都执行成功,该Scenario就会被标记为pass状态,反之为fail状态。多个Scenario构成Feature文件。Cucumber为每个Scenario提供tag方便对Scenario类型进行区分,也可作为标志位对不同Scenario进行差异化处理


技术层:

namespace Cucumber
{
    [Binding]
    public class Common
    {
        #region Login statements
        [Given(@"Login into portal")]                     \\通过正则表达式匹配
        public void login()                               \\Cucumber绑定对应step的方法
        {
            ObjectManager.CurrentPage.Login();            \\方法的具体实现
        }        
        
        [When(@"Open menu ""([^\""]*)""$")]
        public void openMenu(string menuPath)
        {
            Assert.IsTrue(ObjectManager.Menu.Open(menuPath), "can not open menu " + menuPath);
        }

        [When(@"Click on ""([^\""]*)""$")]
        public void ClickOnButton(string Label)
        {
            BLL.PageHelperFactory.Page.ClickOn(Label);
        }
        #endregion
    }
}

        技术层分为step definitions,support code, automation library三部分。后面两层即为具体实现。主要谈一下step definitions,Cucumber通过正则表达式匹配对应的step,这样大大增加的匹配的灵活性,我们同样可以在step中设置相应的参数。每个step前会添加Given, When的前置字符串,这些单词可以更好的树立step的结构,没有实际意义。正则表达式下面即为与之绑定的方法。每个step通过下面的方法实现。


三、Cucumber执行的具体流程


Cucumber执行具体流程:

        执行每个Cucumber程序集时,Cucumber会从要执行的feature文件的第一个Scenario的第一个Step依次开始执行。相应得step运行时,对应的step会在step definitions中找寻与之匹配的正则表达式,从而找到与之对应的方法,进而执行相应的功能。


Scenarios执行流程图:

       

        Scenarios的运行方式上图交代的很清楚,就不一一列举各种情况了。Cucumber框架用在B/S上的验收测试上已经很成熟。最近时间有点紧写的可能有些简略,有什么问题欢迎大家留言讨论。


版权声明:本文为crbrave原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。