View a markdown version of this page

iOS용 XCTest UI를 Device Farm과 통합 - AWS Device Farm

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

iOS용 XCTest UI를 Device Farm과 통합

Device Farm은 XCTest UI 테스트 프레임워크를 지원합니다. 특히, Device Farm은 Objective-C와 Swift로 작성된 XCTest UI 테스트를 지원합니다.

XCTest UI 프레임워크는 XCTest를 기반으로 구축된 iOS 개발에서 UI 테스트를 지원합니다. 자세한 내용은 iOS 개발자 라이브러리의 사용자 인터페이스 테스트를 참조하세요.

Device Farm의 테스트에 대한 일반적인 정보는 AWS Device Farm의 테스트 프레임워크 및 내장 테스트 섹션을 참조하세요.

다음 지침에 따라 Device Farm을 iOS용 XCTest UI 테스트 프레임워크와 통합합니다.

iOS XCTest UI 테스트 준비

.ipa XCTEST_UI 테스트 패키지에 대한 파일 또는 .zip 파일을 업로드할 수 있습니다.

.ipa 파일은 iOS Runner 앱을 번들 형식으로 포함하는 애플리케이션 아카이브입니다. 추가 파일은 .ipa 파일에 포함될 수 없습니다.

.zip 파일을 업로드하는 경우 iOS Runner 앱 또는 .ipa 파일을 직접 포함할 수 있습니다. 테스트 중에 사용하려는 경우 파일 내에 다른 .zip 파일을 포함할 수도 있습니다. 예를 들어 .zip 파일 내의 .xctestrun, .xcworkspace 또는 .xcodeproj 같은 파일을 포함하여 Device Farm에서 XCUI 테스트 계획을 실행할 수 있습니다. 테스트 계획을 실행하는 방법에 대한 자세한 지침은 XCUI 테스트 유형의 기본 테스트 사양 파일에서 확인할 수 있습니다.

옵션 1: XCTest UI .ipa 패키지 생성

yourAppNameUITest-Runner.app 번들은 테스트용 프로젝트를 빌드할 때 Xcode에서 생성합니다. 프로젝트의 제품 디렉터리에서 찾을 수 있습니다.

.ipa 파일을 생성하는 방법:

  1. 이름이 Payload인 디렉터리를 생성합니다.

  2. 앱 디렉터리를 Payload 디렉터리에 추가합니다.

  3. Payload 디렉터리를 .zip 파일에 아카이빙한 다음 파일 확장자를 .ipa로 변경하세요.

다음 폴더 구조는 my-project-nameUITest-Runner.app이라는 예제 앱을 .ipa 파일로 패키징하는 방법을 보여줍니다.

. └── my-project-nameUITest.ipa └── Payload (directory) └── my-project-nameUITest-Runner.app

옵션 2: XCTest UI .zip 패키지 생성

Device Farm은 전체 XCTest UI 테스트 제품군을 실행하기 위한 .xctestrun 파일을 자동으로 생성합니다. Device Farm에서 자체 .xctestrun 파일을 사용하려면 .xctestrun 파일과 앱 디렉터리를 .zip 파일로 압축하면 됩니다. 테스트 패키지에 대한 .ipa 파일이 이미 있는 경우 *-Runner.app 대신 여기에 포함할 수 있습니다.

. └── swift-sample-UI.zip (directory) ├── my-project-nameUITest-Runner.app [OR] my-project-nameUITest.ipa ├── SampleTestPlan_2.xctestrun ├── SampleTestPlan_1.xctestrun └── (any other files)

Device Farm에서 XCUI 테스트에 대한 Xcode 테스트 계획을 실행하려면 my-project-nameUITest-Runner.app 또는 my-project-nameUITest.ipa 파일과 테스트 계획으로 XCTEST_UI를 실행하는 데 필요한 xcode 소스 코드 파일(.xcworkspace 또는 .xcodeproj 파일 포함)이 포함된 zip을 생성할 수 있습니다.

다음은 .xcodeproj 파일을 사용하는 샘플 zip입니다.

. └── swift-sample-UI.zip (directory) ├── my-project-nameUITest-Runner.app [OR] my-project-nameUITest.ipa ├── (any directory) └── SampleXcodeProject.xcodeproj ├── Testplan_1.xctestplan ├── Testplan_2.xctestplan └── (any other source code files created by xcode with .xcodeproj)

다음은 .xcworkspace 파일을 사용하는 샘플 zip입니다.

. └──swift-sample-UI.zip (directory) ├── my-project-nameUITest-Runner.app [OR] my-project-nameUITest.ipa └── (any directory) │ ├── SampleXcodeProject.xcodeproj │ ├── Testplan_1.xctestplan │ ├── Testplan_2.xctestplan | └── (any other source code files created by xcode with .xcodeproj) └── SampleWorkspace.xcworkspace └── contents.xcworkspacedata
참고

XCTest UI .zip 패키지 내에 'Payload'라는 디렉터리가 없는지 확인하세요.

iOS XCTest UI 테스트 실행(콘솔)

Device Farm 콘솔을 사용하여 테스트를 업로드하세요.

  1. https://console.aws.amazon.com/devicefarm에서 Device Farm 콘솔에 로그인하세요.

  2. 탐색 창에서 모바일 디바이스 테스트를 선택하고 프로젝트를 선택하세요.

  3. 프로젝트 목록에서 테스트를 업로드할 프로젝트를 선택하세요.

    작은 정보

    검색 창을 사용하여 인스턴스 목록을 이름별로 필터링할 수 있습니다.

    프로젝트를 생성하려면, AWS Device Farm에서 프로젝트 생성의 지침을 따르세요.

  4. 실행 생성을 선택합니다.

  5. 앱 및 실행 유형 선택실행 유형 섹션에서 iOS 앱을 선택합니다.

  6. 앱 선택 섹션의 앱 선택 옵션에서 자체 앱 업로드를 선택합니다. 그런 다음 앱 업로드에서 파일 선택을 선택합니다.

  7. Android 또는 iOS 앱 파일을 찾아 선택하세요. 파일은 .ipa 파일이어야 합니다.

    참고

    .ipa 파일은 시뮬레이터가 아닌 iOS 디바이스용으로 빌드되어야 합니다.

  8. 테스트 구성테스트 프레임워크 선택 섹션에서 XCTest UI를 선택하세요. 그런 다음 앱 업로드에서 파일 선택을 선택합니다.

  9. iOS XCTest UI 테스트 러너가 포함된 .ipa 또는 .zip 파일을 찾아 선택하세요.

  10. (선택 사항) 실행 수준 속성을 구성하려면 실행 설정 섹션을 업데이트합니다.

    1. 실행이 완료된 후 Device Farm이 Test Insights 보고서를 생성하도록 하려면 테스트 보고서 생성을 활성화합니다. 이 옵션은 사용자 지정 테스트 환경에서만 사용할 수 있습니다.

      다음 사전 조건이 적용됩니다.

      1. 테스트에서 Xcode .xcresult 번들을 생성하여에 기록해야 합니다$DEVICEFARM_DERIVED_DATA_PATH. 예를 들어를 -derivedDataPath $DEVICEFARM_DERIVED_DATA_PATH에 전달합니다xcodebuild. 기본 구성을 유지하면 기본 XCTest UI 테스트 사양이이 번들을 자동으로 생성하고 저장합니다.

      보고서 보기에 대한 자세한 내용은 섹션을 참조하세요테스트 보고서 보기(콘솔).

  11. 실행 생성 프로세스의 나머지 단계를 완료하여 설치하세요. 테스트할 디바이스를 선택하고 선택적으로 추가 구성을 지정합니다.

  12. 실행 생성을 선택합니다. Device Farm은 테스트를 실행하고 콘솔에 결과를 표시합니다.

테스트 보고서 보기(콘솔)

  1. https://console.aws.amazon.com/devicefarm에서 Device Farm 콘솔에 로그인하세요.

  2. 탐색 창에서 모바일 디바이스 테스트를 선택하고 프로젝트를 선택하세요.

  3. 검사할 실행이 포함된 프로젝트를 선택합니다.

  4. 완료된 실행을 선택하여 세부 정보를 엽니다.

  5. 완료된 작업 중 하나를 선택하여 해당 디바이스의 결과를 엽니다.

테스트 인사이트가 활성화된 경우

작업 결과에는 테스트 보고서 탭이 포함됩니다. 이를 선택하면 총 테스트 수, 통과 및 실패한 테스트 수, 총 테스트 실행 시간, 테스트 실행 시간 중앙값을 포함한 테스트 결과 요약을 볼 수 있습니다. 요약 아래에 테스트 테이블에는 테스트별 분류가 표시됩니다.

완료된 XCTest UI 작업에 대한 테스트 보고서 탭의 첫 번째 열 세트입니다.
완료된 XCTest UI 작업에 대한 테스트 보고서 탭의 나머지 열입니다.

테스트 테이블의 각 행에는 다음 열이 포함됩니다.

  • 결과 - 테스트가 통과, 실패 또는 건너뛰었는지 여부입니다.

  • 테스트 클래스 - 테스트가 속한 클래스입니다.

  • 테스트 이름 - 테스트 방법의 이름입니다.

  • 스택 추적 - 실패한 테스트의 경우 실패의 스택 추적에 대한 링크입니다.

  • 기간 - 테스트를 실행하는 데 걸린 시간입니다.

  • 시작 시간종료 시간 - 테스트가 시작 및 종료된 시간입니다.

  • 프레임워크 결과 - XCTest 프레임워크가 테스트에 대해 보고한 결과 문자열입니다.

  • 테스트 번들 - 테스트가 속한 테스트 번들입니다.

  • 노드 식별자 - 테스트 케이스의 xcresult 노드 식별자입니다.

이름, 클래스 또는 상태별로 테스트를 검색할 수 있습니다. 표시되는 열을 선택하려면 설정 아이콘을 선택합니다. 설정에서 표시할 열을 선택하고 클래스별 그룹화를 켜거나 끌 수 있습니다. 클래스별 그룹화는 기본적으로 켜지며, 테스트 클래스별로 테스트를 그룹화합니다. 다음 스크린샷과 같이 클래스를 확장하여 개별 테스트를 확인합니다.

클래스별로 그룹화된 테스트가 포함된 테스트 보고서 탭에는 개별 테스트로 확장된 각 클래스가 표시됩니다.

전체 테스트 보고서를 JSON 파일로 다운로드하려면 작업 세부 정보 상단에서 전체 요약 다운로드를 선택합니다.

테스트 인사이트가 활성화되지 않은 경우

작업 결과에는 스위트, 로그스크린샷 탭과 같은 표준 테스트 출력 및 아티팩트가 표시되지만 테스트 보고서 탭은 표시되지 않습니다. 테스트 보고서를 생성하려면 테스트 인사이트가 활성화된 새 실행을 예약합니다.

테스트 인사이트가 활성화되지 않은 완료된 XCTest UI 작업에 대한 작업 결과에는 표준 탭과 테스트 보고서 탭이 표시됩니다.

테스트 보고서 보기(AWS CLI)

를 실행get-job하고 작업 ARN을 지정합니다.

aws devicefarm get-job --arn arn:aws:devicefarm:us-west-2:123456789012:job:PROJECT_ID/RUN_ID/00000

테스트 인사이트가 활성화되지 않은 경우

테스트 인사이트를 활성화하지 않은 경우 응답에는 작업 상태, 결과, 카운터 및 디바이스와 같은 표준 작업 필드가 포함됩니다.

{ "job": { "arn": "arn:aws:devicefarm:us-west-2:123456789012:job:EXAMPLE-PROJECT/EXAMPLE-RUN/00000", "name": "Example Apple iPhone", "created": "2026-08-05T14:26:56.959000-07:00", "status": "COMPLETED", "result": "PASSED", "counters": { "total": 3, "passed": 3, "failed": 0, "warned": 0, "errored": 0, "stopped": 0, "skipped": 0 }, "message": "Successful test lifecycle of Setup Test", "device": { "arn": "arn:aws:devicefarm:us-west-2::device:EXAMPLEDEVICEID", "name": "Example Apple iPhone", "platform": "IOS", "os": "18", "formFactor": "PHONE", "fleetType": "PUBLIC" }, "deviceMinutes": { "total": 1.38, "metered": 0.0, "unmetered": 1.13 }, "videoCapture": true } }

테스트 인사이트가 활성화된 경우

테스트 인사이트를 활성화한 경우 응답에는 테스트 보고서 상태, 상위 수준 지표 및 세부 보고서에 대한 미리 서명된 URL이 포함된 insights 객체도 포함됩니다.

{ "job": { "arn": "arn:aws:devicefarm:us-west-2:123456789012:job:EXAMPLE-PROJECT/EXAMPLE-RUN/00000", "status": "COMPLETED", "result": "PASSED", "counters": { ... }, "device": { ... }, "deviceMinutes": { ... }, "videoCapture": true, "insights": { "status": "COMPLETED", "testReport": { "message": "Results: 2 Executed | 2 passed, Median test duration: 3.214 seconds.", "metrics": { "testsTotal": 2, "testsPassed": 2, "testsFailed": 0, "testsSkipped": 0, "testsErrored": 0, "testsOther": 0, "testsPassedPercentage": 100.0 }, "testDetailsUrl": "https://EXAMPLE-PRESIGNED-URL" } } } }

testDetailsUrl 필드는 전체 테스트 보고서 JSON에 대한 미리 서명된 URL입니다. 다운로드하여 테스트별 분석을 가져옵니다.

curl -o test-report.json "PRESIGNED_URL"

다음은 XCTest UI 작업에 대한 테스트 보고서의 예입니다.

{ "version": "1.0", "jobArn": "arn:aws:devicefarm:us-west-2:123456789012:job:5e01a8c7-c861-4c0a-b1d5-12345EXAMPLE/a1b2c3d4-e5f6-4a7b-8c9d-67890EXAMPLE/00000", "deviceName": "Apple iPhone 15", "deviceArn": "arn:aws:devicefarm:us-west-2::device:A1B2C3D4E5F60718293A4B5C6D7E8F90", "deviceOsVersion": "17.5", "metrics": { "testsTotal": 3, "testsPassed": 2, "testsFailed": 1, "testsSkipped": 0, "testsErrored": 0, "testsOther": 0, "testsPassedPercentage": 66.67, "totalTestExecutionDurationSeconds": 6.914, "medianTestExecutionDurationSeconds": 2.062 }, "testDetails": [ { "testName": "test_execute()", "testClass": "AlertsTest", "frameworkResult": "Passed", "result": "PASSED", "durationSeconds": 2.062, "startTimestamp": "2026-07-31T16:58:26.646000Z", "endTimestamp": "2026-07-31T16:58:28.708000Z", "testBundle": "AWSDeviceFarmiOSReferenceAppSwiftUITests", "nodeIdentifier": "AlertsTest/test_execute()" }, { "testName": "test_login()", "testClass": "LoginTest", "frameworkResult": "Failed", "result": "FAILED", "durationSeconds": 3.541, "startTimestamp": "2026-07-31T16:58:29.000000Z", "endTimestamp": "2026-07-31T16:58:32.541000Z", "stackTrace": "LoginTest.swift:88: XCTAssertEqual failed: (\"Welcome\") is not equal to (\"Error\")\nLoginTest.swift:91: XCTAssertTrue failed", "testBundle": "AWSDeviceFarmiOSReferenceAppSwiftUITests", "nodeIdentifier": "LoginTest/test_login()" }, { "testName": "test_themeRendering()", "testClass": "ThemeTest", "frameworkResult": "Passed", "result": "PASSED", "durationSeconds": 1.311, "testBundle": "AWSDeviceFarmiOSReferenceAppSwiftUITests", "nodeIdentifier": "ThemeTest/test_themeRendering()", "testArguments": "Dark Appearance, Portrait" } ] }

보고서에는 다음과 같은 최상위 필드가 포함되어 있습니다.

version, jobArn

작업의 보고서 스키마 버전 및 ARN입니다.

deviceName, deviceArn, deviceOsVersion

작업을 실행한 디바이스의 이름과 ARN 및 운영 체제 버전입니다.

metrics

작업에 대한 집계 결과: 총 테스트 수(testsTotal) 및 통과(), 실패(testsPassed), 건너뛰기(testsFailed), testsSkipped오류(testsErrored) 또는 다른 결과(testsOther)와 함께 통과율(testsPassedPercentage), 총 테스트 기간(totalTestExecutionDurationSeconds) 및 중간 테스트 기간(medianTestExecutionDurationSeconds).

의 각 항목에testDetails는 다음 필드가 포함됩니다.

testName, testClass

테스트 방법 및 테스트 클래스의 이름입니다.

result, frameworkResult

테스트에 대한 Device Farm 결과 및 XCTest 프레임워크가 보고한 결과 문자열입니다. Device Farm은 정규화frameworkResultresult 필드에 매핑됩니다.

durationSeconds, startTimestamp, endTimestamp

초 단위의 테스트 기간과 테스트가 시작 및 종료된 시간입니다.

testBundle, nodeIdentifier

테스트가 속한 테스트 번들과 테스트 케이스의 xcresult 노드 식별자입니다.

testArguments

파라미터화된 테스트 호출의 경우 호출에 대한 인수 레이블입니다.

stackTrace

실패한 테스트의 경우 실패의 스택 추적입니다.