行為驅動:Cucumber + Selenium + Java(一) - Cucumber簡單操作實例


場景(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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM