cucumber測試框架

1.1 什麼是BDD(行爲驅動開發)
  首先了解一個概念,BDD(BehaviorDrivenDevelopment:行爲驅動開發)爲用戶提供了從 開發人員和客戶的需求建立測試腳本的機會。所以,開始時,開發人員,項目經理,質量保證,用戶驗收測試人員和產品全部者(股東)都齊聚一堂,集思廣益,討論應該傳遞哪些測試場景,以便成功調用此軟件/應用程序。這樣他們想出了一組測試場景。全部這些測試腳本都是簡單的語言,因此它也能夠服務於文檔。html

1.2 Cucumber 簡介
  Cucumber是一個測試框架。有人說,這個框架很是適合UI自動化測試,他不
僅能把用例中的測試步驟以很是友好的形式展示出來,並且可以很是靈活的構建場景。
  Cucumber 是一個可以理解用普通語言 描述的測試用例的行爲驅動開發(BDD)的自動化測試工具,用Ruby編寫,支持Java和·Net等多種開發語言。
  Cucumber可讓人們用近似天然的語言去描述Feature(什麼是Feature在後面有講述)和場景,根據Feature驅動開發。用做軟件技術人員和非技術之間驗收測試的橋樑。它是一個命令行工具。運行後,會執行features中的內容。feature中的step會調用stepdefinitions(Ruby代碼)能夠用標籤來組織場景支持40多種語言高質量集成Ruby。java

  優勢:
Cucumber支持不一樣的語言,例如Java、.net、Ruby
它充當業務與技術間橋樑的角色。能夠經過在純英文文本中建立一個測試用例來實現這一點。
它容許在不知道任何代碼的狀況下編寫測試腳本,它容許非程序員參與。
它以端到端測試框架爲目的
因爲簡單的測試腳本架構,Cucumber提供了代碼可重用性
1.3 Cucumber三大組成
  Cucumber有三個重要組成部分,Features、Step_definitions、Cucumber command ios

 



組件之間的工做原理如圖: 程序員

 


1.4 Features
  語法規則:
  基於Gherkin。Gherkin是一種簡單的英語文本語言,它有助於工具–Cucumber解釋和執行測試腳本。支持語言:# language: en (zh-CN)等
  Features文件必須以.features命名。包含title,多個scenarios,每一個scenario包含多個step。
  Step定義必須以關鍵字Given,When,Then,And開始。web

1.5 Step_definitions
  根據feature文件中定義的step編寫對應的測試代碼api

1.6 Cucumber command
  運行:*.feature文件。cucumber會分析feature文件中定義的step,而後去step - definitions尋找相匹配的step,執行step中的代碼。運行結果以html的形式保存,fail的狀況查看對應log日誌。在IDEA上能夠直接點擊測試類進行運行,具體會在後面的例子中進行說明。架構

1.7 Cucumber的開發過程
建立feature文件,包括feature,scenarios和step。
建立step_definitions。IDEA中可右擊自動建立。
cucumber –format progress。格式化輸出。可修改成html,xml等格式輸出。
添加斷言:
一個場景失敗,Cucumber將此場景標記失敗,轉去執行下一場景。
一個step失敗,會跳過這個scenario的其他step,從而終止這個scenario。
1.8 實踐
1.首先建立一個MAVEN 項目。
框架

 


  一路next直到建立完成。jvm

2. 在pom.xml 文件中添加所須要的依賴
<dependencies>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<scope>test</scope>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-jvm</artifactId>
<version>1.2.4</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.2.4</version>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<!--<version>2.9</version>-->
</dependency>
</dependencies>

3.在test目錄下建立resources目錄,並標記爲testResource目錄,在其下建立test.feature文件,並進行編寫。工具

Feature: Mernagria

1.Scenario: registe new pet
2.Given I am on the "new pet" page
3.And I click the "registe" button
4.Then I should go to the "register" page

對應傳統測試工具:

1.Feature:待測功能的名稱。
2.Description(可選):描述測試中的功能。
3.Scenario:什麼是測試場景。
4.When:爲了執行下一步驟,應該匹配的特定條件。
5.Then:若是知足WHEN中提到的條件,應該會發生什麼。

此時test.feature文件中會有提示,

4.建立feature文件對應的step定義類。
按住ALT+Enter,建立對應的java類,也就是step定義類文件,

獲得一個新的類以及對應的方法體。

。其中MyStepdefs是上一步自動生成的step定義類,其中的方法體則是根據前面test.feature文件中的第一句自動生成的,咱們也能夠一次性生成全部的對應方法,或者一步一步生成。最終結果以下 MyStepdefs.java 。

import cucumber.api.PendingException;
import cucumber.api.java.en.And;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;

/**
* @desc: XXXX
* @version:1.0.0
* @author:Ying
* @Date: 2018/8/6
*/
public class MyStepdefs {
@Given("^I am on the \"([^\"]*)\" page$")
public void iAmOnThePage(String arg0) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}

@And("^I click the \"([^\"]*)\" button$")
public void iClickTheButton(String arg0) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}

@Then("^I should go to the \"([^\"]*)\" page$")
public void iShouldGoToThePage(String arg0) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
}
5.建立測試啓動類。
在test/java路徑下 建立DemoRun java類,代碼以下:

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

/**
* @desc: XXXX
* @version:1.0.0
* @author:Ying
* @Date: 2018/8/6
*/
@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/resources")
public class DemoRun {
}
其中@RunWith註解就是指定運行的是黃光測試框架,@CucumberOptions則是指定對應的feature文件所在的位置,此處是src目錄下的test下的resources文件夾。
最終的文件結構以下:

右鍵運行DemoRun,獲得以下輸出:

從中看就是咱們的測試,一個Scenarios,三個Steps 一個掛起,2個跳過。

若是咱們把第一個step改成

@Given("^I am on the \"([^\"]*)\" page$")
public Boolean iAmOnThePage(String arg0) throws Throwable {
// Write code here that turns the phrase above into concrete actions
// throw new PendingException();
System.out.println("這是第一步");
return true;
}
再次運行,獲得以下結果

若3個都改成返回ture,則全爲pass。

最後還要說一點,除了能夠直接點擊DemoRun方法運行測試之外,咱們還能夠在test/java 路徑下新建一個目錄,好比run文件夾,而後在其中建立和前面MyStepdefs內容同樣的java類。建立完成後,右擊resources目錄下的test.feature文件,選擇」Create featuer test」,以下圖所示

注意,在Glue中填寫Step定義類的路徑,此處爲run文件夾。建立完成後點擊運行

效果與前面的直接點擊DemoRun同樣。

至此,咱們的第一個小Demo已經跑起來了。下一期會講述如何將demo與咱們的web項目聯繫起來。

參考:https://www.jianshu.com/p/b934ce61c9dc
參考:https://blog.csdn.net/henni_719/article/details/53586051
參考:https://blog.csdn.net/zhanlurbh/article/details/51377907
————————————————
版權聲明:本文爲CSDN博主「ying105525」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處連接及本聲明。
原文連接:https://blog.csdn.net/u010867670/article/details/81459923

原文出處:https://www.cnblogs.com/jay-wu/p/11398552.html

相關文章
相關標籤/搜索