[java] Java Cucumber에서 태그 기반 테스트 실행하기

Cucumber는 BDD(Behavior Driven Development) 프레임워크로, 비즈니스 요구사항을 스펙화한 feature 파일과 해당 스펙에 대한 테스트를 자바 코드로 작성하는 것을 지원합니다. Cucumber는 태그를 사용하여 특정 테스트만 실행하거나 제외할 수 있는 유용한 기능을 제공합니다. 이번 글에서는 Java Cucumber에서 태그 기반으로 테스트를 실행하는 방법에 대해 알아보겠습니다.

1. 태그 사용하기

Cucumber에서는 테스트를 실행할 때 각 스펙(feature) 파일이나 특정 테스트 시나리오(scenario)에 태그를 지정할 수 있습니다. 태그는 @ 기호를 사용하여 지정하며, 여러 개의 태그를 지정할 수도 있습니다. 예를 들어, 아래와 같은 형식으로 태그를 사용할 수 있습니다.

@smoke
Feature: Login Feature
  ...

@smoke @sanity
@regression
Scenario: Successful login with valid credentials
  ...

위의 예시에서는 @smoke, @sanity, @regression 등의 태그를 사용하여 각 피처와 시나리오에 태그를 지정하고 있습니다.

2. 특정 태그를 가진 테스트 실행하기

Java Cucumber에서는 @CucumberOptions 어노테이션을 사용하여 태그를 기반으로 테스트를 실행할 수 있습니다. @CucumberOptions 어노테이션에 tags 속성을 설정하여 원하는 태그를 지정할 수 있습니다. 아래 예시를 참고해주세요.

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

@RunWith(Cucumber.class)
@CucumberOptions(
  features = "src/test/features",
  glue = "steps",
  tags = "@smoke"
)
public class TestRunner {
  // ...
}

위의 예시에서는 tags 속성에 @smoke라는 태그를 지정하였습니다. 이렇게 설정하면 @smoke 태그를 가진 모든 테스트 시나리오가 실행됩니다.

3. 특정 태그를 가진 테스트 제외하기

Java Cucumber에서는 tags 속성에 ~ 기호를 사용하여 특정 태그를 가진 테스트를 제외할 수도 있습니다. 아래 예시를 확인해주세요.

@RunWith(Cucumber.class)
@CucumberOptions(
  features = "src/test/features",
  glue = "steps",
  tags = "@smoke and not @regression"
)
public class TestRunner {
  // ...
}

위의 예시에서는 @smoke 태그를 가지면서 @regression 태그를 가지지 않는 테스트 시나리오만 실행됩니다.

4. 여러 개의 태그로 테스트 실행하기

Java Cucumber에서는 tags 속성에 여러 개의 태그를 지정하여 테스트를 실행할 수도 있습니다. 태그는 ,로 구분하면 됩니다. 아래 예시를 참고해주세요.

@RunWith(Cucumber.class)
@CucumberOptions(
  features = "src/test/features",
  glue = "steps",
  tags = "@smoke, @sanity"
)
public class TestRunner {
  // ...
}

위의 예시에서는 @smoke 태그 또는 @sanity 태그를 가지는 테스트 시나리오가 실행됩니다.

결론

Java Cucumber에서 태그를 사용하여 특정 테스트 시나리오를 선택적으로 실행하거나 제외하는 것은 매우 유용한 기능입니다. 태그를 활용하여 테스트 실행을 효과적으로 제어할 수 있습니다. Java Cucumber를 사용하는 개발자라면 태그 기반 테스트 실행을 꼭 익혀두시기를 추천합니다.

참고 자료