자동화 테스트 (Automation Test)
자동화 테스트를 도입하게되는 계기는 필요성과 문제인식 또는 요구사항 발생 등 이유가 다양합니다. 대다수가 말하는 공통적인 계기는 ‘테스트 시간은 제한되어있고 테스트해야 할 범위는 넓고 배포주기는 빨라지고 이로인한 테스트 투입 비용과 시간은 증가하나 품질 확보는 어려움'의 문제를 해결하고자 자동화 테스트를 도입하는 경우가 많습니다.
이 장에서는 자동화 테스트를 위한 테스트 코드를 작성하는 방법과 테스트 도구를 활용하여 테스트를 수행하는 방법에 대한 기술적인 내용을 다루지 않습니다. 자동화 테스트의 정의와 기본 개념을 이해하고 자동화를 도입하고 수행하기 위한 큰 그림에서 계획과 설계에 대한 내용을 다룰 것입니다.
자동화를 큰 그림에서 보지 못하고 테스트 코드를 작성하는 것에만 집중하다 보면 자동화를 도입하고자 하는 목적과 방향성을 잃어버릴 수 있습니다. 자동화 도입 목적과 배경, 이유, 자동화 도입으로 해결하고자 하는 문제와 현재상황을 큰 그림으로 그린 후, 앞단의 배경을 고려하여 세부적인 계획과 문제를 해결할 구체적인 방법을 그려나가야 합니다. 그래야 유용하고 실용성있는 자동화를 설계할 수 있습니다.
자동화는 가능한 프로젝트 초기에 계획을 세우는 것이 좋고 계획은 실무에 맞게 이루어져야합니다. 자동화를 계획하는 많은 분들이 자주 저지르는 실수는 테스트 범위에 대해 처음부터 끝까지 전체를 자동화하려는 것입니다. 자동화 범위가 확대될수록 유지보수는 힘들어지고, 설계자체가 경직되며, 전체를 완성하고 안정화하는데까지 소요되는 시간과 비용이 늘어나고, 시스템이 변경되고 업그레이드 될수록 설계된 자동화는 물거품이 될 수 있습니다.
유용하고 실용적인 자동화가 되기위해 자동화는 빠르게 만들어져야하고 빨리 수행되어야 하며 효과를 거두고 자동화를 통한 문제를 해결하도록 해야합니다. 그러기위해 자동화는 단순하게 만들고(Structure는 작게) 명확한 범위를 선정하며 각각의 structure는 목적을 갖도록 설계되는 것이 좋습니다.
✻ 탁월한 효과를 맛볼 수 있는 자동화 계획
테스트 코드 작성을 위한 환경 구축
자동화에 엮여있는 의존성을 가진 시스템의 다른 부분(ex_네트워크, DB, 개인PC/서버 성능 문제 등)들로 인해 테스트가 어려울 경우 이를 제어하기위해 mock, dummy, fake 객체를 만들어 사용
주요 기능별(에러 발생 가능성이 높은 기능 위주)로 자동화 framework 를 분리하여 설계
자동화하기 좋은 테스트 커버리지 확보
ex_수동으로 테스트하기에 반복적인 일이 많은 범위, 사람보다 정확한 기계의 힘이 필요한 범위
테스트 결과/빌드 품질에 대한 정보 공유
ex_정보를 보여줄 수 있는 웹 페이지 설계 or CI/CD 툴 활용 or slack 등 메신저 활용
✻ 자동화 목표
■ 안정성 & 신뢰성 확보
Test Code 및 결과에 대한 신뢰성을 보장한다.
‣ 수행 절차에 따른 결과(응답)을 검증할 수 있도록 스크립트를 작성한다.
수동 테스트를 줄이고 자동화 테스트로 반복테스트를 대체한다.
주요 기능별로 자동화 framework를 분리하여 각 기능별 독립적인 테스트가 가능하게하고 유지보수 관리를 용이하게 한다.
■ 유지보수성
이미지기반(GUI) 자동화는 유지보수 비용이 더 높다. 유지보수 비용을 줄이고 하나의 코드로만 테스트가 가능할 수 있도록 Element정보 (ex_object, value, id, name 등 identity를 가진 attribute를 사용)를 식별하여 사용한다.
테스트 스크립트를 단순하게 만들어서 수정 및 유지보수가 쉬워야 한다.
담당자가 변경되어도 쉽게 스크립트를 읽을 수 있도록 주석처리를 한다.
✻ 자동화 테스트 커버리지
자동화하기 좋은 테스트 커버리지로 수동으로 테스트하기에 반복적인 일이 많은 범위
스모크 테스트, BVT(Build Verification Test)/BAT(Build Acceptance Test)
회귀 테스트 Regression Test
호환성 테스트 Compatibility Test
클라이언트 성능 테스트 Client Performance Test
API 테스트
API는 UI에 영향을 받지 않고 그대로 사용되는 경우가 많아 한번 작성된 API 테스트 코드는 반복적으로 재사용이 가능하며 시스템 백엔드단에서 반복적인 회귀 테스트가 가능하다.
서버 성능 테스트(부하를 발생시키는 지점) Performance Test
ex_주문 부하 발생시 영향도 확인을 위해 n만건 주문을 자동화로 처리
✻ 자동화 테스트 도구 선정
본인이 사용할 수 있는 개발 언어에 따라, 테스트 하고자 하는 플랫폼의 종류(web 또는 app 등)에 따라 자동화 테스트 도구를 선정
Appium (사용 언어 : Python/iOS 모바일, Android 모바일, 모바일 웹을 자동화)
Selenium (다양한 언어 지원 : JAVA, C#, PHP, Ruby, Python 등/web applications을 자동화)
Katalon (사용 언어 : Groovy, JAVA/web, mobile, desktop apps and APIs을 자동화)
Sikuli (사용 언어 : Python/web, mobile을 자동화) 등등
실무에 맞는 자동화 테스트 계획이 설계되었다면 자동화 진행을 위한 절차를 마련해야 합니다.
단계별로 체계적인 업무 진행이 가능한 프로세스를 설계하여 자동화를 정착시키고 좋은 품질의 테스트 코드가 만들어지고 유지될 수 있도록 수행단계를 절차화 합니다.
1) 프로젝트 선정
자동화가 가능한 기능을 고려하고 자동화 가능 여부를 검토
자동화 일정 및 계획 / 커버리지 선정 및 시나리오 설계
2) ATC(Automation Test Case) 작성
선정된 자동화 커버리지에 대한 Automation TC 작성
3) 자동화 목표 Coverage(%) 산정
ATC내에서 실제 자동화로 구현가능한 영역에 대한 목표 산정
4) 자동화 테스트 코드 구현/실행 및 검증
자동화 도구에 맞는 코드를 작성하고 조직내부에서 코드 자체 검증 진행
스크립트 수행 동작 확인
5) 적용 및 활용
6) 테스트 결과 공유
■ 스크립트 작성을 자동으로 만들어주는 도구 활용
테스트 스크립트를 작성하기 어려운 경우 테스트 코드를 자동으로 만들어주는 테스트 도구를 활용해봅니다.
사용자의 마우스, 키보드 등의 액션을 기록하여 테스트 코드를 자동으로 만듭니다.
▪︎Test Code 예제 (출처)
AI로 테스트 스크립트를 자동으로 생성. 데스크톱, 모바일, 웹, API, 애플리케이션의 다양한 플랫폼에서 생성된 소프트웨어를 테스트하는 데 사용할 수 있다.
‣ 카탈론 스튜디오 github 참고 (출처)
등등, 외에도 스크립트 작성을 위한 도구가 많으니 자동화 테스트 시 참고하여 자동화를 실행해보시기 바랍니다.
■ Java 언어 기반 Selenium 테스트 코드 예제
■ github에 자동화 테스트를 위한 스크립트 예제를 오픈소스로 올려준 자료들이 많으니 스크립트 작성시 참고 또는 도움을 받을 수 있습니다.