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

相關文章
相關標籤/搜索