배포가 덜 무서워졌다: UI 테스트 자동화 이야기
강남언니 DevOps 스쿼드가 QA 조직 없이 POM·PageFactory·IRetryAnalyzer를 도입해 iOS/Android 중복 테스트 코드 제거 및 배포 전 자동 회귀 테스트 구축
AI 요약
Context
QA 조직이 없는 구조에서 각 스쿼드가 기획부터 배포까지 담당하되, 품질 검증 없이는 지속 불가능했다. UI 변경 시 테스트 스크립트가 자주 깨지고, iOS와 Android에서 동일한 사용자 흐름도 다른 locator를 사용해야 해 시나리오가 중복되며 유지보수 비용이 기하급수적으로 증가했다.
Technical Solution
- Page Object Model(POM) 도입: 각 화면을 BasePage를 상속한 독립 클래스로 모델링하고, 화면 요소의 locator와 조작 메서드를 한곳에 집중시켜 UI 변경 시 해당 페이지 클래스만 수정
- PageFactory 라이브러리 적용: @iOSXCUITFindBy, @AndroidFindBy 어노테이션으로 플랫폼별 locator를 단일 페이지 클래스에서 관리하고 런타임에 자동 선택
- IRetryAnalyzer 인터페이스 구현: TestNG 프레임워크 활용해 네트워크 지연·디바이스 응답 차이로 인한 Flaky Test를 최대 3회까지 자동 재시도
- 실 디바이스 자동화 환경 구축: 심사용 빌드 생성 시 워크플로우 자동 트리거, 맥 미니에서 최신 빌드를 iOS/Android 디바이스에 자동 다운로드·설치 후 회귀 테스트 실행
- Slack·TestRail 통합: 앱 설치 메시지·테스트 결과(플랫폼, 버전, 소요 시간, pass/fail, 스크린샷)를 Slack에 실시간 전송하고, 상세 로그·동영상·스크린샷을 TestRail에 기록
Impact
아티클에 정량적 수치(성능 향상 %, 비용 절감 등) 미기재.
Key Takeaway
QA 조직이 없는 스쿼드 주도 개발 환경에서는 POM+PageFactory 조합으로 플랫폼 간 테스트 코드 중복을 제거하고, IRetryAnalyzer로 환경 불안정성을 격리하며, 실 디바이스 기반 CI/CD 자동화와 결과 추적성(Slack+TestRail)을 결합해야 배포 신뢰도를 확보할 수 있다.
실천 포인트
iOS/Android 듀얼 플랫폼을 지원하는 모바일 앱 개발 환경에서 POM 패턴을 기본으로 하고 PageFactory의 플랫폼별 어노테이션(@iOSXCUITFindBy, @AndroidFindBy)을 활용하면, 테스트 시나리오는 하나로 유지하면서 플랫폼별 locator 변경 시 단일 페이지 클래스만 수정해 유지보수 비용을 크게 절감할 수 있다. 추가로 IRetryAnalyzer로 네트워크·타이밍 이슈로 인한 테스트 실패를 자동 재시도해 신뢰도를 높이고, 실 디바이스 기반 CI/CD 워크플로우와 Slack+TestRail 통합으로 테스트 결과의 투명성과 추적성을 확보하면 배포 승인 문턱을 낮출 수 있다.