이메일 인증 테스트 자동화 (Playwright, Cypress, Selenium)
가입과 비밀번호 재설정 흐름은 테스트하기로 악명 높습니다. 가장 중요한 단계인 인증 메일이 앱을 벗어나기 때문입니다. 해법은 모든 테스트 실행에 코드로 읽을 수 있는 일회용 받은편지함을 하나씩 주는 것입니다. 이 글에서는 일회용 이메일 API 위에서 Playwright, Cypress, Selenium으로 그 패턴을 보여드립니다.
이메일 테스트가 불안정한 이유
이메일은 비동기입니다. SMTP 서버를 거쳐 도착하는 데 몇 초가 걸릴 수 있는데, 테스트는 빠르고 결정적인 결과를 기대합니다. 한 사람의 받은편지함을 여러 실행에 걸쳐 공유하면 메시지가 뒤섞이고 오래된 메일이 남습니다. 처방은 이메일을 필요할 때 만드는 것입니다. 테스트마다 새롭고 메일이 도달하는 주소를 발급하고, API로 그 메시지를 소비하세요.
패턴
- 테스트 시작 시 임시 메일함을 발급합니다(무작위 또는 직접 정한 주소).
- 인증 메일을 유발하는 지점까지 UI를 진행합니다.
- 메시지를 기다립니다 — 받은편지함을 폴링하거나, 지연 없는 전달을 위해 webhook에 반응합니다.
- 메시지 본문에서 인증 링크나 일회용 코드를 추출합니다.
- 흐름을 이어가서(링크 클릭 / 코드 입력) 성공을 단언합니다.
DRY하게 유지하기: 재사용 가능한 헬퍼
받은편지함 API 호출을 모든 스펙에 흩뿌리지 마세요. 만들기·기다리기·추출하기를 하나의 모듈로 감싸세요. Playwright 픽스처, Cypress 커스텀 명령, 또는 Selenium 헬퍼 클래스로요. 그러면 테스트는 '받은편지함 만들고, 가입하고, 인증을 기다리고, 단언한다'처럼 읽히고, 전송 세부 사항이 단언으로 새어 나오지 않습니다.
프레임워크별 메모
- Playwright — 헬퍼를 픽스처로 노출해 테스트마다 자동으로 새 받은편지함을 받게 하세요. 메시지를 기다릴 때는 웹 우선 방식의
expect.poll을 쓰세요. - Cypress — API 호출을
cy.task나 커스텀 명령으로 감싸세요. 임의의cy.wait대신 메시지가 도착할 때까지 폴링하세요. - Selenium — 만들기·폴링·추출을 페이지 오브젝트 형태의 헬퍼에 넣고, 메시지에 대해 명시적 대기를 쓰세요.
안정성을 위한 팁
지연과 요청 수를 줄이려면 빡빡한 폴링보다 webhook을 선호하세요. 실행마다 고유한 주소를 줘서 병렬 테스트가 절대 충돌하지 않게 하세요. 큰 테스트 모음에서는 월별 API 할당량을 주시하세요. 안전한 경우 단언 사이에 받은편지함을 재사용하고, 폴링 간격을 점차 늘리세요. 모든 호출은 X-API-Key 헤더의 API 키로 인증하세요.
시작하기
프로필에서 API 키를 받고, OpenAPI 문서를 읽고, 받은편지함을 만들어 메시지 하나를 기다리는 픽스처 하나를 연결해 보세요. 일회용 받은편지함이 처음이라면 임시 이메일이란?부터 시작하세요.