[java] TestNG와 JIRA의 통합

TestNG와 JIRA는 모두 소프트웨어 개발 및 테스트 프로세스를 관리하기 위해 사용되는 인기있는 도구입니다. TestNG는 Java 기반의 테스트 프레임워크로써, 테스트 실행, 보고서 생성, 파라미터화된 테스트 등 많은 기능을 제공합니다. JIRA는 이슈 추적 및 프로젝트 관리를 위해 사용되며, 버그 및 개발 작업 등을 효과적으로 관리할 수 있습니다.

이번 블로그 포스트에서는 TestNG와 JIRA를 통합하여 테스트 실행 및 이슈 관리를 효율적으로 처리하는 방법에 대해 알아보겠습니다.

1. JIRA 이슈 생성하기

먼저, TestNG에서 발생하는 테스트 실패 또는 버그를 JIRA에 자동으로 생성하는 기능을 구현해보겠습니다. 이를 위해 JIRA API를 사용하여 JIRA에 요청을 보내고 이슈를 생성합니다. 다음은 Java에서 JIRA API를 사용하여 이슈를 생성하는 예제 코드입니다.

import com.atlassian.jira.rest.client.JiraRestClient;
import com.atlassian.jira.rest.client.JiraRestClientFactory;
import com.atlassian.jira.rest.client.domain.BasicProject;
import com.atlassian.jira.rest.client.domain.Issue;
import com.atlassian.util.concurrent.Promise;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.ITestResult;
import org.testng.annotations.*;

import java.net.URI;
import java.util.concurrent.ExecutionException;

public class MyTest {

    private JiraRestClient jiraClient;

    @BeforeClass
    public void setup() throws ExecutionException, InterruptedException {
        ChromeDriver driver = new ChromeDriver();
        // JIRA 로그인
        // ...
        String jiraUrl = "https://your-jira-url.com";
        JiraRestClientFactory factory = new JiraRestClientFactory();
        URI uri = URI.create(jiraUrl);
        jiraClient = factory.createWithBasicHttpAuthentication(uri, "username", "password");
    }

    @AfterClass
    public void tearDown() throws ExecutionException, InterruptedException {
        jiraClient.close();
    }

    @AfterMethod
    public void recordFailure(ITestResult result) throws ExecutionException, InterruptedException {
        if (result.getStatus() == ITestResult.FAILURE) {
            String testName = result.getName();
            String failedTestScreenshot = captureScreenshot(testName);
            // 이슈를 생성하는 요청 보내기
            BasicProject project = jiraClient.getProjectClient().getProject("YOUR-PROJECT-KEY").claim();
            Issue issue = jiraClient.getIssueClient().createIssue(project.getKey(), "Bug")
                    .field("summary", "Test failure: " + testName)
                    .field("description", "Test failed with the following error:\n" + result.getThrowable().getMessage())
                    .field("priority", "High")
                    .execute()
                    .claim();
            // 생성된 이슈 정보 출력
            System.out.println("Created JIRA issue: " + issue.getKey());
        }
    }

    // 스크린샷 캡처 로직
    private String captureScreenshot(String testName) {
        // ...
        return "screenshot.png";
    }

    @Test
    public void myTest() {
        // 테스트 코드
        // ...
    }
}

위의 예제 코드에서는 JIRA API를 사용하여 JIRA에 로그인한 후, BeforeClass 메서드에서 JIRA 클라이언트를 초기화합니다. AfterMethod 메서드에서는 테스트 실패가 발생한 경우 이슈를 생성하고, AfterClass 메서드에서 JIRA 클라이언트를 닫습니다.

2. JIRA 이슈 상태 업데이트하기

테스트 실행 중에는 TestNG의 리스너를 사용하여 JIRA 이슈의 상태를 업데이트할 수도 있습니다. 이를 통해 테스트 진행 상황을 JIRA에 반영할 수 있습니다. 다음은 이슈 상태를 업데이트하는 예제 코드입니다.

import org.testng.ITestResult;
import org.testng.TestListenerAdapter;

public class JiraStatusUpdater extends TestListenerAdapter {

    private JiraRestClient jiraClient;

    @Override
    public void onTestStart(ITestResult result) {
        String testName = result.getName();
        // 테스트가 시작되면 이슈 상태를 "In Progress"로 업데이트
        // ...
        System.out.println("Updated JIRA issue status to In Progress for test: " + testName);
    }

    @Override
    public void onTestSuccess(ITestResult result) {
        String testName = result.getName();
        // 테스트가 성공하면 이슈 상태를 "Done"으로 업데이트
        // ...
        System.out.println("Updated JIRA issue status to Done for test: " + testName);
    }

    @Override
    public void onTestFailure(ITestResult result) {
        String testName = result.getName();
        // 테스트가 실패하면 이슈 상태를 "To Do"로 업데이트
        // ...
        System.out.println("Updated JIRA issue status to To Do for test: " + testName);
    }

    // ...
}

위의 예제 코드에서는 TestListenerAdapter를 상속하여 TestNG의 리스너를 구현합니다. 이슈가 이동해야할 상태에 해당하는 작업을 구현하고, 테스트 메서드의 시작, 성공, 실패에 따라 JIRA 이슈의 상태를 업데이트합니다.

결론

TestNG와 JIRA를 통합하여 테스트 실행과 이슈 관리를 효율적으로 처리할 수 있습니다. 이를 통해 개발 및 테스트 팀은 테스트 결과를 JIRA에서 확인하고, 이슈 추적 및 관리를 원활하게 수행할 수 있습니다. TestNG의 강력한 기능과 JIRA의 프로젝트 관리 기능을 결합하여 소프트웨어 개발 프로세스를 더욱 효율적으로 수행할 수 있습니다.