기기 프로비저닝 테스트

Android 6 또는 Android 7을 실행하는 기기는 Android 기기의 엔터프라이즈 호환성을 검증하는 테스트 모음인 Android Enterprise(AE) 테스트 하네스를 사용하여 기기 프로비저닝을 테스트할 수 있습니다. 하네스에는 지원 앱, 테스트 사례, 구성 파일, cts-tradefed에서 빌드된 테스트 실행기(afw-test-tradefed)가 포함됩니다. AE 테스트 하네스를 설정하려면 먼저 기기 관리를 위한 프로비저닝을 완료해야 합니다.

Android 8 이상을 실행하는 기기에서는 AE 테스트 하네스의 사용이 지원 중단되었습니다.

개발 환경 설정

AE 테스트 하네스의 개발 환경은 Android OS와 유사합니다. 요구사항의 단계에 따라 개발 머신을 설정합니다.

소스 코드 다운로드

소스 다운로드의 단계에 따라 AE 테스트 하네스 소스 코드를 다운로드합니다. AE 테스트 하네스 소스 코드는 ./test/AfwTestHarness 프로젝트에 있습니다. 분기 이름에 따라 다운로드할 AE 테스트 하네스 버전이 결정됩니다(Android 플랫폼별로 AE 테스트 하네스 버전이 서로 다름). 예를 들어, Android 7.0 Nougat의 분기 이름은 afw-test-harness-nougat-dev입니다. 저장소를 초기화하고 이 분기의 소스 코드를 다운로드하려면 다음 명령어를 사용하세요.

mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
repo init -u https://android.googlesource.com/platform/manifest -b afw-test-harness-nougat-dev
repo sync -j24

다른 버전용 소스 코드를 확인하려면 관련 태그를 사용하여 분기를 지정하세요. 사용할 수 있는 분기는 다음과 같습니다.

분기 이름 지원되는 Android 플랫폼
afw-test-harness-nougat-dev Android 7.0
afw-test-harness-2.1 Android 7.0
afw-test-harness-marshmallow-dev Android 6.0
afw-test-harness-1.5 Android 6.0

하네스 빌드에 필요한 다른 종속 프로젝트도 소스 코드와 함께 다운로드됩니다.

Android 스튜디오에서 보기

Android 스튜디오에서 소스 코드를 보고 수정하려면 다음을 따르세요.

  1. 다음 명령어를 실행합니다.
    make idegen
    development/tools/idegen/idegen.sh
    
  2. Android 스튜디오에서 android.ipr을 엽니다.

AE 테스트 하네스 소스 코드는 test/AfwTestHarness에 있습니다.

AE 테스트 하네스 구성

test/AfwTestHarness/afw-test.props를 구성하여 하네스를 맞춤설정할 수 있습니다. 하네스를 실행하려면 다음 단계를 완료하세요.

  1. 다음 속성을 사용하여 afw-test.props에서 Wi-Fi 네트워크를 구성합니다.
    wifi_ssid
    wifi_password (optional)
    wifi_security_type (optional, available options are: NONE, WEP or WPA)
    
  2. 기기 정책 컨트롤러로 Test DPC에 바인딩된 도메인에서 하나 이상의 계정을 가져옵니다. 다음 속성을 사용하여 afw-test.props에서 세부정보를 지정합니다.
    work_account_username
    work_account_password
    

    AE 테스트 하네스는 Test DPC를 사용하여 프로비저닝 흐름을 테스트하므로 테스트 하네스를 실행하려면 계정이 반드시 Test DPC에 바인딩되어야 합니다.

AE 테스트 하네스 빌드

다음을 사용하여 빌드 구성을 초기화합니다.

source build/envsetup.sh
lunch

기기 유형을 선택하고 Enter를 누릅니다.

다음을 사용하여 하네스를 빌드합니다.

make afw-test-harness -j32

그러면 테스트 하네스를 실행하는 데 필요한 모든 바이너리, 구성 파일, 도구가 포함된 디렉터리(out/host/linux-x86/afw-th/android-cts)가 생성됩니다. 이 디렉터리는 배포를 위해 파일(out/host/linux-x86/afw-th/android-afw-test-harness.zip)로 압축됩니다.

AE 테스트 하네스 실행

AE 테스트 하네스를 실행하려면 다음 단계를 따르세요.

  1. 빌드 환경에서 다음을 사용하여 테스트 실행기를 시작합니다.
    afw-test-tradefed
    
    그러면 cts-tf 콘솔이 시작되고 out/host/linux-x86/afw-th/android-cts에서 테스트 계획, 테스트 사례 및 afw-test.props가 로드됩니다.
  2. android-afw-test-harness.zip의 압축이 풀린 폴더에서 다음을 사용하여 테스트 실행기를 시작합니다.
    cts-tf> ./android‐cts/tools/afw-test‐tradefed
    
    android-cts 디렉터리에서 테스트 계획, 테스트 사례 및 afw-test.props를 로드합니다. ./android‐cts/repository/testcases/afw-test.props에 직장 계정과 Wi-Fi 구성이 있는지 확인합니다.
  3. 테스트 계획을 실행합니다. 각 테스트 계획은 AfwTestHarness/tests 테스트 패키지 디렉터리의 테스트 패키지 집합이 포함된 XML 파일입니다. 일반적인 계획에는 다음이 포함됩니다.
    • afw-userdebug-build. userdebug 빌드가 필요한 모든 테스트 패키지가 포함됩니다.
    • afw-user-build. 사용자 빌드에서 실행되지만 초기 설정 완료 및 USB 디버깅 사용 설정 등 테스트 기기가 올바르게 설정되어야 합니다.

    테스트 계획 afw-userdebug-build를 실행하려면 다음을 사용하세요.
    cts-tf> run cts --plan afw-userdebug-build
    
    테스트 계획을 모두 보려면 list plans 명령어를 사용합니다. 계획 정의를 보려면 out/host/linux-x86/afw-th/android-cts/repository/plans를 참조하세요.
  4. 테스트 패키지를 실행합니다. 단일 테스트 패키지를 실행하려면 다음을 사용합니다.
    cts-tf> run cts --package com.android.afwtest.NfcProvisioning
    
    모든 패키지를 보려면 list packages 명령어를 사용합니다. 더 많은 옵션을 보려면 run cts --help 명령어를 사용합니다.

AE 테스트 하네스 디버깅

afw-test-tradefed 콘솔(cts-tf)에서 모든 명령어를 실행합니다. 이 콘솔은 afw-test-tradefed를 실행하여 시작할 수 있습니다.

  • -l INFO 또는 -l DEBUG 플래그로 자세한 정보를 표시합니다. 예:
    cts-tf> run cts ‐‐plan afw-userdebug-build -l DEBUG
    
  • -s 플래그를 사용하여 특정 기기에서 테스트 하네스를 실행합니다. 예를 들면 다음과 같습니다.
    cts-tf> run cts ‐‐plan afw-userdebug-build -l DEBUG -s device_sn
    
  • --all-devices 플래그를 사용하여 연결된 모든 기기에서 테스트 하네스를 실행합니다. 예를 들면 다음과 같습니다.
    cts-tf> run cts ‐‐plan afw-userdebug-build -l DEBUG --all-devices
    
  • list invocations 또는 l i를 사용하여 현재 실행 중인 실행 항목을 봅니다.
  • list results 또는 l r을 사용하여 이전 테스트 실행의 요약을 봅니다.
  • help list를 사용하여 다른 list 명령어를 봅니다.
  • afwtest를 사용하여 필터로 실시간 logcat을 모니터링한 다음 다른 터미널을 열고 adb logcat | grep afwtest를 사용하여 logcat을 시작합니다. 테스트를 완료한 후에는 다음을 따릅니다.
    • out/host/linux-x86/afw-th/android-cts/repository/logs/start-time에서 로그를 봅니다. 전체 기기 logcat 및 호스트 로그(afw-test-tradefed 로그)는 별도의 ZIP 파일에 저장됩니다.
    • afwtest의 기기 logcat을 검색하여 관련 정보를 찾습니다. 예: zless out/host/linux-x86/afw-th/android-cts/repository/logs/start-time/device_logcat_random-number.zip | grep afwtest
    • 전체 afw-test-tradefed 로그를 보려면 zless out/host/linux-x86/afw-th/android-cts/repository/logs/start-time/host_log_random-number.zip을 사용합니다.
  • 테스트 패키지는 UI 페이지를 탐색하고 각 페이지의 기기 logcat 파일에 탐색 로그를 기록하여 엔터프라이즈 프로비저닝 흐름을 자동화합니다. 예: afwtest.AutomationDriver: Navigating:com.android.afwtest.uiautomator.pages.gms.AddAccountPage
    테스트 패키지 com.android.afwtest.NfcProvisioning의 UI 페이지에는 다음이 포함됩니다.
    • com.android.afwtest.uiautomator.pages.managedprovisioning.NfcProvisioningPage
    • com.android.afwtest.uiautomator.pages.PageSkipper
    • com.android.afwtest.uiautomator.pages.LandingPage
  • 프로비저닝 프로세스 중에 테스트에 실패하면 logcat에 다음과 유사한 오류가 포함됩니다.
    TestRunner: java.lang.RuntimeException: Failed to load page: com.android.afwtest.uiautomator.pages.packageinstaller.DeviceAccessPage
    
    위 오류는 일반적으로 이전 UI 페이지 또는 로드에 실패한 페이지의 오류 때문이므로 이 오류가 발생하기 전에 logcat에서 다른 오류 메시지를 찾은 다음 프로비저닝 흐름에 따라 직접 재현해 보세요.
  • 테스트 패키지에 실패하는 경우:
    • 스크린샷은 screenshot-test_test_class_full_name_test_case_name-random_number.png 구문을 사용하여 out/host/linux-x86/afw-th/android-cts/repository/logs/start-time에 저장됩니다. 이 정보는 호스트 로그에도 기록됩니다.
    • 버그 신고는 bug-test_class_full_name_test_case_name-random_number.zip으로 out/host/linux-x86/afw-th/android-cts/repository/logs/start-time에 저장됩니다.
  • 모든 테스트 패키지가 실행되면 스크린샷이 생성되어 screenshot-random_number.pngout/host/linux-x86/afw-th/android-cts/repository/logs/start-time에 저장됩니다. 이 정보는 호스트 로그에도 기록됩니다.

FAQ

사용자 빌드로 플래시된 기기에서 afw-userdebug-build 테스트 계획을 실행할 수 있나요?

아니요. afw-userdebug-build 계획의 테스트 패키지는 실제 테스트 흐름을 실행하기 전에 테스트 기기를 초기화하며 adb 디버깅은 자동으로 사용 설정되어야 합니다. 사용자 빌드를 사용하는 경우 개발자 옵션에서 직접 설정을 변경해야만 adb 디버깅을 사용 설정할 수 있습니다.

userdebug 빌드로 플래시된 기기에서 afw-user-build 테스트 계획을 실행할 수 있나요?

예, 하지만 이 테스트 계획은 사용자 빌드에서 실행하는 것이 좋습니다.

UI 로드에 시간이 너무 많이 걸려 테스트에 실패하는 경우가 있습니다. 이 문제를 해결하려면 어떻게 해야 하나요?

./android-cts/repository/testcases/afw-test.props에서 timeout_size 설정을 구성합니다. 유효한 설정은 S, M, L, XL, XXL입니다.

프로비저닝이 완료되면 설치된 초기 설정에 맞춤설정된 UI(예: 이용약관)가 표시되기 때문에 테스트 패키지 com.android.afwtest.NfcProvisioning(또는 SuwDoProvisioning)이 기기에서 실패합니다. 맞춤설정된 UI를 건너뛰려면 어떻게 해야 하나요?

프로비저닝 프로세스 후에는 최소한의 UI가 있어야 합니다. UI에 다음 단어 즉, 건너뛰기, 마침, 완료, 수락, 동의, 다음, 계속 또는 계속 진행 중 하나를 포함하는 의미 있는 텍스트 또는 내용 설명이 포함된 버튼이 있으면 테스트 하네스에서는 그러한 UI를 자동으로 건너뜁니다. 또는 afw-test.props에서 버튼을 정의하여 UI를 건너뛰도록 테스트 하네스를 구성할 수도 있습니다. 예를 들면 다음과 같습니다.

oem_widgets=your_btn
your_btn.text=your_customized_text
your_btn.package=your_package
your_btn.action=click

여러 위젯을 정의하려면 쉼표로 구분하세요.

테스트 패키지 com.android.afwtest.NfcProvisioning(또는 SuwDoProvisioning)에 실패했으며 마지막 UI 화면이 '계정 확인'입니다. 왜 이런 일이 발생하나요? 또 테스트 기기를 복구하려면 어떻게 해야 하나요?

이 실패는 이전 테스트 패키지가 테스트가 끝날 때 초기화 보호 설정을 지우지 못했기 때문에 발생합니다. 기기를 잠금 해제하려면 계정을 직접 입력해야 합니다.

기기를 초기화하는 데 시간이 더 걸립니다. 초기화 시간 제한을 늘릴 수 있나요?

예. afw-test.props에서 factory_reset_timeout_min 설정을 구성합니다. 유효한 설정은 분 단위입니다. 기기에 맞게 시간을 분 단위로 설정할 수 있습니다.