1. 概要

このチュートリアルでは、Cucumberタグ式を使用して、テストの実行とそれに関連するセットアップを操作する方法を説明します。

APIテストとUIテストを分離し、それぞれに対して実行する構成ステップを制御する方法を見ていきます。

2. UIおよびAPIコンポーネントを使用したアプリケーション

サンプルアプリケーションには、値の範囲の間でランダムな数値を生成するためのシンプルなUIがあります。

また、HTTPステータスコードを返す/ statusRESTエンドポイントもあります。 これらの機能の両方を、以下を使用して受け入れテストでカバーします。 キュウリ JUnit5。 

cucumberがJunit5で動作するには、 pomの依存関係としてcucumber–junit-platform-engineを宣言する必要があります。

<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit-platform-engine</artifactId>
    <version>6.10.3</version>
</dependency>

3. きゅうりのタグと条件付きフック

きゅうりのタグは、シナリオをグループ化するのに役立ちます。 UIとAPIをテストするための要件が異なるとしましょう。 たとえば、UIコンポーネントをテストするためにブラウザを起動する必要がありますが、 /statusエンドポイントを呼び出す場合は必要ありません。 必要なのは、実行するステップとタイミングを把握する方法です。 きゅうりのタグはこれを助けることができます。

4. UIテスト

まず、機能またはシナリオをタグでグループ化します。 ここでは、UI機能を@uiタグでマークします。

@ui
Feature: UI - Random Number Generator

  Scenario: Successfully generate a random number
    Given we are expecting a random number between min and max
    And I am on random-number-generator page
    When I enter min 1
    And I enter max 10
    And I press Generate button
    Then I should receive a random number between 1 and 10

次に、これらのタグに基づいて、条件付きフックを使用して、この機能グループに対して実行するものを操作できます。  これは、ScenearioHooksの関連するタグで注釈が付けられた@Beforeメソッドと@Afterメソッドを別々に使用して行います。

@Before("@ui")
public void setupForUI() {
    uiContext.getWebDriver();
}
@After("@ui")
public void tearDownForUi(Scenario scenario) throws IOException {
    uiContext.getReport().write(scenario);
    uiContext.getReport().captureScreenShot(scenario, uiContext.getWebDriver());
    uiContext.getWebDriver().quit();
}

5. APIテスト

UIテストと同様に、API機能に@apiタグを付けることができます。

@api
Feature: Health check

  Scenario: Should have a working health check
    When I make a GET call on /status
    Then I should receive 200 response status code
    And should receive a non-empty body

@Beforeメソッドと@Afterメソッドにも@apiタグが付いています。

@Before("@api")
public void setupForApi() {
    RestAssuredMockMvc.mockMvc(mvc);
    RestAssuredMockMvc.config = RestAssuredMockMvc.config()
      .logConfig(new LogConfig(apiContext.getReport().getRestLogPrintStream(), true));
}

@After("@api")
public void tearDownForApi(Scenario scenario) throws IOException {
    apiContext.getReport().write(scenario);
}

AcceptanceTestRunnerIT、を実行すると、関連するテストに対して適切なセットアップとティアダウンの手順が実行されていることがわかります。

6. 結論

この記事では、Cucumberタグと条件付きフックを使用して、さまざまなテストセットの実行とそのセットアップ/ティアダウン命令を制御する方法を示しました。

いつものように、この記事のコードはGitHubから入手できます。