iOS 자동화 테스트 Xcode UI 프레임 워크

⚡ 스마트 요약

iOS 자동화 테스트 Xcode 테스트 주도 설계, 테스트, 구현 및 재테스트 주기에 따라 모든 테스트 케이스가 통과될 때까지 테스트 대상 애플리케이션에 대한 사용자 인터페이스 동작을 기록하고 재생합니다.

  • 🔘 TDD 주기: 설계, 테스트, 구현, 그리고 다시 테스트는 iOS 애플리케이션 테스트에 적용되는 네 가지 단계입니다.
  • ☑️ 전제 조건 : OS X가 설치된 Mac Xcode IDE, 자동화 프레임워크 및 iOS SDK가 설치되어 있습니다.
  • ✅ 계측기 경로: 자동화 도구는 스크립트를 기록하고, 스크립트 로그에 표시하며, 필요에 따라 재생합니다.
  • 🧪 OCUnit 경로: Objective-C로 작성된 유닛 테스트 번들 대상, 활성 스키마, 테스트 그룹 및 테스트 클래스입니다.
  • ⚠️ 천칭: UIAutomation 도구는 더 이상 사용되지 않습니다. Xcode 8 버전이 삭제되었으며, XCUITest가 지원되는 후속 버전입니다.
  • 🛠️ 현대적 표현: UI 테스트 번들 대상과 XCUIApplication 쿼리가 기록된 Instruments 스크립트를 대체합니다.

iOS 자동화 테스트 Xcode UI 자동화 프레임워크가 앱에서 기록된 스크립트를 실행합니다.

iOS 자동화 테스트를 사용한 Xcode

iOS 애플리케이션의 품질을 보장하려면 아래 그림에 나와 있는 테스트 주도 개발 프로세스를 따라야 합니다.

iOS 자동화 테스트를 위한 테스트 주도 개발 주기(TDD)는 설계, 테스트, 구현 및 재테스트 단계를 보여줍니다.

테스트 주도 개발(TDD)은 테스트 이 모델은 iOS 애플리케이션 테스트에 적용되며, 더 넓은 범위의 테스트 관행에 속합니다. 모바일 테스트이 모델에서 테스터는 아래의 4단계를 따라야 합니다.

  • 디자인 : 테스트하고 싶은 대상을 파악하고 테스트 케이스를 설계하세요.
  • 테스트 : 모든 테스트를 실행하고 테스트 케이스가 실패하는지 확인하십시오.
  • 도구: Rev코드를 실행하고 테스트 실패의 원인이 된 버그를 수정하세요.
  • 다시 테스트해 보세요: 테스트가 실패하면 설계 단계로 되돌아갑니다. 모든 테스트 케이스가 통과하면 코드는 테스트 대상 요구 사항을 모두 충족합니다.

설정 Xcode UI 테스트를 위한 프로젝트

iOS 테스트 프로그램을 만들려면 Mac이 필요합니다. Mac에는 다음 프로그램이 이미 설치되어 있어야 합니다.

  • OS X — 맥용 운영 체제.
  • Xcode IDE — iOS 개발 도구.
  • 자동화된 테스트 프레임워크 — UI 자동화, OCUnit 등.
  • iOS SDK 4 이상.

⚠️ 버전 참고: 위의 전제 조건은 다음에 나오는 두 개의 튜토리얼이 작성되었던 시대의 툴체인을 설명합니다. 최신 Mac에서는, Xcode XCTest 및 XCUITest 프레임워크는 기본적으로 제공되며, 별도의 UI 자동화 도구는 더 이상 설치에 포함되지 않습니다. 기존 설치 단계는 프레임워크 작동 방식을 설명하기 위해 아래에 그대로 유지되었으며, 최신 설치 방법은 그 아래에서 자세히 설명합니다.

UI 자동화 프레임워크를 사용하여 iOS 자동화를 만드는 방법

아래의 8단계는 자동화 도구를 사용하여 스크립트를 기록하고 테스트 대상 애플리케이션에 대해 재생하는 방법입니다.

1단계) 계측기 실행

X를 엽니다Code -> 개발자 도구 열기 -> 계측

개방 도구 Xcode 개발자 도구 메뉴를 엽니다

2단계) 자동화 기기 추가

계측기 창에서 자동화 계측기를 선택합니다.

계측기 템플릿 선택기에서 자동화 계측기를 선택합니다.

테스트 스크립트를 생성하려면 녹음하거나 테스트 시나리오 또는 수동으로 프로그래밍할 수도 있습니다.

3 단계) 빨간색 버튼을 누릅니다.

악기가 작동 중입니다. 즉시 녹음을 중지하세요. 녹음을 시작하려면 빨간색 버튼을 누르세요.

악기 도구 모음에 있는 빨간색 버튼은 녹음을 시작하고 중지하는 데 사용됩니다. trace

4단계) 새 스크립트 만들기

스크립트 창에서 [추가] > [만들기]를 클릭하여 새 스크립트를 만듭니다.

새 자동화 스크립트를 추가하려면 Instruments Scripts 창의 Add 및 Create 메뉴를 사용하세요.

5단계) 대상을 선택하세요

당신은 지금 Trace 창. 선택 기능을 사용하세요. Target 아래로 당겨서 앱의 디버깅 버전으로 이동하세요.

왼쪽 메뉴에서 Target 도구 메뉴에서 아래로 당기세요 Trac디버그 빌드를 가리키는 창

이 경우 애플의 샘플 단순드릴다운 이 앱은 테스트 대상 애플리케이션으로 사용됩니다. 앱의 사용자 인터페이스(GUI)는 아래와 같습니다.

테스트 대상 애플리케이션으로 SimpleDrillDown 샘플 애플리케이션 인터페이스가 사용되었습니다.

6단계) 스크립트 기록 시작

도구 상단이나 하단에 있는 녹음 버튼을 눌러 스크립트를 녹음하세요.

Instruments 창 가장자리에 있는 녹음 버튼을 누르면 스크립트 캡처가 시작됩니다.

이제 테스트 대상 애플리케이션에서 몇 가지 UI 작업을 수행할 수 있으며 스크립트가 기록됩니다.

7단계) 스크립트 보기

스크립트를 보려면 TraceLog/EditorLog 드롭다운 메뉴를 열고 스크립트 로그 보기로 전환하세요.

Trac스크립트 로그 보기로 전환하는 데 사용되는 e 로그 및 편집기 로그 드롭다운 메뉴

녹음된 스크립트를 볼 수 있습니다.

Instruments 스크립트 로그 보기에서 표시되는 UI 자동화 스크립트입니다.

8단계) 스크립트 재생

재생 버튼을 누르세요. 스크립트가 실행되고, 로그가 나타난 후 중지할 수 있습니다.

Instruments 창에 로그 출력과 함께 녹화된 자동화 스크립트가 재생됩니다.

⚠️ 역사적 참고 사항: 이 여덟 단계에 사용된 자동화 장비는 더 이상 사용되지 않습니다. Xcode 8 버전 이후 삭제되었으므로 현재 버전에는 더 이상 존재하지 않습니다. Xcode 설치 과정입니다. 프레임워크 작동 방식을 기록하기 위해 단계별 설명이 여기에 남아 있습니다. 새로운 작업을 진행하려면 이 페이지 하단에 있는 XCUITest 워크스루를 참조하십시오.

OCUnit 프레임워크를 사용하여 iOS 자동화를 생성하는 방법

두 번째 방법은 테스트를 내부에 배치합니다. Xcode Instruments 내부가 아닌 프로젝트 자체를 개발하는 것입니다.

1단계) 시작 Xcode IDE, 유닛 테스트 번들 대상 추가

기존 대상에 단위 테스트 번들 대상 추가하기 Xcode 프로젝트

2단계) 새 단위 테스트 번들의 이름을 작성하세요. 위 그림과 같이 표시한 다음 마침을 클릭합니다.

3단계) ​​단위 테스트를 활성 대상으로 지정합니다.

단위 테스트 번들을 활성 대상으로 선택합니다. Xcode

4단계) 테스트 클래스용 그룹을 추가합니다.

iOS 유닛 테스트 클래스를 위한 프로젝트 그룹 생성

5단계) 단위 테스트 클래스 추가

테스트 그룹 내에 새 단위 테스트 클래스 파일을 추가합니다. Xcode

6단계) 이제 구현을 시작하세요

빈 단위 테스트 클래스 Xcode 테스트 구현을 위한 편집기 준비 완료

OCUnit은 Objective-C 언어를 사용하여 테스트 프로그램을 작성하므로 개발자는 해당 언어를 알아야 합니다. Xcode 버전 배송 단위 테스트 Objective-C와 Swift하지만 이 여섯 단계에서 보여지는 대상-클래스 구조는 변경되지 않습니다.

UIAutomation과 XCUITest의 차이점은 무엇일까요?

위에서 사용한 두 프레임워크 모두 애플 툴체인의 이전 세대에 속하기 때문에, 무엇이 이들을 대체했는지, 그리고 그 이유는 무엇인지 정확히 밝히는 것이 중요합니다.

아래 UI 자동화(도구) XCUITest
Status 더 이상 사용되지 않음 Xcode 8 버전부터 이후 버전에서는 삭제되었습니다. Apple에서 지원하는 UI 테스트 프레임워크
테스트가 있는 곳 Instruments 내의 스크립트 trac전자 문서 UI 테스트 번들 대상 내부에 있는 Xcode 프로젝트
Language JavaScript Swift 또는 Objective-C
테스트 러너 자동화 기기 XCTest는 유닛 테스트와 동일한 실행기입니다.
지속적인 통합 어색함 — Instruments를 통해 구동됨 명령줄에서 유닛 테스트와 함께 실행됩니다.
녹음 악기 도구 모음의 녹음 버튼 녹화 버튼 Xcode 출력하는 편집기 Swift

실질적인 결과는 XCUITest 스위트가 일반 프로젝트 소스 코드와 같다는 것입니다. 나머지 코드베이스와 마찬가지로 검토, 버전 관리 및 실행이 이루어지며, 이것이 바로 기록되는 주된 이유입니다.trace 모델이 사라졌습니다.

XCUITest를 사용하여 iOS UI 테스트를 작성하는 방법

Instruments의 8단계 기법에 해당하는 현대적인 표현은 간결합니다. 아래 구조는 녹음 후 재생이라는 동일한 개념을 반영하지만, 출력은 원본 파일이 아닌 소스 파일입니다. trace.

  1. 대상을 추가하세요. In Xcode 파일 > 새로 만들기 >를 선택하세요 Target UI 테스트 번들 템플릿을 선택하거나 새 프로젝트를 만들 때 테스트를 포함하는 옵션을 선택하세요.
  2. 생성된 테스트 클래스를 엽니다. Xcode 설정 및 테스트 메서드가 비어 있는 XCTestCase 서브클래스를 생성합니다.
  3. 테스트 중인 앱을 실행하세요. XCUIApplication 인스턴스를 생성하고 해당 인스턴스에서 launch 메서드를 호출하면 앱이 별도의 프로세스에서 시작됩니다.
  4. 문의하고 조치를 취하세요. 요소 쿼리를 통해 버튼, 테이블, 고정 텍스트와 같은 요소에 접근하고, 해당 요소에 대해 탭, typeText 또는 스와이프 이벤트를 호출할 수 있습니다.
  5. 주장하다. XCTAssert를 사용하여 작업 후 예상되는 요소가 존재하는지 확인하십시오.
  6. 운영. 다음에서 테스트를 실행하세요. Xcode 테스트 네비게이터를 사용하거나 명령줄에서 실행하여 동일한 테스트 스위트를 지속적 통합 환경에서 실행할 수 있습니다.

최소한의 테스트는 다음과 같은 형태를 따릅니다.

import XCTest

final class AppUITests: XCTestCase {

    func testTappingFirstRowShowsDetail() {
        let app = XCUIApplication()
        app.launch()

        // act on the first row of the list
        app.tables.cells.element(boundBy: 0).tap()

        // verify that the next screen appeared
        XCTAssertTrue(app.staticTexts.firstMatch.waitForExistence(timeout: 5))
    }
}

레코더는 여전히 존재합니다. 테스트 메서드 안에 커서를 놓고 에디터에서 레코더 버튼을 누르면 이러한 쿼리가 자동으로 생성되는데, 이는 위 6단계의 직접적인 결과입니다. 더 넓은 원칙은 다음과 같습니다. 자동화 테스트 변경 없이 그대로 적용합니다.

UI 자동화 샘플 Code

이 글에는 몇 가지 소스 코드 예제가 포함되어 있습니다. 이 예제들을 통해 튜토리얼을 더욱 명확하고 빠르게 이해할 수 있을 것입니다.

UI 자동화 샘플 — UI 자동화 데모용 테스트 스크립트입니다.

자주 묻는 질문

그렇지 않습니다. Xcode iOS 시뮬레이터는 다음 환경에서만 실행됩니다. macOS따라서 로컬 환경이나 호스팅된 빌드 머신으로 Mac이 필요합니다. 클라우드 디바이스 팜과 호스팅 CI 제공업체가 존재하는 이유는 Mac 하드웨어가 없는 팀도 해당 제품군을 실행할 수 있도록 하기 위함입니다.

머신러닝 모델은 화면이 변경될 때 대체 요소 쿼리를 제안하고, 불안정한 오류를 근본 원인별로 분류하며, 실패한 실행 중 어떤 것이 실제 회귀 오류인지 순위를 매깁니다. 이는 UI 스위트에서 중요한데, 작은 레이아웃 수정으로 인해 여러 선택기가 동시에 작동하지 않게 되는 경우가 있기 때문입니다.

이 도구는 테스트 클래스 스캐폴딩, 실행 인자, 페이지 객체 래퍼 및 어설션 보일러플레이트와 같은 반복적인 부분을 잘 처리합니다. 요소 식별자는 여전히 실제 앱과 일치해야 하므로 생성된 모든 쿼리는 신뢰할 수 있게 되기 전에 실행 중인 빌드와 비교하여 검증해야 합니다.

Appium XCUITest 드라이버를 통해 iOS를 구동하며, 이는 기존의 UIAutomation 드라이버를 대체했습니다. 이러한 방식의 장점은 iOS 및 iOS용 크로스 플랫폼 테스트 언어가 하나라는 점입니다. Android그 대신 테스트와 애플 자체 실행기 사이에 추가적인 단계가 생깁니다.

단위 테스트는 앱 프로세스 내에서 실행되며 코드를 직접 호출합니다. UI 테스트는 앱을 별도의 프로세스로 실행하고 인터페이스를 통해서만 상호 작용하므로 속도는 느리지만 사용자가 실제로 경험하는 내용을 검증합니다.

시뮬레이터는 파이프라인의 대부분 기능 흐름에서 더 빠르고 효과적입니다. 하지만 카메라, 생체 인식, 푸시 알림, 성능 및 하드웨어 센서 관련 기능에는 실제 기기가 필요하므로 대부분의 팀은 개발 주기의 여러 단계에서 시뮬레이터와 실제 기기를 모두 사용합니다.

각 테스트는 앱을 다시 시작하고 애니메이션이 완료될 때까지 기다립니다. 레이블 일치 대신 접근성 식별자를 설정하고, 대기 시간 대신 요소 존재 여부를 기다리면 안정성이 향상됩니다.ping테스트 간 상태를 재설정하고 각 테스트 케이스가 하나의 여정에 집중하도록 합니다.

언어와 요소 모델이 다르기 때문에 직접적으로는 불가능합니다. 일반적으로는 기존 스크립트를 의도된 테스트 범위에 대한 문서로 보관한 다음, 프로덕션 환경에서 가장 자주 실패하는 여정부터 시작하여 각 시나리오를 XCUITest 케이스로 다시 작성하는 방식을 사용합니다.

이 게시물을 요약하면 다음과 같습니다.