🐺

Gauge E2Eテストにおける setup

2024/08/17に公開

はじめに

E2Eテストのsetup方法について考える

※今回利用する環境はgagueです

https://gauge.org/index.html

setupの方法

大きく分けると今の所2つ

  • tagによる運用
  • stepによる運用

tagによる運用

gaugeではtagを設定できるため、tagを付与しテストに必要なデータをsetupする

specのイメージ

# Search Specification

The admin user must be able to search for available
products on the search page.

+ Tags: setup

* User must be logged in as "admin"
* Open the product search page

https://docs.gauge.org/writing-specifications?os=linux&language=javascript&ide=vscode

今回はsetupというタグで進めていきます。

実際にこのタグをどう運用するかは様々なやり方があるため
ここではタグ情報を取得して、pathとして利用する方法を記載していきます。
setup先はwiremockです。

実装イメージ

class SetupTest {
    @BeforeScenario(tags = ["setup"])
    fun setupMock(context: ExecutionContext) {
        // 導出したファイル群をWireMockに登録する
        ProductApiMock().reset()
        ProductApiMock().setup(setupPath)
    }
}

シナリオが実行される前にsetupというタグが付与されていると実行されるSetupTest関数

要するに、setupタグを付与すれば、テストに必要なセットアップをするタグです。

Stepによる運用

gaugeにはStepがあるため、Stepsetupする方法

specのイメージ

# Search Specification

The admin user must be able to search for available
products on the search page.

+ * Hoge DB setup
* User must be logged in as "admin"
* Open the product search page 

実装イメージ

@Step("Hoge DB setup")
    fun setupDB(path: String) {
        // 対象のデータを登録する実装
        HogeDB.insert(setupPath)
    }

所感

それぞれの運用をしてみた所感について

Tag運用の所感

前提として、タグによるsetupがチームとして浸透していれば特段困らない
一方でStepと違い、どこで何しているか探しにいくのが面倒な所ではある印象

Gauge tags

Step運用の所感

Stepで表現することで、簡単にsetup内容を確認しにいくことができる
tagとは違いStepで表現をする必要があり、tagよりパッとみた時わかりにくい感がある

個人的にはtagよりもStepによる運用が現状好みではある所
Stepの表現の仕方は工夫が必要ではあるが
やはりStepでどこで何しているかすぐに追うことができる点で
認知不可も低く何をするStepなのかわかりやすい。

CucumberなどはGiven,When,Thenと表現して仕様を落とし込めるため
今回のような悩みは起きづらいかもなと

Feature: Guess the word

  # The first example has two steps
  Scenario: Maker starts a game
    When the Maker starts a game
    Then the Maker waits for a Breaker to join

  # The second example has three steps
  Scenario: Breaker joins a game
    Given the Maker has started a game with the word "silky"
    When the Breaker joins the Maker's game
    Then the Breaker must guess a word with 5 characters

https://cucumber.io/docs/gherkin/reference/

ここは好みの部分もあると思うので
仕様書としてシンプルで自由度高めに書きたい場合はgaugeを利用することはオススメ

setupまとめ

今の所それぞれ所感をまとめると

  • 基本的には認知不可という観点以外は大きくメリデメは感じない
  • tag運用をする場合は、認知不可を下げるためにもチームでtagによるsetupを前提とする運用にした方が良い
  • Step運用をする場合は、setupの表現を工夫して運用をすべし

Discussion