[java] Java Cucumber에서 화면 스크린샷 자동 캡처하기

Cucumber는 행위 주도 개발(Behavior Driven Development, BDD) 프로세스를 지원하기 위한 도구로 널리 사용됩니다. Cucumber를 사용하여 Java로 작성된 테스트 시나리오를 구현할 때, 때로는 테스트 중에 화면의 스크린샷을 캡처하여 문제를 분석하고 디버깅하는 것이 유용합니다. 이번 블로그에서는 Java Cucumber에서 화면 스크린샷을 자동으로 캡처하는 방법에 대해 알아보겠습니다.

1. 의존성 추가하기

우선, Maven 또는 Gradle을 사용하여 프로젝트에 다음 의존성을 추가해야 합니다.

Maven:

<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-java</artifactId>
    <version>6.10.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>5.0.3</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-java8</artifactId>
    <version>6.10.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit</artifactId>
    <version>6.10.2</version>
    <scope>test</scope>
</dependency>

Gradle:

testImplementation 'io.cucumber:cucumber-java:6.10.2'
testImplementation 'io.github.bonigarcia:webdrivermanager:5.0.3'
testImplementation 'io.cucumber:cucumber-java8:6.10.2'
testImplementation 'io.cucumber:cucumber-junit:6.10.2'

2. 스크린샷 자동 캡처를 위한 스텝 정의하기

Cucumber의 스텝(Step)은 테스트 시나리오의 각 단계를 나타냅니다. 화면 스크린샷을 자동으로 캡처하기 위해 다음과 같이 @AfterStep 애너테이션과 함께 스텝을 정의합니다.

import io.cucumber.java.AfterStep;
import io.cucumber.java.Scenario;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;

public class ScreenshotStepDefinitions {

    private WebDriver driver;

    public ScreenshotStepDefinitions(WebDriver driver) {
        this.driver = driver;
    }

    @AfterStep
    public void takeScreenshot(Scenario scenario) {
        final byte[] screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
        scenario.attach(screenshot, "image/png", "Screenshot");
    }
}

위의 코드는 @AfterStep 애너테이션이 붙은 takeScreenshot() 메소드를 포함하는 ScreenshotStepDefinitions 클래스를 정의합니다. 이 메소드는 매 단계가 실행된 후에 화면을 캡처하여 스크린샷을 시나리오에 첨부합니다.

3. Cucumber 설정하기

Cucumber의 실행 환경을 구성하기 위해 다음과 같이 cucumber.properties 파일을 프로젝트에 추가합니다.

# cucumber.properties

# Specify the package where the step definitions are located
glue=your.package.stepdefinitions

# Specify the path to the feature files
features=src/test/resources/features

# Enable plugin to generate HTML reports
plugin=html:target/cucumber-reports.html

your.package.stepdefinitions는 자신이 정의한 스텝의 패키지 경로로 변경해야 합니다.

4. 테스트 실행하기

이제 화면 스크린샷 자동 캡처가 정상적으로 동작하는지 확인하기 위해 Cucumber를 실행합니다. Maven 또는 Gradle을 사용하여 테스트를 실행합니다.

Maven:

mvn test

Gradle:

gradle test

테스트 실행이 완료되면 target/cucumber-reports.html 경로에 HTML 형식의 테스트 리포트가 생성됩니다. 이 리포트를 열어 시나리오당 하나의 스크린샷이 잘 첨부되어 있는지 확인할 수 있습니다.

결론

Java Cucumber에서 화면 스크린샷을 자동으로 캡처하는 방법에 대해 알아보았습니다. 이를 통해 테스트 실행 중에 발생하는 UI 문제를 식별하고 디버깅하는 데 도움이 될 것입니다. Cucumber의 강력한 기능을 활용하여 BDD 프로세스를 더욱 효율적이고 생산적으로 만들 수 있습니다.