Device Farm의 사용자 지정 테스트 환경 확장 - AWS Device Farm

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

Device Farm의 사용자 지정 테스트 환경 확장

Device Farm 사용자 지정 모드를 사용하면 테스트 스위트 외에도 다양한 기능을 실행할 수 있습니다. 이 단원에서는 테스트 스위트를 확장하고 테스트를 최적화하는 방법을 알아봅니다.

a 설정하기 PIN

일부 응용 프로그램에서는 PIN 장치에 a를 설정해야 합니다. Device Farm은 기본적으로 PIN 장치에 a 설정을 지원하지 않습니다. 하지만 다음과 같은 경고 사항과 함께 가능합니다.

  • 디바이스는 Android 8 이상을 실행해야 합니다.

  • 테스트가 완료된 후에는 PIN 제거해야 합니다.

PIN테스트에서 를 설정하려면 다음과 같이 pre_testpost_test 단계를 사용하여 설정하고 제거합니다. PIN

phases: pre_test: - # ... among your pre_test commands - DEVICE_PIN_CODE="1234" - adb shell locksettings set-pin "$DEVICE_PIN_CODE" post_test: - # ... Among your post_test commands - adb shell locksettings clear --old "$DEVICE_PIN_CODE"

테스트 스위트가 시작되면 PIN 1234가 설정됩니다. 테스트 스위트가 종료되면 PIN 가 제거됩니다.

주의

테스트가 완료된 후 PIN 기기에서 를 제거하지 않으면 기기와 계정이 격리됩니다.

원하는 기능을 통해 Appium 기반 테스트 속도 향상

Appium을 사용할 때 표준 모드 테스트 스위트가 매우 느릴 수 있습니다. 이는 Device Farm이 기본 설정을 적용하고 Appium 환경 사용 방법에 대해 어떠한 가정도 하지 않기 때문입니다. 이러한 기본값은 업계 모범 사례를 기반으로 구축되었지만 사용 상황에 따라 적용되지 않을 수 있습니다. Appium 서버의 파라미터를 미세 조정하려면 테스트 사양에서 기본 Appium 기능을 조정할 수 있습니다. 예를 들어 다음은 iOS 테스트 스위트에서 초기 시작 시간을 단축하기 위해 usePrebuildWDA 기능을 true로 설정합니다.

phases: pre_test: - # ... Start up Appium - >- appium --log-timestamp --default-capabilities "{\"usePrebuiltWDA\": true, \"derivedDataPath\":\"$DEVICEFARM_WDA_DERIVED_DATA_PATH\", \"deviceName\": \"$DEVICEFARM_DEVICE_NAME\", \"platformName\":\"$DEVICEFARM_DEVICE_PLATFORM_NAME\", \"app\":\"$DEVICEFARM_APP_PATH\", \"automationName\":\"XCUITest\", \"udid\":\"$DEVICEFARM_DEVICE_UDID_FOR_APPIUM\", \"platformVersion\":\"$DEVICEFARM_DEVICE_OS_VERSION\"}" >> $DEVICEFARM_LOG_DIR/appiumlog.txt 2>&1 &

Appium 기능은 셸에서 이스케이프 처리되고 인용된 구조여야 합니다. JSON

다음과 같은 Appium 기능은 성능 향상의 일반적인 출처입니다.

noResetfullReset

상호 배타적인 이 두 기능은 각 세션이 완료된 후 Appium의 동작을 설명합니다. noResettrue로 설정하면 Appium 세션이 종료될 때 Appium 서버가 애플리케이션에서 데이터를 제거하지 않으므로 사실상 어떤 정리 작업도 수행하지 않습니다. fullReset은 세션이 종료된 후 장치에서 모든 애플리케이션 데이터를 제거하고 지웁니다. 자세한 내용은 Appium 설명서의 재설정 전략을 참조하세요.

ignoreUnimportantViews(Android만 해당)

Appium에 Android UI 계층 구조를 테스트와 관련된 뷰로만 압축하여 특정 요소 조회 속도를 높이도록 지시합니다. 하지만 이렇게 하면 UI 레이아웃의 계층 구조가 변경되어 일부 XPath 기반 테스트 스위트가 손상될 수 있습니다.

skipUnlock(Android만 해당)

Appium에 현재 설정된 PIN 코드가 없음을 알립니다. 이렇게 하면 화면 끄기 이벤트 또는 기타 잠금 이벤트 후 테스트 속도가 빨라집니다.

webDriverAgentUrl(iOS만 해당)

필수 iOS 종속 항목이 이미 실행 중이고 지정된 HTTP 요청을 수락할 수 있다고 가정하도록 Appium에 지시합니다. webDriverAgent URL 아직 webDriverAgent가 실행되지 않은 경우 Appium의 테스트 스위트 초기에 webDriverAgent를 시작하는 데 시간이 걸릴 수 있습니다. Appium을 시작할 때 webDriverAgent를 직접 시작하고 webDriverAgentUrlhttp://localhost:8100로 설정하면 테스트 스위트를 더 빠르게 부팅할 수 있습니다. 참고로 이 기능을 useNewWDA 기능과 함께 사용해서는 안 됩니다.

다음 코드를 사용하여 디바이스의 로컬 포트 8100에 있는 테스트 사양 파일에서 webDriverAgent를 시작한 다음 테스트 호스트의 로컬 포트 8100로 전달할 수 있습니다(이렇게 하면 webDriverAgentUrl 값을 http://localhost:8100로 설정할 수 있음). 이 코드는 Appium 및 webDriverAgent 환경 변수를 설정하기 위한 코드를 정의한 후 설치 단계에서 실행해야 합니다.

# Start WebDriverAgent and iProxy - >- xcodebuild test-without-building -project /usr/local/avm/versions/$APPIUM_VERSION/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -derivedDataPath $DEVICEFARM_WDA_DERIVED_DATA_PATH -destination id=$DEVICEFARM_DEVICE_UDID_FOR_APPIUM IPHONEOS_DEPLOYMENT_TARGET=$DEVICEFARM_DEVICE_OS_VERSION GCC_TREAT_WARNINGS_AS_ERRORS=0 COMPILER_INDEX_STORE_ENABLE=NO >> $DEVICEFARM_LOG_DIR/webdriveragent_log.txt 2>&1 & iproxy 8100 8100 >> $DEVICEFARM_LOG_DIR/iproxy_log.txt 2>&1 &

그런 다음 테스트 사양 파일에 다음 코드를 추가하여 webDriverAgent가 성공적으로 시작되었는지 확인할 수 있습니다. Appium이 성공적으로 시작되었는지 확인한 후 사전 테스트 단계가 끝날 때 이 코드를 실행해야 합니다.

# Wait for WebDriverAgent to start - >- start_wda_timeout=0; while [ true ]; do if [ $start_wda_timeout -gt 60 ]; then echo "WebDriverAgent server never started in 60 seconds."; exit 1; fi; grep -i "ServerURLHere" $DEVICEFARM_LOG_DIR/webdriveragent_log.txt >> /dev/null 2>&1; if [ $? -eq 0 ]; then echo "WebDriverAgent REST http interface listener started"; break; else echo "Waiting for WebDriverAgent server to start. Sleeping for 1 seconds"; sleep 1; start_wda_timeout=$((start_wda_timeout+1)); fi; done;

Appium이 지원하는 기능에 대한 자세한 내용은 Appium 설명서의 Appium 필요한 기능을 참조하세요.

테스트 실행 후 웹후크 및 기타 사용 APIs

모든 테스트 스위트의 curl 사용이 완료된 후 Device Farm이 webhook을 호출하도록 할 수 있습니다. 이 작업을 수행하는 프로세스는 대상 및 형식에 따라 다릅니다. 특정 webhook에 대해서는 해당 Webhook의 설명서를 참조하세요. 다음 예제는 테스트 스위트가 완료될 때마다 Slack webhook에 메시지를 게시합니다.

phases: post_test: - curl -X POST -H 'Content-type: application/json' --data '{"text":"Tests on '$DEVICEFARM_DEVICE_NAME' have finished!"}' https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

Slack에서 웹후크를 사용하는 방법에 대한 자세한 내용은 Slack 참조의 Webhook을 사용하여 첫 번째 Slack 메시지 보내기를 참조하세요. API

Webhook을 호출하는 용도로만 curl을 사용할 수 있는 것은 아닙니다. 테스트 패키지는 Device Farm 실행 환경과 호환되는 한 추가 스크립트 및 도구를 포함할 수 있습니다. 예를 들어 테스트 패키지에는 다른 사람에게 요청하는 보조 스크립트가 포함될 수 있습니다. APIs 모든 필수 패키지가 테스트 스위트의 요구 사항과 함께 설치되어 있는지 확인하세요. 테스트 스위트가 완성된 후 실행되는 스크립트를 추가하려면 테스트 패키지에 스크립트를 포함하고 테스트 사양에 다음을 추가하세요.

phases: post_test: - python post_test.py
참고

테스트 패키지에 사용된 API 키나 기타 인증 토큰을 관리하는 것은 사용자의 책임입니다. 모든 형태의 보안 인증 정보를 소스 제어에서 제외시키고, 권한이 가장 적은 자격 증명을 사용하며, 가능하면 취소 가능하고 수명이 짧은 토큰을 사용하는 것이 좋습니다. 보안 요구 사항을 확인하려면 APIs 사용하는 타사 설명서를 참조하십시오.

AWS 서비스를 테스트 실행 도구 모음의 일부로 사용하려는 경우 테스트 도구 모음 외부에서 생성되고 테스트 패키지에 포함된 IAM 임시 자격 증명을 사용해야 합니다. 이러한 자격 증명은 부여된 권한이 가장 적고 수명이 가장 짧아야 합니다. 임시 자격 증명을 생성하는 방법에 대한 자세한 내용은 IAM사용 설명서의 임시 보안 자격 증명 요청을 참조하십시오.

테스트 패키지에 추가 파일 추가

추가 파일을 추가 구성 파일 또는 추가 테스트 데이터인 테스트 파일의 일부로 사용할 수 있습니다. AWS Device Farm에 업로드하기 전에 테스트 패키지에 이러한 추가 파일을 추가한 다음 사용자 지정 환경 모드에서 액세스할 수 있습니다. 기본적으로 모든 테스트 패키지 업로드 형식 (ZIP,, IPA APKJAR, 등) 은 표준 ZIP 작업을 지원하는 패키지 아카이브 형식입니다.

업로드하기 전에 다음 명령을 사용하여 테스트 아카이브에 AWS Device Farm 파일을 추가할 수 있습니다.

$ zip zip-with-dependencies.zip extra_file

추가 파일이 있는 디렉터리의 경우

$ zip -r zip-with-dependencies.zip extra_files/

이 명령은 IPA 파일을 제외한 모든 테스트 패키지 업로드 형식에서 예상대로 작동합니다. IPA파일의 경우, 특히 와 함께 XCUITests 사용하는 경우 iOS 테스트 패키지의 AWS Device Farm 재설계 방식 때문에 추가 파일은 약간 다른 위치에 두는 것이 좋습니다. iOS 테스트를 빌드할 때 테스트 응용 프로그램 디렉터리는 이름이 지정된 다른 디렉터리 내에 위치합니다.Payload.

예를 들어, iOS 테스트 디렉터리 중 하나는 다음과 같습니다.

$ tree . └── Payload └── ADFiOSReferenceAppUITests-Runner.app ├── ADFiOSReferenceAppUITests-Runner ├── Frameworks │ ├── XCTAutomationSupport.framework │ │ ├── Info.plist │ │ ├── XCTAutomationSupport │ │ ├── _CodeSignature │ │ │ └── CodeResources │ │ └── version.plist │ └── XCTest.framework │ ├── Info.plist │ ├── XCTest │ ├── _CodeSignature │ │ └── CodeResources │ ├── en.lproj │ │ └── InfoPlist.strings │ └── version.plist ├── Info.plist ├── PkgInfo ├── PlugIns │ ├── ADFiOSReferenceAppUITests.xctest │ │ ├── ADFiOSReferenceAppUITests │ │ ├── Info.plist │ │ └── _CodeSignature │ │ └── CodeResources │ └── ADFiOSReferenceAppUITests.xctest.dSYM │ └── Contents │ ├── Info.plist │ └── Resources │ └── DWARF │ └── ADFiOSReferenceAppUITests ├── _CodeSignature │ └── CodeResources └── embedded.mobileprovision

이 XCUITest 패키지의 경우 다음으로 끝나는 디렉터리에 추가 파일을 추가하십시오..app 내부 Payload 디렉터리. 예를 들어, 다음 명령은 이 테스트 패키지에 파일을 추가하는 방법을 보여줍니다.

$ mv extra_file Payload/*.app/ $ zip -r my_xcui_tests.ipa Payload/

테스트 패키지에 파일을 추가하면 업로드 형식에 따라 AWS Device Farm 에서 상호 작용 동작이 약간 다를 수 있습니다. ZIP파일 확장자를 사용한 업로드의 경우 테스트 전에 업로드의 압축을 AWS Device Farm 자동으로 풀고 압축을 푼 파일은 파일이 있는 위치에 그대로 둡니다.$DEVICEFARM_TEST_PACKAGE_PATH 환경 변수. (즉, 다음과 같은 파일을 추가한 경우 extra_file 첫 번째 예와 같이 아카이브 루트에 위치하면 다음 위치에 있습니다.$DEVICEFARM_TEST_PACKAGE_PATH/extra_file 테스트 중).

좀 더 실용적인 예를 들자면, 다음을 포함하려는 Appium TestNG 사용자라면 testng.xml 테스트 파일은 다음 명령어를 사용하여 아카이브에 포함할 수 있습니다.

$ zip zip-with-dependencies.zip testng.xml

그런 다음 사용자 지정 환경 모드에서 테스트 명령을 다음과 같이 변경할 수 있습니다.

java -D appium.screenshots.dir=$DEVICEFARM_SCREENSHOT_PATH org.testng.TestNG -testjar *-tests.jar -d $DEVICEFARM_LOG_DIR/test-output $DEVICEFARM_TEST_PACKAGE_PATH/testng.xml

테스트 패키지 업로드 확장자가 아닌 경우 ZIP (예:, APKIPA, 또는 JAR 파일) 업로드된 패키지 파일 자체는 다음 위치에서 찾을 수 있습니다.$DEVICEFARM_TEST_PACKAGE_PATH. 이들은 여전히 아카이브 형식 파일이므로 파일 압축을 풀어 내에서 추가 파일에 액세스할 수 있습니다. 예를 들어, 다음 명령은 테스트 패키지의 내용 (for APKIPA, 또는 JAR file) 을 다음 주소로 압축 해제합니다./tmp 디렉터리:

unzip $DEVICEFARM_TEST_PACKAGE_PATH -d /tmp

APKor 파일의 경우 추가 JAR 파일이 다음 위치에 압축 해제되어 있습니다./tmp 디렉터리 (예: /tmp/extra_file). IPA파일의 경우 앞에서 설명한 것처럼 추가 파일은 폴더 내에서 약간 다른 위치에 있으며 끝은 다음과 같습니다..app, 그 안에 있습니다.Payload 디렉터리. 예를 들어, 위 IPA 예제를 기반으로 하면 해당 위치에서 파일을 찾을 수 있습니다./tmp/Payload/ADFiOSReferenceAppUITests-Runner.app/extra_file (다음과 같이 참조 가능) /tmp/Payload/*.app/extra_file).