End to End Test
엔드-투-엔드 테스트는 시스템이 외부 요구 사항을 충족시키고 전체 시스템을 끝까지 테스트하여 목표를 달성하는지 확인합니다. 다른 테스트와 달리 사용 중인 컴포넌트나 아키텍처와 관계없이 시스템이 전체적으로 비즈니스 목표를 충족하는지 확인하는 데 집중합니다.
이를 달성하기 위해 시스템은 블랙박스로 취급하여 GUI 및 서비스 API와 같은 공개 인터페이스를 통해 가능한 한 완벽하게 배포 된 시스템을 테스트합니다. 이런 종단 간 테스트를 통해 문제 영역에 대해 더 많이 알게 되면 서비스는 분할되거나 병합될 가능성이 있으며, 마이크로 서비스 아키텍처는 시간이 지남에 따라 발전할 수 있습니다. 하지만 테스트 범위가 훨씬 넓어 실패할 가능성이 매우 높습니다.
UI 테스트
UI 테스트를 엔드-투-엔드 테스트의 일종으로 시스템 전체를 대상으로 수행하는 테스트입니다. 일반적으로 브라우저를 사용해 GUI를 접하고, 실제 환경과 비슷한 테스트를 하기 때문에 테스트 후 실제 운영에서 잘 동작할 것이라는 확신을 할 수 있지만, 너무 넓은 테스트 범위와 난해한 원인 분석으로 마이크로서비스 환경에서는 테스트하기 힘듭니다.
Selenium WebDriver 같은 사용자 인터페이스 기반 테스트 자동화 도구를 사용하다 보면, 사용자 인터페이스를 통해 모든 테스트를 자동화하고 싶은 유혹을 느끼게 됩니다. 하지만 UI와 로직이 분리되어 있고, 여러 다양한 레이어는 테스트 실행 중에 문제가 발생했을 때 중요한 정보를 숨기므로 약한 피드백을 유발하게 됩니다.
또한 유지 관리를 위한 불필요한 작업이 추가로 발생하게 됩니다. UI 레이어 등 애플리케이션의 특정 레이어에서의 변경이 테스트에 영향을 줄 가능성이 커집니다. API 테스팅은 UI가 아닌 비즈니스 레이어를 통해 테스트하고, GUI 테스팅은 UI를 통해 프레젠테이션 레이어를 통해 테스트하는 차이점이 있습니다.
Tool : Swagger
Swagger는 RESTful API를 설계, 구축, 문서화하는 전체 라이프사이클에 도움이 되는 도구입니다. REST API로부터 API 문서를 자동 생성하기 때문에 API가 변경될 때마다 문서화 및 유지 보수를 자동으로 해주고, 제품 관리자, 개발자, 테스트 간에 공유 문서로 활용하면서 TestBed로서 API의 기능, 성능, 보안 테스트를 할 수 있습니다.
일반적으로 스프링 부트에 Swagger 어노테이션을 적용해 API Spec을 SwaggerUI 등으로 쉽게 생성하여 사용하고, 팀 또는 기업에서 사용하는 기능은 유료입니다.
Tool : REST-assured
Rest Assured는 자바 언어로 REST 테스트를 할 수 있는 오픈소스 도구입니다. Serenity 자동화 도구와 결합해서 보고서 생성이 가능합니다. Baked-in 기능으로 사용자가 처음부터 코드를 작성할 필요가 없고, XML, JSON 요청/응답을 지원합니다.
Tool : SoapUI
SoapUI는 SOAP API와 REST를 위한 쉽게 테스트 가능한 테스트 도구입니다. 웹 서비스 및 API를 대상으로 기능/성능/보안 및 데이터 기반 테스트를 수행한 후 보고서를 만들 수 있습니다. 그러나 동적 데이터 생성 등 고급 기능은 유료 버전에서 가능합니다.
Tool : POSTMAN
포스트맨은 개발자와 동일한 언어를 사용하는 통합 개발환경에서 API 테스트할 때 적합합니다. 사용하기 쉬운 REST 클라이언트와 직관적인 인터페이스가 장점입니다. 포스트맨 컬렉션을 사용해 요청 실행/테스트/디버그 후 자동화된 테스트 제작, 모킹, 문서화, 모니터링이 가능합니다. 개인용, 프로, 기업용, 이렇게 3가지 가격 정책을 가집니다.
Tool : Katalon
Katalon은 웹, API, 모바일 테스트를 위한 종합적인 자동화 도구입니다. 윈도우, 맥, 리눅스 등 여러 환경을 지원하고, UI와 스크립트 모드 둘 다 가능합니다. 또한 Jira, Swagger와 잘 연동됩니다.
Tool : JMeter
JMeter는 웹 어플리케이션의 부하/성능 테스트에 적합한 오픈소스 도구입니다. 플러그인 기반 아키텍처로 프로토콜 계층에서 작동하고, 크로스 플랫폼을 지원합니다. JDBC 데이터베이스 연결 테스트용 단위 테스트 도구로 사용하여 CSV 파일을 이용해 테스트를 반복 가능합니다.
API/UI 테스트 도구
완벽한 도구는 없습니다. 일부 상용 도구일 경우 기능이 충분할 수도 있지만, 아쉽게도 오픈소스 도구는 저렴하지만 적용할 때 자원과 노력이 필요합니다. 각 도구의 장단점과 프로젝트 상황에 따라 적절히 선택해야 합니다.
SW 테스트 자동화 산업 동향
소프트웨어 테스트 자동화 관련 가트너 2015년과 2018년 발표를 비교하면, 아키텍처 구조가 모놀리스에서 마이크로서비스로 바뀌어 감에 따라 시장을 선도하는 테스트 도구도 바뀌고 있음을 알 수 있습니다.
QA/Tester의 역할 변화
테스트는 역할이 아닙니다. 애플리케이션이 잘 동작하게 하는 활동입니다. 개발자 또는 테스터, 누가 수행하든 관계없이 테스트를 수행해야 합니다. 과거에는 대부분의 전통적인 테스트 자동화가 백엔드가 아닌 UI에 중점을 두었습니다.
현재는 모바일, 클라우드, 마이크로 서비스 아키텍처, DevOps, 지속적 전달 등의 개념이 대두되면서 팀 구성 방식과 스킬셋이 빠르게 바뀌고 있어서 과거에는 최종 사용자인 고객의 관점에서 제품을 바라봤던 QA 전문가는 이제 테스트를 잘하려면 코딩과 자동화 도구를 알아야 합니다.
요약
단위 테스트는 응용 프로그램에서 테스트 가능한 가장 작은 코드 베이스를 사용하여 예상대로 작동하는지 확인하는 것입니다. 통합 테스트는 컴포넌트 간 연동 및 상호 작용을 검증하여 인터페이스 결함을 찾는 것입니다. 구성 요소 테스트는 테스트 더블을 사용해 테스트 중인 코드를 다른 구성요소와 분리하여 실행되는 소프트웨어의 범위를 제한하여 테스트하는 것입니다.
계약 테스트는 서비스 간 경계에서 기대치를 만족하는지 검증하기 위해 테스트하는 것입니다. 엔드-투-엔드 테스트는 시스템의 비즈니스 목표를 충족하는지 알기 위해 전체 시스템을 대상으로 검증하는 것입니다.
테스트 피라미드 위로 올라갈수록 테스트 대상이 제대로 동작한다는 확신이 커지지만, 테스트 시간, 범위, 피드백 순환 주기가 늘어나게 되고 자원, 비용도 들어간다는 것입니다. 아래로 내려가면 테스트가 휠씬 빨라지므로 더 빠른 피드백을 얻어 빨리 고칠 수 있게 됩니다. 모든 테스트가 일장일단이 있으므로 다양한 종류의 자동화된 테스트를 인지한 후, 상황에 맞게 적용하여 적은 노력으로 최대한의 결과를 얻도록 노력해야 합니다.
앞에서 살펴본 테스트의 단계를 사람과 일의 흐름과 연관 지어 살펴본다면, 개발 후 다양한 테스트를 거쳐 운영 환경에까지 반영하게 됩니다. 물론 중간에 테스트가 실패하면 피드백을 거쳐 다시 진행하게 됩니다. 테스트는 지속적 통합 환경과 함께 자동으로 수행하게 되면 DevOps에 매우 효과적입니다. 개발 라이프사이클 별로 프로젝트 환경에 적합한 도구를 파이프라인으로 연계하여 DevOps를 지향하는 데 많은 도움이 될 수 있습니다.
'SW > DevOps' 카테고리의 다른 글
DevOps : Docker의 모든 컨테이너 나열하기 : 명령어 (0) | 2020.08.09 |
---|---|
K-MOOC 강좌 후기 : 오픈소스를 활용한 DevOps 환경 이해 (0) | 2019.12.21 |
DevOps : Service Test 종류 및 방법 (0) | 2019.12.18 |
DevOps : UnitTest와 JUnit 개념 및 사용법 (0) | 2019.12.17 |
DevOps : UnitTest 개요, 방법 (0) | 2019.12.16 |