스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
Xcode 테스트 보고서로 빠르게 오류 해결하기
Xcode 및 Xcode Cloud의 테스트 보고서를 통해 테스트 오류를 보다 빠르게 찾아 디버깅하고 수정하는 방법을 알아보세요. Xcode는 오류 패턴을 식별하여 문제 지점을 파악하게 해 줍니다. 또한 UI 자동화 탐색기와 비디오 녹화를 사용하여 UI 테스트 오류 원인을 알아내는 방법도 소개합니다.
챕터
- 0:00 - Introduction
- 1:06 - Test structure, configurations, and run destinations
- 4:33 - Xcode Cloud build overview
- 5:53 - Test summary
- 7:28 - Insights
- 8:07 - Unit test details
- 9:02 - UI test details
- 10:54 - Automation explorer
- 12:15 - Wrap-up
리소스
관련 비디오
WWDC23
-
다운로드
♪ ♪
Xcode의 휴먼 인터페이스 디자이너 소누입니다 Xcode 15의 새로운 테스트 보고서를 소개해 드릴게요 테스트 보고서에서는 로컬이나 Xcode Cloud 또는 다른 기기에서 실행한 테스트 결과를 볼 수 있습니다 한 가지 코드에 실행하는 단일 테스트일 수도 있고 CI에 실행하는 수천 가지 테스트일 수도 있죠 테스트 보고서에서 제공하는 테스트 결과를 통해 프로젝트 상태를 파악할 수 있으며 문제 영역을 식별하고 빠르게 오류를 해결할 수 있습니다 새로운 테스트 보고서를 살펴보기 전에 한 발짝 물러서서 Xcode의 테스트 관련 주요 용어와 개념을 짚고 넘어가죠 먼저 테스트 구조를 구성하는 개념을 이해하면 도움이 될 거예요 기본적인 내용을 설명한 후에 테스트 보고서를 살펴보고 활용법도 알아보겠습니다 테스트 메서드부터 시작하죠 테스트 메서드는 소스 코드의 유효성을 검사하고 테스트 결과를 생성하는 개별 테스트나 메서드입니다 다음은 테스트 클래스입니다 테스트 클래스는 테스트 메서드의 그룹이며 보통 테스트 영역을 기반으로 그룹화되죠 다음은 테스트 번들입니다 테스트 번들은 하나 이상의 테스트 클래스로 구성됩니다 각 번들은 단위 테스트와 UI 테스트 중 하나를 포함하죠 단위 테스트를 통해 단일 코드를 검증할 수 있습니다 일반적으로 함수죠 단위 테스트는 짧고 간단하며 빠르게 실행됩니다 UI 테스트는 앱의 사용자 대면 행동을 관찰합니다 여러분의 의도대로 앱이 작동하는지 확인할 수 있죠 테스트 번들이 UI 테스트를 포함한다고 해 봅시다 최상위 레벨은 테스트 계획입니다 테스트 계획에는 하나 이상의 테스트 번들이 포함돼요 단위 테스트와 UI 테스트를 모두 포함할 수 있죠 테스트 계획의 구성을 설정하면 테스트를 다양한 조건에서 효율적으로 실행할 수 있어요 구성은 테스트 계획에서 중요한 부분입니다 구성을 통해 Xcode의 테스트 런타임을 설정할 수 있죠 예를 들어 다양한 언어와 위치 설정으로 앱을 테스트하여 전 세계에서 앱이 작동하는지 확인할 수 있습니다 코드 커버리지도 테스트할 수 있으므로 개발 과정에서 코드의 품질과 커버리지를 파악할 수 있죠 테스트를 여러 번 실행하도록 설정할 수도 있습니다 사용자가 앱을 몇 번째로 사용하든 상관없이 앱의 모든 요소가 안정적으로 작동하는지 확인할 수 있죠 구성 다음은 실행 대상입니다 실행 대상은 테스트가 실행되는 기기를 말해요 Xcode의 IDE에서 테스트를 하면 대상을 하나만 정할 수 있는데요 Xcode Cloud와 Xcode 빌드 커맨드를 사용하면 실행 대상을 여러 개 정할 수 있습니다 기본적인 내용을 살펴봤으니 테스트와 구성, 실행 대상이 함께 작동하는 방식을 알아볼게요 아까 설명한 것과 동일한 테스트 계획을 쓴다고 해 보죠 저는 제 앱에 다양한 언어를 지원하고자 하는데요 앱이 제대로 작동하는지 확인하기 위해 지원하려는 언어에 대한 구성을 생성했습니다 첫 번째는 영어입니다 세 개의 실행 대상에 테스트한다고 가정해 보죠 구성이 활성화된 상태로 각 기기에 한 번씩 테스트를 실행합니다 모든 메서드는 테스트 결과를 남기고 종료됩니다 통과, 실패, 건너뜀 예상된 실패 중 하나죠 저는 앱에 몇 가지 언어를 더 지원하고 싶어서 테스트 계획 구성을 각 언어에 생성했어요 그러면 Xcode에서 각 구성과 실행 대상에 대해 테스트 계획을 전체적으로 한 번 실행하고 행렬에 결과가 입력됩니다 자세히 보면 모든 테스트 메서드와 구성 실행 대상의 조합에 대한 결과가 생성되었죠 이러한 개별 인스턴스를 테스트 메서드 실행이라고 합니다
테스트 실행은 코드 한 개에 대한 단일 테스트뿐만 아니라 여러 구성과 여러 대상에 대한 수천 가지 테스트의 스위트를 통째로 포함하기도 합니다 제가 든 예시처럼요 새로운 테스트 보고서를 통해 테스트 개수와 상관없이 테스트 실행을 쉽게 이해할 수 있습니다 테스트 실행을 훌륭하게 요약해 주기 때문에 세부 사항을 살펴보기 전에 전체적인 흐름을 파악할 수 있죠 또한 중요한 패턴을 강조하여 문제에 어떻게 접근할지 쉽게 알 수 있습니다 테스트 작업과 오류 정보 스크린샷 등을 모두 한곳에서 확인할 수 있죠 마지막으로 개선된 UI 테스트 디버깅 도구는 보다 자세한 오류 정보를 제공합니다 지금까지 수많은 테스트 관련 개념과 테스트 보고서의 이점을 알아봤습니다 이제 실제로 사용해 보죠 저는 iOS 앱인 Backyard Birds의 새로운 기능을 개발 중인데요 방금 든 예시처럼 Backyard Birds를 다양한 언어로 사용할 수 있게 만들고자 해요 더 많은 언어를 지원하기 위해 로컬과 Xcode Cloud에서 테스트하여 오류가 없는지 확인했습니다 CI 실행 화면을 함께 보시죠 저는 끌어오기 요청 시 여러 단위 테스트를 자동으로 실행하도록 워크플로를 설정했습니다 Build Overview를 보면 워크플로의 시작점과 코드 변경 사항 변경 사항이 발생한 워크플로를 빠르게 파악할 수 있습니다 이 빌드에서 제 작업이 어떻게 수행됐는지도 볼 수 있죠 이런, 몇 가지 테스트가 실패했네요 확인해 봅시다
새로운 테스트 보고서로 테스트 작업을 확인할게요 테스트 요약을 살펴보죠 테스트 요약을 통해 테스트 실행을 전체적으로 파악할 수 있습니다
테스트 환경을 쉽게 이해할 수 있고 Insight를 통해 테스트에서 발견된 중요한 패턴을 알아볼 수 있죠 Insight는 Xcode에서 모든 구성 및 실행 대상의 테스트 결과를 분석하며 발견한 패턴을 보여 줍니다 특정 기준에 따라 결과를 그룹화하죠 두 가지 유형의 Insight를 살펴볼게요 Common Failure Pattern과 Longest Test Runs입니다 Common Failure Pattern의 테스트 그룹화는 실패 메시지의 유사성에 기반합니다 Longest Test Runs는 테스트 번들의 어떤 테스트가 다른 테스트보다 오래 걸렸는지 알려 주죠 테스트 섹션에서는 테스트가 어떻게 수행되었는지 확인할 수 있습니다 테스트 계획을 더 자세히 살펴볼 수도 있죠 테스트 반복이나 성능 메트릭 등 제 테스트 계획의 특성도 알 수 있습니다 여러 실행 대상과 구성을 사용해 테스트할 경우 각 실행이 어떻게 수행되었는지 파악하기 어려울 수 있는데요 열 지도를 쓰면 각 기기와 구성에 대한 테스트 결과를 빠르게 확인할 수 있습니다 색상과 테스트 결과 개수를 보고 해당 실행을 다른 실행과 비교할 수 있죠 테스트 실패가 발생한 경우도 테스트 요약에서 빠르게 확인할 수 있습니다 눈에 띄는 실패 메시지가 있다면 이 섹션에서 조사를 시작할 수 있죠 실패 얘기가 나와서 말인데 제가 앞서 Insight를 확인했을 때 첫 번째 Insight가 눈에 띄더군요 세 개의 테스트에서 유사한 실패 메시지가 나타났다고 했죠 테스트가 실패한 원인을 알아보겠습니다 Insight를 선택하면 더 자세한 정보가 나타납니다 모든 테스트에서 나타난 실패 메시지를 확인할 수 있고 실패한 테스트도 볼 수 있죠 또한 어떤 구성과 실행 대상이 이러한 테스트 실패를 일으켰는지 파악할 수 있습니다 테스트에서 유사한 실패 메시지가 나타난 이유를 이 정보를 통해 알아낼 수 있겠죠 이제 테스트 메서드 실행 중 하나를 확인해 봅시다 테스트 메서드 실행을 선택하면 testGardenSupplies()의 테스트 세부 정보 뷰가 나타납니다 테스트 세부 정보 뷰는 단일 테스트 메서드의 결과를 상세히 보여 줍니다 여기서 테스트 세부 정보와 실패 정보를 확인하고 디버깅을 시작할 수 있죠 헤더를 통해 모든 구성 및 실행 대상에 대한 콘텍스트를 확인할 수 있어요 Runs 뷰에서는 이 메서드가 각 구성 및 실행 대상에서 어떻게 수행됐는지 살펴볼 수 있습니다 또한 해당 테스트 메서드 실행에서 발생한 실패 메시지와 호출 스택도 확인할 수 있죠 실패 메시지와 호출 스택은 디버깅에 유용한 도구입니다 실패 원인을 밝히는 데에 핵심적인 요소죠 호출 스택을 통해 소스 코드로 다시 진입하여 실패를 계속 조사할 수 있어요 저는 단위 테스트뿐만 아니라 로컬에서 UI 테스트도 실행하여 Backyard Birds가 고객의 기대에 부응하고 다양한 플랫폼과 기기에서 제대로 작동하는지 확인했습니다 로컬 테스트 실행도 검토해 볼까요? 이 테스트 실행에서도 테스트 요약을 통해 내용을 확인할 수 있습니다 상단에 환경 정보와 Insight가 있고 하단에는 테스트 섹션이 있습니다 테스트 섹션의 첫 번째 실패가 눈에 띄네요 테스트에서 버튼을 찾을 수 없다는 실패 메시지가 있었군요 한번 확인해 보죠 실패를 선택한 후 testClickTabsAfterSearch()에서 테스트 세부 정보 뷰를 찾았습니다 UI 테스트의 경우 테스트 세부 정보로 이동하면 Activities 탭이 표시됩니다 테스트 보고서의 놀라운 신기능으로 오류를 파악하고 해결할 수 있게 하죠 Activities 탭에는 세 가지 섹션이 있습니다 테스트 작업과 자동화 탐색기, 스크러버죠
테스트 작업은 테스트 내용을 타임라인 형식으로 보여 줍니다 첫 번째 행이 테스트 시작점이고 마지막 행이 종료 지점이죠 그 사이의 행이 테스트에서 발생한 이벤트입니다 다음은 자동화 탐색기입니다 자동화 탐색기를 통해 해당 테스트 작업의 비디오를 재생할 수 있습니다 테스트의 전체 과정을 다시 볼 수 있죠 마지막으로 스크러버는 테스트 실행을 선형으로 나타낸 것입니다 스크러버를 사용해 탭과 밀기 동작, 클릭 등 테스트 이벤트를 찾을 수 있죠 게다가 테스트 대상 기기의 방향이 바뀔 때도 강조 표시 합니다 스크러버 위의 실패 아이콘을 통해 어느 지점에서 실패가 발생했는지 알 수 있고요 이러한 지표를 통해 테스트 실행의 중요한 순간들을 쉽게 발견하고 앱의 상호작용이 잘 이루어지는지 확인할 수 있습니다 이와 같은 신기능으로 테스트 보고서는 상호적인 디버깅 경험을 제공합니다 오류 해결에 어떻게 도움이 되는지 알아보죠 Activities 탭에서 이벤트를 클릭하면 비디오 재생의 해당 프레임으로 자동화 탐색기가 업데이트됩니다 테스트 내내 일어난 일을 시각적으로 파악할 수 있죠 게다가 스크러버도 해당 지점으로 이동합니다 그래서 테스트 실행 중 이벤트가 발생한 지점에 대한 콘텍스트를 확보할 수 있죠 저는 오류를 디버깅할 때 오류가 발생하는 순간을 확인하는 편이에요
테스트 실행을 지켜보면서 예상하지 못한 이유로 오류가 발생했는지 확인합니다 비디오를 재생해 보니 문제가 없는 것 같네요
이 실패 메시지에 따르면 UI에 'Account' 버튼이 나타나지 않았다고 합니다 오류가 발생했을 때 기기에 무슨 일이 있었는지 자동화 탐색기에서 확인할 수 있어요 Account 버튼이 보이고 경계 상자가 떠 있네요 경계 상자를 클릭하면 해당 UI 요소에 대한 정보가 나타납니다 여기서 이 요소와 관련한 식별자 및 계층 정보를 확인할 수 있죠 이 정보를 보니 Account 버튼에 레이블을 잘못 지정한 것 같군요 이제 프로젝트 소스로 이동하여 오류를 해결하면 됩니다 새로운 테스트 보고서로 테스트를 쉽게 이해할 수 있었네요 단 몇 분 만에 실패한 테스트를 발견하고 해결책을 찾아 오류를 수정했죠 오류는 로컬이나 CI에서 발생할 수 있으므로 두 곳 모두 테스트하는 게 가장 좋은데요 다행히 테스트 보고서는 Xcode와 Xcode Cloud에서 사용 가능합니다 시간은 소중하잖아요 테스트 보고서에 추가된 새로운 기능을 통해 테스트 실행을 빠르게 이해할 뿐만 아니라 문제 영역을 식별하고 빠르게 오류를 해결해 보세요 시청해 주셔서 감사해요 남은 WWDC도 즐기시길 바랍니다 ♪ ♪
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.