AI Briefing

뱅크샐러드 iOS팀이 숨쉬듯이 테스트코드 짜는 방식 1편 - 통합 UI테스트

·2022.04.18 09:00

핵심 내용

뱅크샐러드 iOS 팀이 접근성 트리를 활용한 통합 UI 테스트로 기존 코드 수정 없이 테스트 도입 딜레마를 해결했다.

자세히 보기

테스트 도입의 딜레마와 통합 UI 테스트의 역할

기존 코드베이스에 테스트가 전혀 없는 경우, 단위 테스트 작성을 위해 기존 코드를 수정해야 하고 이는 다시 버그 발생 위험을 높이는 '닭이 먼저냐 달걀이 먼저냐'는 딜레마를 낳는다. 뱅크샐러드 iOS 팀은 이 문제를 해결하기 위해 기존 코드 수정 없이 순수하게 테스트만 추가할 수 있는 통합 UI 테스트를 우선 도입했다. 이 방식은 UIKit이나 SwiftUI 사용 여부와 관계없이 적용 가능하며, 핵심 기능이 망가지는 것을 방지하는 안전망 역할을 한다.

접근성(Accessibility) 기반 테스트 원리

통합 UI 테스트가 안정적으로 작동하려면 앱의 접근성 트리가 제대로 갖춰져야 한다. UITestRunner는 시각장애인이 VoiceOver를 사용하는 것과 동일하게 접근성 트리를 통해 UI 요소를 찾는다. 따라서 VoiceOver로 사용할 수 없는 버튼은 테스트 코드에서도 찾을 수 없다. 테스트 실패 시에는 접근성 레이어를 다듬는 작업을 선행해야 하며, 이는 기존 UI 비주얼에 영향을 주지 않는 안전한 개선 과정이다.

LocalUITest부터 CI Smoke 테스트까지

뱅크샐러드는 XCUITest에 익숙해지기 위해 먼저 LocalUITest를 도입했다. 이는 CI에서 실행되지 않고 로컬에서만 실행되는 테스트로, 복잡한 절차(회원가입, 자산 연동 등)를 거쳐 특정 화면에 진입하는 과정을 자동화하여 수동 테스트의 번거로움을 줄이는 데 활용했다. 이후 팀의 숙련도가 쌓이면 CI에서 돌아가는 핵심 기능 점검용 Smoke 테스트로 확장했다. GitHub Actions을 통해 4시간마다 실행되며, 실패 시 알림을 보내는 구조다.

안정성 확보와 엣지 케이스 검증

테스트의 일관성을 위해 xcrun simctl을 사용해 특정 조건(iPhone SE 1세대, iOS 15.0 등)의 시뮬레이터 고유 ID를 추출하고 실행 환경을 고정했다. 또한, 가장 큰 글씨 크기(UIPreferredContentSizeCategoryExtraLarge)로 실행하여 수동 테스트로 놓치기 쉬운 레이아웃 버그를 발견한다. 로그 검증의 경우, 앱 내 개발자센터 기능으로 로그를 조회하고 NSPredicate를 활용해 특정 문자열을 포함하는 UI 요소의 개수를 확인하는 방식으로 정확성을 높였다.

이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.

AI 처리 방식을 확인하거나, 요약 오류와 출처 표기 문제, 삭제 요청을 문의 · 건의로 알려주세요.