Java-E2E 테스트 자동화
여러 자동화 환경을 겪어보며 메인 개발 언어로 Java를 택하게 되었습니다. 테스트 자동화 IDE로 WebdriverIO를 사용한다면 Vscode를, Python 기반의 테스트 환경에서는 Pycharm을, Java에서는 IntelliJ를 사용하고 있습니다.
이번 포스팅에서는 IntelliJ에서 테스트 프레임워크 설계에 필요한 TestNG XML Template 생성 방법을 알아보겠습니다. Eclipse에서는 IDE에서 Convert to TestNG를 제공하지만 아쉽게도 IntelliJ에서는 수동으로 파일과 코드를 생성해야 합니다. 매번 수동으로 모든 걸 생성하면 귀찮고 번거로우니 Template을 만들어 보다 간편하게 사용해보겠습니다.
공식문서를 살펴보면 IntelliJ에서도 TestNG xml을 활용하여 테스트 시나리오를 제어할 수 있습니다. Eclipse와 다른 점은 xml 파일 자동 생성을 지원하지 않습니다
따라서 위와 같은 형태로 직접 생성해야 합니다. 매번 새로운 프로젝트에서 직접 생성하면 귀찮으니 해당 코드를 Code Templates로 만들도록 하겠습니다.
Preferences의 Editor에 존재하는 File and Code Templates에서 새로운 파일을 생성하고 Extension은 xml로 입력 후 자동 생성할 템플릿에 해당하는 코드를 작성합니다.
이후 TestNG를 클릭하여 생성하면 우측의 xml 파일과 Templates에 작성한 코드가 자동 생성됩니다. include, exclude와 같은 키워드를 통해 실행할 메서드를 원하는 형태로 제어할 수 있습니다. 또한 xml 내부에서 테스트 병렬 실행 여부, 사용할 스레드 개수, 실행 순서 등을 설정할 수 있습니다.
기본적으로 TestNG는 XML 파일에 있는 순서대로 테스트를 실행하지만, TestNG의 Annotations에 따라서 실행 순서를 원하는 형태로 제어할 수 있습니다. 아래 TestNG의 Annotations은 xml 파일이 아닌 테스트 파일 내부에서 설정합니다.
@BeforeSuite: 모든 테스트가 실행되기 전에 실행됩니다.
@AfterSuite: 모든 테스트가 실행된 후에 실행됩니다.
@BeforeTest : 태그 내부의 클래스에 속하는 테스트 메서드가 실행되기 전에 실행됩니다.
@AfterTest : 태그 안의 클래스에 속한 모든 테스트 메서드가 실행된 후 실행됩니다.
@BeforeGroups : 특정 그룹에 속하는 첫 번째 테스트 메서드가 호출되기 직전에 실행됩니다.
@AfterGroups: 특정 그룹에 속하는 마지막 테스트 메서드가 호출된 직후에 실행됩니다.
@BeforeClass : 현재 클래스의 첫 번째 테스트 메서드가 호출되기 전에 실행됩니다.
@AfterClass : 현재 클래스의 모든 테스트 메서드가 실행된 후 실행됩니다.
@BeforeMethod : 각 테스트 메서드 전에 실행됩니다.
@AfterMethod : 각 테스트 메서드 후에 실행됩니다.
IntelliJ에서 테스트 프레임워크 설계에 필요한 TestNG XML Template 생성 방법과 테스트 실행 순서와 관련된 TestNG의 Annotations에 대해 간략하게 알아보았습니다. TestNG XML을 활용하면 테스트 스위트를 Staging, QA, Production 환경에서 필요한 메서드만 실행하여 관리할 수 있고, TestNG Annotation을 활용하면 테스트 의존성 제거에 필요한 테스트 사전 조건을 관리할 수 있습니다. 보다 자세한 사항은 아래 공식 문서 참고 부탁드립니다. 감사합니다.
https://testng.org/doc/documentation-main.html#testng-xml
https://www.jetbrains.com/help/idea/testng.html#create-tests-and-suites