FEStudy-boostcamp / FEStudy

0 stars 0 forks source link

Testing Tools #5

Open puba5 opened 1 year ago

puba5 commented 1 year ago

테스트란?

테스트의 종류

조사할만한 테스트 툴

puba5 commented 1 year ago

유닛 테스트

스냅샷 테스트

Jest

Jest-image-snapshot

장점

CrewDaniel commented 1 year ago

E2E 테스트란?

E2E 테스트는 애플리케이션 전체를 처음부터 끝까지 테스트 하는 것으로, 여기서 말하는 "처음부터 끝까지"는 아래의 E2E 테스트의 종류에 따라 달라집니다.

언제 써야 할까?

여러 레이어가 상호작용 시스템에서, 시스템 전체가 올바르게 작동하는지 확인하기 위해 전체 흐름을 테스트해야 합니다. 이 경우에 E2E가 도움이 됩니다.

또한 재현하기 어려운 문제를 테스트할 때에도, 다른 테스트에 비해서 문제를 발견하는 데 유용합니다(원인을 찾기는 더 어려울 수도 있을 것입니다)

다만 항상 도입하기 적절하고, 유용한 것은 아니라는 것을 많은 분들이 E2E 도입을 시도할 때 느끼셨을 것입니다.

우선 개발 초기 단계에서 적용하기에 적절하지 않습니다. TDD 등의 테스트 주도 개발 방법론 등이 많이 나오지만, E2E에 해당하는 내용은 아닐 것입니다. 개발 초기 단계에서 기능 변경이 발생했을 때 테스트 케이스의 갱신이 빈번하게 발생해 리소스 증가로 이어질 수 있습니다.

또한 E2E 테스트는 불안정합니다. 문제를 발견하기는 쉽지만, 문제의 원인을 하나로 특정하기 어렵습니다. 테스트 환경의 변화, 예를 들어 네트워크 지연 등으로 테스트가 실패할 수 있습니다.

또한 도입에 있어 다른 테스트보다 높은 리소스를 필요로 합니다. 그렇다고 해서 전문적인 QA 엔지니어에 비해서는 결과의 정확도가 떨어집니다.

E2E 테스트의 종류

Pasted image 20230808042327

수평 테스트

Pasted image 20230808034720 수평 End-to-End 테스트는 가장 일반적으로 사용되는 유형으로, 사용자의 전체 사용 흐름을 테스팅하는 목적을 가지고 있습니다.

수직 테스트

Pasted image 20230808034711

어떤 것을 해야 할까?

위의 두 가지 테스트를 한다고 했을 때, 이 중 한 가지는 실제로 적용해보기 어렵다는 느낌을 받을 수 있습니다.

수직 테스트는 각 레이어에 대한 테스트가 포함되어야 하는데, 일반적으로 하나의 팀에서 모든 계층을 다루지 않는 것을 감안하면, 특정 주체가 수직 테스트를 수행하기는 쉽지 않을 것입니다.

그래서 일반적으로 E2E 테스트를 한다고 하면, 또는 E2E 테스트 툴들은 수평 테스트에 초점을 두고 있습니다.

앞으로의 내용도 수평 테스트에 중점을 두겠습니다.

E2E 테스트 툴

Pasted image 20230808050645

(출처: https://www.browserstack.com/guide/testcafe-vs-cypress 2021년 자료)

데모 페이지에서 아이디/비밀번호 입력을 통한 로그인, 로그아웃 기능을 테스팅하는 과정에 대한 코드를 작성했습니다.

cypress

위 이미지에서 작성한 것과 같이 가장 많이 쓰이는 툴입니다.

장점

GUI

Pasted image 20230808043513

GUI에 있어서 뛰어나고, 각 과정 또한 시각화가 잘 되어있습니다(데모와 함께 설명).

단점

Safari 브라우저 테스팅에 있어서는 아래 소개드릴 playwright에 비해서는 아쉽습니다. 2022년 9월에 Cypress 10.8 버전부터 지원하기 시작했는데, 아직 expreimental 기능입니다.

playwright

Pasted image 20230808044113

장점

playwright는 모바일 브라우저 테스팅에 있어서 cypress에 비해 장점을 가지고 있습니다. Android Chrome과 iOS Safari에 대한 테스트를 지원하는데, 특히나 iOS Safari에서 발생하는 많은 문제점들을 생각해봤을 때 꽤 큰 장점이라고 생각됩니다.

또한 다양한 언어를 지원한다는 장점도 있습니다. JS/TS 외에도 Python, .NET, Java 언어를 지원합니다.

단점

배우기가 어렵습니다. Cypress에 비해서는 커뮤니티가 덜 활성화된 편입니다.