cucumber 初探

BDD(Behavior Driven Development)是一个比较新鲜的词汇,(大概是吧,更多听到的是TDD); 以前在学习scala的时候,用过scalatest,其中的testcase再也不是test,而更可能是specification, 描述测试用例用什么样的输入获得什么样的输出,比java test要readable的多。今天看到了cucumber这个开发框架,它能够用来(用更人性化的语言)描述测试用例,能够重复使用测试方法,提供不一样的参数, 不只眼前一亮。java

cucumber能够支持java,scala,ruby等多种语言。我只会java,因此就学习了一下它在java中应该怎么使用。它的java的例子比较简单,不能完整的跟着作,因此google了一把,找到一个可行的例子(参考连接);另外在github上面有它本身的几个例子,不用多讲,反而比较好用;git

我所讲的例子是从参考例子中copy来,稍做整理;程序员

  1. 项目结构;github

2. dependence librariesapi

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-java8</artifactId>
        <version>1.2.2</version>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>1.2.2</version>
        <scope>test</scope>
    </dependency>

</dependencies>

3. 定义feature文件ruby

这里定义了一个feature,用来测试Library,定义了两个场景(Scanario): a, 先向Library加入3本书,而后从中按照时间范围搜出符合条件的书;b, 从一个空的library中搜索书籍; 除了前面的关键字,其余部分都是很容易被理解的内容,即便不是程序员也很容易明白要测试什么;框架

Scenario由输入(Given)和输出(Then),以及执行的操做(When)组成,这些分别和对应的测试方法对应;Cucumber会从这些可读的文本中,抽取出须要的参数,做为对应方法的输入参数;jvm

4. 定义测试步骤Step:学习

这个测试步骤能够根据不一样的测试Scenario被重复使用;测试

5. 定义Junit驱动程序:

package cucumber.learn.book;

import cucumber.api.CucumberOptions;
import org.junit.runner.RunWith;
import cucumber.api.junit.Cucumber;

/**
 * Created by senyuanwang on 15/5/20.
 */
@RunWith(Cucumber.class)
@CucumberOptions(plugin = {"pretty"})
public class BookSearchTest {
}

6. 测试一把

简单的使用,我以为它最好用得地方就是能够有一个很是readable的feature文件,这个能够做为程序员和测试,和需求,甚至是和用户直接沟通的文档;另一个优势就是step java文件能够被重复利用,且不须要写不少的测试用例去提供不一样的输入参数;


主页:https://cucumber.io/ 

参考:http://www.hascode.com/2014/12/bdd-testing-with-cucumber-java-and-junit/

git:  https://github.com/cucumber/cucumber-jvm