WebdriverIO Cucumber
안녕하세요, 에이슬립에서 Quality Engineering Lead를 맡고 있는 이지원입니다. 지난 7월 에이슬립에 복귀한 후 어느덧 4개월이 다 되어가네요. 현재 에이슬립은 작년에 비해 제품의 방향성, 기업의 핵심 가치, 그리고 소수 정예로 이뤄진 구성원들의 마음가짐까지, 회사의 지속성과 성장을 위해 필요한 모든 부분에서 더 나은 방향을 고민하며 움직이고 있습니다. 저 역시 이곳에서의 시간을 유의미한 경험과 성취로 남기고자, Asleep 프로덕트 전체의 품질을 책임지고 있습니다.
현재 에이슬립에는 B2C 제품인 슬립코치와 슬립루틴, 수면 데이터를 수집하고 업로드하며 API 서버와 통신하여 수면 리포트를 제공할 수 있는 AsleepTrack SDK, 그리고 이와 관련된 웹 제품이 있습니다. SDK, 모바일, 웹까지 모든 도메인에서 품질 보증이 필요하며, 2020년 테스트 자동화 서비스 운영 매니저 경험을 바탕으로, 현 조직에 적합한 QAOps 환경을 구축하며 고객들이 불편 없이 제품을 사용할 수 있도록 노력하고 있습니다.
이번 글에서는 QAOps의 핵심적인 프로세스를 담당하게 될 에이슬립의 24시간 365일 검증 시스템에 대해 소개합니다.
에이슬립에 복귀해 첫 주에 들었던 생각 중 한 가지는 현재 상황을 고려했을 때, 제품을 사용하는 고객들이 불편함 없이 사용할 수 있도록 저비용 고효율 품질 보증 체계를 구축해야겠다는 다짐이었습니다. 제가 생각하는 품질의 핵심 가치는 사용자가 수면 측정과 수면 리포트 데이터를 문제없이 확인할 수 있는 것이며, 이를 최우선으로 각 테스트 계층에 필요한 리소스를 집중하고 있습니다. 사람이 잘할 수 있는 검증 영역과 코드로 자동화할 수 있는 영역을 구분하여 프로덕트가 늘어나고 배포 빈도가 높아지더라도 핵심 품질 기준을 유지하도록 기본 체계를 세우고 있습니다.
QAOps Life Cycle에서 Automate 프로세스를 구현하는 핵심은 에이슬립의 24시간 365일 검증 시스템입니다. Node.js 기반의 WebdriverIO 테스트 프레임워크를 활용해 구축되었습니다. 프레임워크에 대한 상세한 내용은 WebdriverIO GitHub와 공식 문서를 참고하시면 도움이 됩니다.
웹 모바일 테스트 프레임워크인 WebdriverIO와 BDD 방식을 지원하는 Cucumber 프레임워크를 활용해 Given-When-Then 형식의 시나리오 기반 테스트를 구현하고 있으며, Page Object 디자인 패턴을 적용해 유지보수성을 높였습니다. Page Object 모델은 테스트 코드와 UI 요소를 분리하여 코드 중복을 줄이고, 테스트 코드가 보다 가독성 높게 유지될 수 있도록 해줍니다. 이러한 설계 방식을 통해 대규모 테스트 코드 작성과 유지관리를 효과적으로 지원합니다. Page Object 디자인 패턴에 대한 자세한 설명은 제 블로그 글에서도 참고하실 수 있습니다.
현재 SDK 검증을 위해 다양한 E2E 테스트 케이스를 구현하고 있으며, 예를 들어 샘플 앱에서 SDK를 실행하고, 이를 통해 생성된 수면 리포트를 서버와 클라이언트 측에서 검증하는 구조로 테스트를 구성했습니다. Appium 세션을 통해 샘플 앱에서 수집한 데이터가 서버로 정상적으로 전달되고, 최종적으로 apiReport와 clientReport가 일치하는지를 비교하여 SDK가 문제없이 동작하는지 확인합니다. SDK 검증은 클라이언트에서 서버, 데이터베이스까지 확대되고 있으며, 다양한 라이브러리와 연동해 각 테스트 계층에서의 품질을 보장하는 방향으로 발전시켜나가고 있습니다.
현재 에이슬립의 자동화 검증은 크게 다섯 가지 영역에 집중하고 있습니다.
1. 슬립루틴
2. 슬립코치
3. SDK
4. 대시보드
5. API 서버
이 중에서 리액트 네이티브로 개발된 슬립코치 앱을 예로 들자면, 포그라운드와 백그라운드 전환, 오디오 인터럽트 등 다양한 상황에서 수면 측정이 정상 동작하는지를 회귀 테스트를 통해 확인합니다. Slack 채널에서는 수면 측정 테스트 결과가 24시간 365일 리포팅되며, SDK 업데이트 시 클라이언트 성능 저하 여부를 추적하기 위해 장시간 수면 측정 테스트 전후로 성능 데이터를 수집하고 관리합니다.
현재 SDK 안정성 확보를 위해 매일 6시간 주기로 슬립코치 앱을 테스트하고 있습니다. 테스트 현황을 모니터링하던 중 927초 이후 SDK가 내부적으로 측정을 종료하면서 백그라운드 전환으로 인해 포그라운드 상태를 벗어나는 이슈가 발견되었습니다. 이렇듯 자동화 시스템을 통해 사용자 환경에서 발생할 수 있는 문제를 사전에 파악하고 있으며, Slack을 통해 에러 상황에 대한 알림을 받아 빠르게 대응하고 있습니다. 다양한 회귀 테스트 시나리오를 추가 구현하여 사용자 환경에서 발생하는 다양한 유형의 이슈를 최소화시키기 위해 노력하고 있습니다.
지금까지 에이슬립의 24시간 365일 검증 시스템에 대해 소개드렸습니다. 고객사 및 사용자 환경에서 안정적인 서비스를 제공하기 위해 QA와 개발팀이 함께 노력하고 있으며, 추후 API, SDK, 모바일, 웹 기능 테스트를 위한 QAOps 테스트 인프라 구성(CICD, 대규모 병렬 분산 테스팅, 디바이스팜)과 QAOps 전체 프로세스(Plan > Automate > Package > Test > Release > Trigger > Execute > Report)에서의 시행착오와 QA와 개발팀 모두 함께 만들어낸 품질 성과도 공유할 기회를 기대하고 있습니다.
감사합니다.