行為驅動:Cucumber + Selenium + Java(二) - 第一個測試


在上一篇中,我們搭建好了Selenium + Cucumber + Java的自動化測試環境,這一篇我們就趕緊開始編寫我們的第一個BDD測試用例。

 

2.1 創建features

  我們在新建的java項目中,新建一個文件夾名為features,然后右鍵點擊該文件夾,新建一個名為test.feature的新文件。

  文件建好后,你會看到他呈現出與普通文本文件不同的樣式,並且自帶很多內容:

  

 

  這些內容實際是cucumber給我們提供的feature模板,我們按照這個模板寫出第一個測試用例。

  我們用自然語言,結合Given,When,And,Then這些關鍵字來編寫測試用例:

Feature: Test baidu search for selenium
	Search for selenium on baidu
	

@tag
  Scenario: Test Baidu search for selenium
    Given I navigate to baidu
    When I send keyword into searchbox
    And I click search button
    Then The correct search result is returned

  可以看到,這個用例就是用自然表述性語言撰寫的,具有很高的可讀性,不需要懂代碼也都能看明白這個用例測試的內容:就是去到百度,然后搜索關鍵字,判斷搜索是否成功。

  

2.2 創建runner

  這個用例既然是自然語言撰寫的,也就還暫時不能實現自動化執行,我們接下來還要編寫這個用例對應的實際selenium java代碼的實現過程,其實就是用java對我們的用例進行“翻譯”,好讓selenium能讀懂,並進行測試的執行。

  首先,在src目錄下新建package名為runner,然后新建一個java class名為cucumberRunner,這個類里面我們寫入如下代碼:

package Runner;

import org.junit.runner.RunWith;

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(features=("features"),glue=("stepDefinition"))
public class CucumberRunner {
  
}

  這個類主要起的作用實際上就是我們cucumber的執行入口,同時他定義了cucumber用例執行時的一些特性,比如CucumberOptions標簽里,features指定用例文件的目錄,glue則指定對應java翻譯代碼的位置。寫好這個類以后,我們可以馬上右鍵對他點擊,運行Run As -> JUnit Test。運行之后,系統輸出了一些日志:

從日志里面我們可以看到,系統提示:我們定義了4個測試步驟,但都沒有實現,下面我們馬上來實現這些步驟。

 

2.3 實現步驟定義

  在src目錄下新建stepDefinitions包,然后在包下新建一個java class名為TestBaidu,這個類里面我們就實現之前的feature里面定義的測試步驟。

我們輸入如下代碼:

package stepDefinitions;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;

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

public class TestBaidu {
    WebDriver driver;
    
    
    @Given("^I navigate to baidu$")
    public void i_navigate_to_baidu() throws Throwable {
        driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.manage().window().maximize();
        
        driver.get("http://www.baidu.com");
    }

    @When("^I send keyword into searchbox$")
    public void i_send_keyword_into_searchbox() throws Throwable {
        WebElement searchBox;
        
        searchBox = driver.findElement(By.id("kw"));
        searchBox.sendKeys("selenium");   
    }

    @When("^I click search button$")
    public void i_click_search_button() throws Throwable {
        WebElement searchButton;
        searchButton = driver.findElement(By.id("su"));
        searchButton.click();
    }

    @Then("^The correct search result is returned$")
    public void the_correct_search_result_is_returned() throws Throwable {
        WebElement searchResult;
        searchResult = driver.findElement(By.xpath(".//*[@id='container']/div[2]/div/div[2]/span"));
        Assert.assertTrue(searchResult.isDisplayed());
        
        Thread.sleep(2000);
        driver.quit();
    }
}

寫好以后,再次運行runner類,可以看到測試執行成功了:)

 

下一篇我們來使用tags對cucumber測試用例進行分組。


免責聲明!

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



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