場景(Scenarios)
場景是Cucumber結構的核心之一。每個場景都以關鍵字“Scenario:”(或本地化一)開頭,后面是可選的場景標題。每個Feature可以有一個或多個場景,每個場景由一個或多個步驟組成。一個非常簡單的場景示例可以是:
Scenario:驗證幫助功能。給定用戶導航到Facebook。當用戶單擊幫助時,將打開幫助頁面。
考慮一種情況,其中我們需要不止一次地執行測試場景。假設,我們需要確保登錄功能適用於所有類型的訂閱用戶。這需要多次執行登錄功能場景。復制粘貼相同的步驟為了只重新執行代碼,似乎不是一個聰明的主意。為此,Gherkin提供了一個更多的結構,這是場景概要。
Scenario Outline: 場景大綱類似於場景結構;唯一的區別是提供多個輸入。從下面的示例中可以看出,測試用例保持不變,不可重復。在底部,我們為變量“Username”和“Password”提供了多個輸入值。運行實際測試時,Cucumber將用提供的輸入值替換變量,它將執行測試。一旦執行了pass-1,測試將使用另一個輸入值重新運行第二次迭代。這樣的變量或占位符可以用“<>”表示,同時用gherkin語句提及。
例如:ScenarioOutline:一個社交網站的登錄功能。將用於引導到Facebook。當用戶輸入用戶名:<username>,密碼:<password>,這時登錄成功。
參數列表如下:

有一些提示和技巧來巧妙地定義Cucumber場景:
1. 每個步驟應該清楚地定義,以便它不會給讀者造成任何混亂。
2. 不要重復測試場景,如果需要使用場景大綱來實現重復。
3. 以一種方式開發測試步驟,它可以在多個場景和場景大綱中使用。
4. 盡可能保持每個步驟完全獨立。例如:“給定用戶已登錄”。這可以分為兩個步驟:輸入用戶名、點擊登錄。
附注(Annotations)
附注是預定義的文本,其具有特定的含義。 它讓編譯器/解釋器知道,應該在執行時做什么。Cucumber有以下幾個附注。
Given
它描述了要執行的測試的先決條件。示例:GIVEN I am a Facebook user
When
它定義任何測試場景執行的觸發點。示例:WHEN I enter "<username>"
Then
Then保存要執行的測試的預期結果。示例:THEN loginshould be successful
And
它提供任何兩個語句之間的邏輯AND條件。AND可以與GIVEN、WHEN和THEN語句結合使用。示例:WHEN I enter my "<username>" AND Ienter my "<password>"
But
它表示任何兩個語句之間的邏輯或條件。But可以與GIVEN、WHEN和THEN語句結合使用。示例:THEN login should be successful.BUT home page should not be missing
Scenario
關於測試下的場景的詳細信息需要在關鍵字“Scenario:”之后捕獲。示例:
Scenario:
GIVEN I am aFacebook user
WHEN I enter my
AND I enter my
THEN loginshould be successful.
BUT home pageshould not be missing.
Scenario Outline
Scenario Outline: Login functionality for a socialnetworking site.
Givenuser navigates to Facebook
WhenI enter Username as "<username>"
AndPassword as "<password>"
Thenlogin should be unsuccessful
示例:

Background
Background通常具有在每個場景運行之前要設置什么的指令。但是,它在“Before”hook之后執行。因此,當我們想要設置Web瀏覽器或者我們想要建立數據庫連接時,這時最佳的運用代碼的方式。示例:
Background:
Go to Facebook home page.
場景實例
Step_1:創建一個名為:parm.feature的feature文件。創建步驟,在src\test\resources\feature路徑下,創建parm.feature,然后輸入文件名:parm.feature,打開文件,填寫如下信息到文件,並保存:
Feature: 360影視登錄頁面參數化登錄功能 #怎樣實現重復輸入賬號密碼操作的步驟 Background: 用戶打開360影視首頁 Given 用戶正停留在360影視登錄頁 #輸入賬號密碼a1/a1 Scenario: When 用戶輸入用戶名 "a1" And 用戶輸入密碼 "a1" Then 登錄失敗,提示手機號不合法 #輸入賬號密碼a2/a2 Scenario: When 用戶輸入用戶名 "a2" And 用戶輸入密碼 "a2" Then 登錄失敗,提示手機號不合法 #輸入賬號密碼a3/a3 Scenario: When 用戶輸入用戶名 "a3" And 用戶輸入密碼 "a3" Then 登錄失敗,提示手機號不合法
Step_2:創建一個step定義文件。創建步驟,創建一個類ParamDemo,java
ParamDemo.java
package com.cucumber.demo; import cucumber.api.java.en.Given; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; import org.junit.Assert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class ParamDemo { WebDriver driver; @Given("^用戶正停留在360影視登錄頁$") public void goToCsdn() { driver = new ChromeDriver(); driver.navigate().to("https://i.360kan.com/login"); driver.manage().window().maximize(); } @When("^用戶輸入用戶名 \"(.*)\"$") public void enterUsername(String arg1) { driver.findElement(By.name("loginname")).sendKeys(arg1); } @When("^用戶輸入密碼 \"(.*)\"$") public void enterPassword(String arg1) { driver.findElement(By.name("loginpassword")).sendKeys(arg1); driver.findElement(By.linkText("立即登錄")).click(); } @Then("^登錄失敗,提示手機號不合法$") public void checkFail() { String msg=driver.findElement(By.xpath("//p[@class='b-signin-error js-b-signin-error error-2']")).getText(); Assert.assertEquals("輸入手機號不合法",msg); driver.close(); } }
Step_3:創建一個runner 類文件。創建步驟,創建執行文件RunCukesTest.java
import cucumber.api.CucumberOptions; import cucumber.api.junit.Cucumber; import org.junit.runner.RunWith; @RunWith(Cucumber.class) @CucumberOptions( features = {"src/test/resources/feature/"}, format = {"pretty", "html:target/cucumber", "json:target/cucumber.json"}, glue = {"com.cucumber"} ) public class RunCukesTest { }
Step_4:運行test的選項:選擇RunCukesTest.java,右擊選擇“Run as”運行即可

參考鏈接:https://blog.csdn.net/henni_719/article/details/53608144
