場景(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影視登入頁#34;)
public void goToCsdn() {
driver = new ChromeDriver();
driver.navigate().to("https://i.360kan.com/login");
driver.manage().window().maximize();
}
@When("^使用者輸入使用者名 \"(.*)\"#34;)
public void enterUsername(String arg1) {
driver.findElement(By.name("loginname")).sendKeys(arg1);
}
@When("^使用者輸入密碼 \"(.*)\"#34;)
public void enterPassword(String arg1) {
driver.findElement(By.name("loginpassword")).sendKeys(arg1);
driver.findElement(By.linkText("立即登入")).click();
}
@Then("^登入失敗,提示手機号不合法#34;)
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