시스템을 테스트 하는 방식은 크게 2가지가 있다고 할 수 있겠다.
매뉴얼 테스트 (manual test)
시스템이 작거나, 프로젝트 규모가 그렇게 크지 않다면 직관적이고 수정이 용이한 매뉴얼 테스트를 추천할 만 하다. 특히 스타트업과 같이 인력과 시간이 부족할 수 밖에 없는 규모라면.
자동화 테스트 (automatic test)
큰 규모에 시스템이나 규모가 있는 프로젝트라면 테스트를 최대한 자동화해 놓는 자동화 테스트 시스템을 만들어 놓는다면, 계속 반복되는 테스트에도 시간과 비용이 절감될테고, 테스트로 인한 오류가 날 확률이 현저히 낮아진다.
시스템을 테스트하는 방법은 크게 3가지로 나눌 수 있다.
시스템의 UI(user interface)를 통해서 테스트하는 테스트.
장점은 실제로 시스템을 사용해서 테스트하기 때문에 클라이언트(고객)들이 사용하는 환경과 동일한 환경에서 테스트 해볼 수 있다는 것이다.
단점은 시간이 가장 많이 소요되는 테스트이다. 프론트엔드부터 백엔드까지 모든 시스템을 실행시키고 연결해야 하고, 실제 실행 속도도 느리다. 또 다른 단점으로는 자동화가 비교적 가장 까다롭다. (rendering 요소들을 코드로 자동 테스트 할 수는 없는 노릇이기에...)
전체 테스트의 10% 정도의 비중을 차지한다고 보면 편하다.
API 서버를 로컬에서 실행시킨 후 터미널에서 테스트용 HTTP 요청을 로컬에서 실행되고 있는 API 서버에 전송하여 올바른 HTTP 응답이 리턴되는지 확인하는 방식의 테스트
책에서 계속해서 이 방식을 사용해 테스트한다.
UI test와 비슷해 보이지만, 차이점으로는 integration test는 테스트할 기능만 골라서 실행 한다는 점이다.
전체 테스트의 20% 정도의 비중을 차지한다고 보면 편하다.
직접 서버를 실행시켜서 테스트하는 방식이 아닌, 코딩으로, 즉 논리적으로 하는 테스트로 코드를 직접 테스트하는 개념이다.
def multiply_by_two(x):
return x * 2
위에 unit test를 어떻게 사용할까?
assert multiply_by_two(2) == 4
함수를 호출해서 결괏값이 예상하는 값과 동일한지 확인하는 코드를 구현해서 실행하면 된다!
전체 테스트의 나머지 70% 정도의 비중을 차지한다고 보면 편하다.
8장 실습은 unit test를 만드는 것이 전부이다.
테스트에 대한 기초 지식과, 책에서 사용하는 라이브러리인 pytest로 간단한 unit test를 구현하는 챕터였습니다.
테스트 실습 파일은 깃헙에서 참고 하시면 되겠습니다.