Cucumberテストを最初から書きます(二)Cucumber Test
9157 ワード
転載:https://yaowenjie.github.io/%E7%BC%96%E7%A8%8B%E7%9B%B8%E5%85%B3/cucumber-test-part-2
前のブログでは、簡単なSelenium Testを書く方法を紹介しています.次に、BDD(行動駆動開発)の考え方に合ったCucumber固有の言語に変換する方法を理解します.
最初のステップはbuildです.gradleファイル内のDependenciesに依存を追加するには、次の手順に従います.
もちろんjava 8でなければ、対応する他の依存に変えることもできます.その後、gradleのbuildコマンドを前のように実行し、依存の追加を完了します.
次に、前のブログで述べた手順をCucumberの言語、すなわちfeatureファイルに変換したいと思っているかもしれません.以下に示します.
simpleのような名前を付けることができます.test.feautureのようなファイルです.あなたが開発者でなくても、英語が分かれば、この話の意味がわかると信じています.削除base_flowのtag,および上の4行の記述,以下では自然言語によく似た言語で具体的な挙動を記述する.Feature,Scenario,Given,When,And,ThenはいずれもCucumberのfeatureファイルキーワードであることに注意してください.
ただしfeatureファイルが書かれているが実行できないため、javaコードに依存して上記のfeatureファイルの手順を具体的に実行する必要があります.したがって、上記の動作の実装を表すBaseStepというクラスを作成する必要があります.
ここではJava 8におけるLambda式の書き方を採用し,正則注入パラメータを用いていることがわかる.
これで簡単なCucumber Testの実装部分は完了しましたが、それらを実行するには、BaseFlowTestのような対応するテストクラスを書く必要があります.
featureファイルのパスと対応するfeatureファイルのtagを指定します.つまり、このテストを実行すると、対応するパスの下でtagがbase_になります.flowのfeatureファイルの内容ですが、このfeatureファイルはBaseStepというクラスに依存して指定したステップを具体的に実現します. IDEまたはgradleのtaskを使用してこのテスト(BaseFlowTest)を実行すると、前のブログと同じ結果が表示されます.異なる点は、より読み取り可能なファイルを維持することです.これは、多重化可能な操作が多数存在するテストにとって便利で有益です.
本文は入門レベルのCucumber作成指導にすぎず,多くの用法はあまり関連していない.具体的なコードは次のように参照できます. 本明細書のコード:https://github.com/Yaowenjie/Cucumber-Demo ブログの実際のテスト:https://github.com/Yaowenjie/yaowenjie.github.io/tree/master/cucumber-test
前文を受け取る.
前のブログでは、簡単なSelenium Testを書く方法を紹介しています.次に、BDD(行動駆動開発)の考え方に合ったCucumber固有の言語に変換する方法を理解します.
依存の追加
最初のステップはbuildです.gradleファイル内のDependenciesに依存を追加するには、次の手順に従います.
compile('info.cukes:cucumber-java8:1.2.4')
compile('info.cukes:cucumber-junit:1.2.4')
もちろんjava 8でなければ、対応する他の依存に変えることもできます.その後、gradleのbuildコマンドを前のように実行し、依存の追加を完了します.
Featureファイルの作成
次に、前のブログで述べた手順をCucumberの言語、すなわちfeatureファイルに変換したいと思っているかもしれません.以下に示します.
@base_flow
Feature: This is a simple test using Cucumber.
Scenario:
Given I enter my blog address "https://yaowenjie.github.io" 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のようなファイルです.あなたが開発者でなくても、英語が分かれば、この話の意味がわかると信じています.削除base_flowのtag,および上の4行の記述,以下では自然言語によく似た言語で具体的な挙動を記述する.Feature,Scenario,Given,When,And,ThenはいずれもCucumberのfeatureファイルキーワードであることに注意してください.
実装とテストの作成
ただしfeatureファイルが書かれているが実行できないため、javaコードに依存して上記のfeatureファイルの手順を具体的に実行する必要があります.したがって、上記の動作の実装を表すBaseStepというクラスを作成する必要があります.
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())); } }
ここではJava 8におけるLambda式の書き方を採用し,正則注入パラメータを用いていることがわかる.
:java 1.8.0.71 , :java.lang.IllegalArgumentException: Wrong type at constant pool index; 1.8.0.51 。
これで簡単なCucumber Testの実装部分は完了しましたが、それらを実行するには、BaseFlowTestのような対応するテストクラスを書く必要があります.
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ファイルのパスと対応するfeatureファイルのtagを指定します.つまり、このテストを実行すると、対応するパスの下でtagがbase_になります.flowのfeatureファイルの内容ですが、このfeatureファイルはBaseStepというクラスに依存して指定したステップを具体的に実現します. IDEまたはgradleのtaskを使用してこのテスト(BaseFlowTest)を実行すると、前のブログと同じ結果が表示されます.異なる点は、より読み取り可能なファイルを維持することです.これは、多重化可能な操作が多数存在するテストにとって便利で有益です.
まとめ
本文は入門レベルのCucumber作成指導にすぎず,多くの用法はあまり関連していない.具体的なコードは次のように参照できます.