天天看點

行為驅動:Cucumber (三) - - Cucumber簡單操作執行個體

場景(Scenarios)

場景是Cucumber結構的核心之一。每個場景都以關鍵字“Scenario:”(或本地化一)開頭,後面是可選的場景标題。每個Feature可以有一個或多個場景,每個場景由一個或多個步驟組成。一個非常簡單的場景示例可以是:

Scenario:驗證幫助功能。給定使用者導航到Facebook。當使用者單擊幫助時,将打開幫助頁面。

考慮一種情況,其中我們需要不止一次地執行測試場景。假設,我們需要確定登入功能适用于所有類型的訂閱使用者。這需要多次執行登入功能場景。複制粘貼相同的步驟為了隻重新執行代碼,似乎不是一個聰明的主意。為此,Gherkin提供了一個更多的結構,這是場景概要。

Scenario Outline: 場景大綱類似于場景結構;唯一的差別是提供多個輸入。從下面的示例中可以看出,測試用例保持不變,不可重複。在底部,我們為變量“Username”和“Password”提供了多個輸入值。運作實際測試時,Cucumber将用提供的輸入值替換變量,它将執行測試。一旦執行了pass-1,測試将使用另一個輸入值重新運作第二次疊代。這樣的變量或占位符可以用“<>”表示,同時用gherkin語句提及。

例如:ScenarioOutline:一個社交網站的登入功能。将用于引導到Facebook。當使用者輸入使用者名:<username>,密碼:<password>,這時登入成功。

參數清單如下:

行為驅動:Cucumber (三) - - Cucumber簡單操作執行個體

有一些提示和技巧來巧妙地定義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

示例:

行為驅動:Cucumber (三) - - Cucumber簡單操作執行個體

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”運作即可

行為驅動:Cucumber (三) - - Cucumber簡單操作執行個體

參考連結:https://blog.csdn.net/henni_719/article/details/53608144

繼續閱讀