Cucumber-hooks
キュウリ-フック
Cucumber hook を使用すると、コードワークフローをより適切に管理でき、コードの冗長性を削減できます。 これは目に見えないステップであり、シナリオやテストを実行できると言えます。
この概念をよりよく理解するために、機能ファイルとステップ定義ファイルの例を見てみましょう。
特定のステートメントで強調表示された部分は、実際にWebドライバーをセットアップし、Webドライバーセッションを終了する役割を果たします。 ですから、実際には「与えられた声明」の本質とは関係がなく、テストのセットアップのようなものです。 また、より広い視野で考えた場合、この機能のシナリオが複数ある場合、特定のステートメントごとにこのWebドライバーのセットアップとクリーンアップが実行されます。 論理的には、セットアップとクリーンアップを一度だけ実行するのが理にかなっています。
そのため、最適化をもたらすために、フックを利用できます。 多くの場合、「Before」フックと「After」フックの2種類のフックを使用します。 Before/Afterフック内で定義されたメソッド/関数/コードは、シナリオが成功または失敗した場合でも常に実行されます。
名前が示すように、フックは他のテストシナリオよりもかなり前に実行され、フックはすべてのシナリオを実行した後に実行されます。
フックは、ステップ定義ファイル内でのみ定義されます。
前後のフックの例を自動化しましょう。
- ステップ1 *-MavenプロジェクトをhookTestとして作成し、pom.xmlに必要な依存関係を追加します。
ステップ2 *- *src/test/java の下にhookTestという名前のJavaパッケージを作成する
ステップ3 *-パッケージの下に *hookTest.java という名前のステップ定義ファイルを作成します。
package hookTest;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import cucumber.annotation.en.Given;
import cucumber.annotation.en.Then;
import cucumber.annotation.en.When;
public class hookTest {
WebDriver driver = null;
@Before public void setUp(){
driver = new FirefoxDriver();
}
@Given("^user navigates to facebook$")
public void goToFacebook() {
driver.navigate().to("https://www.facebook.com/");
}
@When("^I enter Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$")
public void I_enter_Username_as_and_Password_as(String arg1, String arg2) {
driver.findElement(By.id("email")).sendKeys(arg1);
driver.findElement(By.id("pass")).sendKeys(arg2);
driver.findElement(By.id("u_0_v")).click();
}
@Then("^login should be unsuccessful$")
public void validateRelogin() {
if(driver.getCurrentUrl().equalsIgnoreCase(
"https://www.facebook.com/login.php?login_attempt=1&lwv=110")){
System.out.println("Test Pass");
} else {
System.out.println("Test Failed");
}
driver.close();
}
@After public void cleanUp(){
driver.close();
}
}
- ステップ4 *-パッケージの下に「hookTest.feature」という名前の機能ファイルを作成します。
機能-シナリオの概要。
シナリオ概要-フックテスト
特定のユーザーがFacebookに移動する
「<ユーザー名>」としてユーザー名を入力し、「<パスワード>」としてパスワードを入力すると
その後、ログインは失敗するはずです
例
| username | password |
| username1 | password1 |
- ステップ5 *-ランナークラスファイルを作成します。
- パッケージdataTable内にrunTest.javaとしてランナークラスを作成します(詳細な手順については、シナリオの概要セクションを参照してください)。
- 次のコードを書きます。
package hookTest;
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
public class runTest { }
- ファイルを保存してください。
- オプションを使用してテストを実行します-
- パッケージエクスプローラーからrunTest.javaファイルを選択します。
- 右クリックして、オプションとして実行を選択します。
- JUnitテストを選択します。
したがって、これを実行すると、実行のシーケンスは次のようになります。
- フックの前-テストを実行するためにwebdriverおよびその他の前提条件を設定します。
- 与えられた声明
- Whenステートメント
- Thenステートメント *フック後-Webdriverを閉じて、クリーンアッププロセスを実行します。
タグ付きフック
前後のフックを特定のタグのみで実行するかどうかを示すこともできます。* 例*-@Before( ‘@ Web’)。 タグ論理および/またはタグの同じ概念は、フックにも適用できます。 例-@Before(@ dev、@ wip)、@ Before(@ dev、〜@ wip)