一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

從頭寫一個(gè)Cucumber測(cè)試(二) Cucumber Test

 huowufenghuang 2018-09-05

轉(zhuǎn)載:https://yaowenjie./%E7%BC%96%E7%A8%8B%E7%9B%B8%E5%85%B3/cucumber-test-part-2

承接上文

??前一篇博客介紹了如何寫一個(gè)簡單的Selenium Test,接下來你將會(huì)了解如何將其轉(zhuǎn)化更符合BDD(行為驅(qū)動(dòng)開發(fā))思想的Cucumber專有語言。

添加依賴

??第一步還是要在 build.gradle 文件內(nèi)的Dependencies內(nèi)添加相應(yīng)的依賴:

compile('info.cukes:cucumber-java8:1.2.4')
compile('info.cukes:cucumber-junit:1.2.4')

??當(dāng)然,如果你用的不是java8,也可以換成對(duì)應(yīng)的其他依賴。然后像之前一樣,執(zhí)行g(shù)radle的build指令,完成添加依賴。

編寫Feature文件

??接下來,你可能就會(huì)想著把上一篇博客提到的步驟轉(zhuǎn)化為Cucumber的語言,也就是feature文件,如下所示:

@base_flow
Feature: This is a simple test using Cucumber.

  Scenario:
    Given I enter my blog address "https://yaowenjie." and go to Home page
    # Search Button Feature:
    When I click the search button
    And I enter "PowerShell" in the input field
    And I click the first result of search
    Then I go to the article page with title containing "PowerShell"

??你可以給它命名為諸如 simple_test.feauture 這樣的文件。相信即便你不是開發(fā)人員,只要你懂英文,你就明白這段話的意思。除去base_flow的tag,以及上面的四行描述,下面用和自然語言很相似的語言描述了具體的行為。注意,其中的Feature, Scenario, Given, When, And, Then都是Cucumber的feature文件關(guān)鍵字。

編寫具體實(shí)現(xiàn)和測(cè)試

??但是寫好了feature文件,它卻并不能執(zhí)行,所以我們還得依賴java代碼來具體執(zhí)行上述feature文件中的那些步驟。所以需要編寫一個(gè)名為BaseSteps的類,用于表示上述行為的實(shí)現(xiàn):

package com.wenjie;

import cucumber.api.java8.En;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.openqa.selenium.support.PageFactory.initElements;

public class BaseSteps implements En {
    private WebDriver driver = new FirefoxDriver();
    private BlogPage blogPage = new BlogPage();

    public BaseSteps() {
        blogPage = initElements(driver, BlogPage.class);

        Given("^I enter my blog address \"([^\"]*)\" and go to Home page$",
            (String url) -> { driver.get(url);}
        );

        When("^I click the search button$", () -> {
            blogPage.clickSearchButton();
        });

        And("^I enter \"([^\"]*)\" in the input field$", (String keyword) -> {
            blogPage.inputSearchWording(keyword);
        });

        And("^I click the first result of search$", () -> {
            blogPage.clickFirstResultOfSearch();
        });

        Then("^I go to the article page with title containing \"([^\"]*)\"$",
          (String keyword) -> {
            assertContainsIngoreCase(blogPage.getArticleTitle(), keyword);
        });
    }

    public static void assertContainsIngoreCase(String set, String subset) {
        assertThat(set.toLowerCase(), containsString(subset.toLowerCase()));
    }
}

??可以看出來,我們這里采用了Java8中Lambda表達(dá)式的寫法,并通過正則注入?yún)?shù)。

注意:java版本為1.8.0.71時(shí),這種用法將會(huì)報(bào)這樣的錯(cuò)誤:java.lang.IllegalArgumentException: Wrong type at constant pool index;換成1.8.0.51后問題消失。

??至此,我們這個(gè)簡單的Cucumber Test的實(shí)現(xiàn)部分就完成了,但是要執(zhí)行它們,通常我們需要寫一個(gè)對(duì)應(yīng)的測(cè)試類,比如說BaseFlowTest這個(gè)類:

package com.wenjie;

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;

@RunWith(Cucumber.class)
@CucumberOptions(
        features = {"src/test/resources/features"},
        tags = {"@base_flow"}
)
public class BaseFlowTest {
}

??它指定了feature文件路徑和對(duì)應(yīng)的feature文件的tag,也就是說執(zhí)行這個(gè)測(cè)試,就會(huì)執(zhí)行對(duì)應(yīng)路徑下tag為base_flow的feature文件內(nèi)容,而這個(gè)feature文件則依賴BaseSteps這個(gè)類來具體實(shí)現(xiàn)它指定的步驟。
??你可以通過IDE或者使用gradle的task來執(zhí)行這個(gè)測(cè)試(BaseFlowTest),你會(huì)看到和上一篇博客一樣的結(jié)果。不同的是,你維護(hù)的一份更加可讀的文件,這對(duì)于存在大量 可復(fù)用 操作的測(cè)試來說十分便利、有益。

總結(jié)

??本文只是入門級(jí)別的Cucumber編寫指導(dǎo),很多用法并沒有過多涉及。具體代碼可以參考:

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    中文字幕亚洲精品人妻| 欧美午夜不卡在线观看| 熟女一区二区三区国产| 国产精品午夜福利免费阅读| 夫妻性生活动态图视频| 日韩成人动作片在线观看| 欧美国产日韩在线综合| 亚洲欧美日本视频一区二区| 亚洲国产av在线视频| 午夜国产精品国自产拍av| 日韩特级黄片免费观看| 大香蕉久久精品一区二区字幕 | 日本久久精品在线观看| 国产在线不卡中文字幕| 日本欧美一区二区三区就| 少妇激情在线免费观看| 美女极度色诱视频在线观看| 欧美激情视频一区二区三区| 亚洲伦片免费偷拍一区| 欧美一区二区三区99| 男女激情视频在线免费观看| 激情内射日本一区二区三区| 一区二区三区欧美高清| 中文字幕一区二区三区中文| 五月激情五月天综合网| 成年人视频日本大香蕉久久| 色哟哟精品一区二区三区| 日韩中文无线码在线视频| 成人午夜在线视频观看| 久久精品少妇内射毛片| 亚洲欧美日产综合在线网| 亚洲精品一区二区三区免| 欧美日韩综合在线第一页| 国产午夜精品久久福利| 大尺度激情福利视频在线观看| 丰满人妻熟妇乱又伦精另类视频| 久久99亚洲小姐精品综合| 精品午夜福利无人区乱码| 亚洲国产欧美精品久久| 富婆又大又白又丰满又紧又硬| 国产极品粉嫩尤物一区二区|