IT/기타

젠킨스 + Junit (Maven, Gradle)

nyub 2025. 2. 25. 14:58
반응형

1. Junit

- Java 에서 독립된 단위테스트를 지원해주는 프레임워크
- 소프트웨어 테스트 도구로, 작성된 프로그램이 제대로 동작하는지 자동으로 확인해 주는 도구
- [개발자들이 코드를 직접 실행해서 결과를 하나하나 확인할 필요 없이, 미리 만들어둔 테스트 코드를 실행하면 JUnit이 자동으로 "이 코드가 제대로 작동하는지" 알려준다] 정도로 알고있으면 될듯 함

 

2. Setting (Maven)

2-1. 플러그인 설치

 

2-2. pom.xml 수정

기존 skiptest true > false로 변경

 

Junit 의존성

 

report 관련 플러그인

 

2-3. 파이프라인 수정

pipeline {
    agent any
    environment {
        registryCredential = 'ncr-token'
        imagename = 'gcsc/gcsc-user'
        dockerImage = ''
    }
    tools {
        maven 'maven'
        jdk 'jdk8'
    }
    stages {
        stage('java version') {
            steps {
                sh 'java -version'
            }
        } 
……..중략……..

 stage('Test') { 
// JUnit 테스트 실행
            steps {
                echo 'Running JUnit tests...'
                sh 'mvn test'
            }
        }
……..중략……..

 post {
        always {
            echo 'Publishing JUnit test results...'
            junit '**/target/surefire-reports/*.xml’ 
// JUnit 테스트 결과 보고
        }
    }
}

 

2-4. 테스트 JAVA 파일 생성

경로 : ~/src/test/java/

 

- 테스트 메소드에 JUnit 어노테이션(@Test)이 누락된 경우 실행되지 않습니다.

- Maven Surefire Plugin은 기본적으로 다음과 같은 규칙에 따라 테스트 클래스를 실행합니다: 클래스 이름이 *Test.java로 끝나야 함.

- 만약 클래스 이름이 이 규칙을 따르지 않으면 해당 테스트 클래스가 실행되지 않습니다.

 

2-5. 젠킨스 빌드 진행

 

2-6. Test Stage Log

 

2-7. 보고서 생성 확인

경로 : /var/lib/jenkins/workspace/project/target/surefire-reports

 

2-8. 테스트 실패해도 젠킨스 빌드 계속 이어가려면 pom.xml 아래와 같이 수정

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <testFailureIgnore>true</testFailureIgnore>
            </configuration>
        </plugin>
    </plugins>
</build>

 

3. Setting (Gradle)

3-1. build.gradle Dependencies 추가

 // JUnit 5 setting
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.8.1’// Spring Test (JUnit 5 Compatible Versions)
    testImplementation 'org.springframework:spring-test:5.3.9'

 

3-2. build.gradle test 추가

	test {
    useJUnitPlatform()
    include '**/JunitTest.class'  // JunitTest 클래스만 포함하도록 설정
    reports {
        junitXml {
            destination = file("$buildDir/test-classes/test")  // XML 리포트 경로 지정
        }
        html {
            destination = file("$buildDir/reports/tests/test")  // HTML 리포트 경로 지정
        }
	}
}

 

3-3. Jenkins Pipeline 추가

 stage('Junit Run Tests') {
            steps {
                echo 'Running tests...'
                sh 'gradle test'
                //sh './gradlew test --tests com.kopis.cloudNative.JunitTest'
            }
        }


 post {
        success {
            echo 'Build completed successfully!'
        }
        failure {
            echo 'Build failed. Check the logs for details.'
        }
        always {
            junit '**/build/test-classes/test/*.xml'  
        }
    }

 

3-4. 결과

 

4. 후기

4-1. 어디다 쓸수 있을까?

1. 새로운 메소드를 추가하거나 클래스를 수정할 때마다 해당 메소드나 클래스의 기능을 검증하는 유닛 테스트를 작성
- 예를 들어, UserService 클래스의 createUser() 메소드가 제대로 동작하는지 단위 테스트를 작성하고 이를 Jenkins가 자동으로 실행하도록 설정

2. 개발자가 새로운 기능을 추가하거나 버그를 수정할 때 기존 기능이 깨지지 않는지 확인하는 데 사용.
- 예를 들어, 기존에 로그인 기능에 대한 JUnit 테스트가 있다면, 새로운 기능을 추가할 때마다 로그인 기능이 정상적으로 작동하는지 자동으로 확인

3. 외부 목적지 API에 대한 OPEN만을 확인

 

4-2. 어디엔 못쓸까?

- 외부API 호출 or DB 연동 테스트 불가 
- 테스트가 빌드 전에 이루어지기 때문에 테스트 주체가 WAS가 아닌 젠킨스에서 이루어짐
- 해당 테스트들은 빌드 후 통합테스트에서 이루어져야함

 

4-3. 문제가 뭘까?

결국엔 개발사에서 테스트를 위한 코드를 다시 생성해야함

반응형