목차

 

테스트 범위

 

기능 테스트와 E2E 테스트

Functional Testing ≒ End to end Testing

  • 사용자 입장에서 시스템이 제공하는 기능이 올바르게 동작하는지 확인
  • 사용자가 직접 사용하는 웹 브라우저나 모바일 앱 부터 시작해서 데이터베이스나 외부 서비스에 이르기까지 모든 구성 요소를 하나로 엮어서 진행
  • 끝(브라우저)에서 끝(DB)까지 모든 구성 요소를 논리적으로 완전한 하나의 기능으로다룬다.
  • 끝에서 끝까지 올바른지 검사하기 때문에 E2E(End to end) 테스트로도 볼 수 있다.

통합 테스트 (intergration Testing)

시스템의  각 구성 요소가 올바르게 연동되는지 확인

소프트웨어의 코드를 직접 테스트

  • 통합 테스트 : 서버의 회원 가입 코드를 직접 테스트
  • E2E 테스트 : 앱을 통하여 회원 가입 가능을 테스트

단위 테스트 (Unit Testing)

개별 코드나 컴포넌트가 기대한대로 동작하는지 확인 

 - 빠르게 자신이 만든 코드를 빠르게 확인하기 위해서 사용

 - 종속성이 있는 다른 클래스들에서 버그가 나는것을 방지하기위해 사용

한 클래스나 한 메서드와 같은 작은 범위를 테스트

테스트 범위 간 차이

유형 설치 및 준비 실행 속도 외부 시스템 연동 상황 준비와 결과 확인
기능 테스트 웹 서버 구동, 앱 설치 느림 (브라우저/앱 구동 및 상호작용 포함) 필요 어렵거나 불가능할 때가 있음
통합 테스트 DB, 캐시 서버 등 연동 대상 구성 느림 (DB 연결, 소켓 통신 등)  필요 어렵거나 불가능할 때가 있음
유닛 테스트 테스트 코드 만 필요 빠름 (서버나 DB 준비 없음) 대역으로 처리 상대적으로 쉬움

 

통합 테스트의 필요성

  • 각 구성 요소가 올바르게 연동되는 것을 확인
  • 자동화하기 좋은 수단이 통합 테스트 코드

테스트 범위에 따른 테스트 코드 개수와 시간

기능 테스트를 수행하려면 모든 환경(브라우저, DB, 등)이 갖추어져야 하기 때문에 자동화하거나 다양한 상황별로 테스트하기 가장 어렵다.

통합 테스트는  시스템 내부 구성요소에 대한 테스트 가능, 기능 테스트보다 상황을 유연하게 구성할 수 있다.

단위 테스트는 통합 테스트로도 만들기 힘든 상황을 구성가능 → 단위 테스트에서 가능한 다양한 상황을 테스트

 

통합 테스트/기능 테스트 에서는 주요한 상황에 초점을 맞추어서 테스트

테스트 범위

WireMock을 이용한 Rest 클라이언트 테스트

통합 테스트하기 어려운 대상이 외부 서버이다. WireMock을 사용하면 서버 API를 스텁으로 대체 가능하다.

WireMockServer는 HTTP 서버를 흉내 낸다.

  • 테스트 실행 전에 WireMockServer를 시작한다. 실제 HTTP 서버가 뜬다.
  • 테스트에서 WireMockServer의 동작을 기술한다.
  • HTTP 연동을 수행하는 테스트를 실행한다.
  • 테스트 실행 후에 WireMockServer 중지한다

WireMock은 JSON/XML 응답, HTTPS 지원, 단독 실행 등 다양한 기능을 제공하므로 외부 연동 코드를 테스트할 때 유용하게 사용할 수 있다

스프링 부트의 내장 서버를 이용한 API 기능 테스트 

내장 서버에 연결하는 RestTemplate인 TestRestTemplate 를 이용하면 스프링 부트의 내장 서버를 이용한 API 기능 테스트 가능

 

+ Recent posts