자동화된 테스트 인프라

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Android 9에는 AOSP 일반 시스템 이미지(GSI)를 실행하는 파트너 기기에서 VTS, CTS 또는 기타 테스트의 자동화된 테스트를 위한 VTS(Vendor Test Suite) 인프라가 포함되어 있습니다. 이전에는 이러한 테스트를 실행하는 것이 고도로 수동 작업이었습니다. 새로운 VTS 테스트 인프라는 여러 장치에서 하루에 여러 번 자동 테스트를 지원하도록 설계되었습니다.

건축물

VTS 자동 테스트 인프라는 다음 아키텍처를 사용합니다.

Automated test architecture

그림 1. VTS 자동화 테스트 인프라 아키텍처

테스트가 트리거되면 VTS 자동화 테스트 인프라는 다음 작업을 수행합니다.

  1. 다른 위치에서 빌드 아티팩트 및 테스트 리소스를 가져옵니다.
    • 파트너 Android 빌드(PAB) . GSI, VTS 프레임워크 및 기타 빌드의 경우.
    • 로컬 파일 시스템, Google Cloud Storage 또는 기타 공급업체별 빌드 시스템 Google 클라우드에 빌드를 저장하지 않는 파트너를 위한 것입니다.
  2. 빌드 아티팩트(기기에서) 및 GSI(AOSP에서)를 연결된 기기로 깜박입니다.
  3. 클라우드에서 로컬 TradeFed 또는 TradeFed를 사용하여 VTS 테스트를 실행합니다.
  4. VTS 대시보드에 테스트 결과 보고

이 프로세스는 테스트 중인 연결된 모든 장치의 동작을 지시하는 실험실의 기계인 VTS 호스트 컨트롤러(HC)에 의해 조정됩니다. HC는 최신 빌드를 가져오고 장치에 플래시하며 테스트를 호출하는 역할을 합니다(로컬 또는 사령관을 통해). 또한 클라우드 스케줄러와 통신하고 스케줄러와 HC에서 실행되는 TradeFed 인스턴스(또는 다른 하네스) 간의 트래픽을 지시합니다. 호스트 컨트롤러에 대한 자세한 내용은 호스트 컨트롤러 아키텍처 를 참조하십시오.

리소스 공급자

자동화된 테스트에는 시스템 빌드, 테스트 파일 및 VTS 아티팩트와 같은 리소스가 필요합니다. 소스에서 이를 빌드하는 것이 가능하지만 트리 끝에서 정기적으로 빌드한 다음 다운로드를 위해 아티팩트를 게시하는 것이 더 쉽습니다.

파트너는 다음 위치를 사용하여 자동화 리소스에 액세스할 수 있습니다.

  • 파트너 Android 빌드 . 계정별로 부여된 프로그래밍 방식 액세스.
  • 로컬 파일 시스템 (또는 유사). 파트너 Android 빌드를 사용하지 않는 파트너를 위한 것입니다.

나중에 장치를 플래싱하는 데 사용하기 위해 리소스에는 로컬 임시 디렉터리에 빌드를 저장하는 단일 build_provider.py 에서 확장된 두 옵션 모두에 대한 빌드 공급자가 포함됩니다.

파트너 Android 빌드

Android 8.1 이하 릴리스에서 Android 파트너는 파트너 Android 빌드 웹사이트( https://partner.android.com/build )를 방문하여 계정으로 이동하고 사용자 인터페이스를 통해 최신 시스템 이미지를 가져와야 했습니다. 파트너가 이 느리고 노동 집약적인 프로세스를 피할 수 있도록 Android 9에는 적절한 자격 증명이 제공될 때 PAB에서 이러한 리소스를 자동으로 다운로드하는 지원이 포함됩니다.

액세스 설정

프로그래밍 방식 액세스는 Google API에서 OAuth2를 사용하여 필요한 RPC에 액세스합니다. OAuth2 자격 증명을 생성하기 위한 표준 접근 방식 을 사용하여 파트너는 Google과 클라이언트 ID/비밀 쌍을 설정해야 합니다. PartnerAndroidBuildClient 가 처음으로 해당 비밀을 가리킬 때 사용자가 Google 계정에 로그인할 수 있는 브라우저 창을 열어 앞으로 이동하는 데 필요한 OAuth2 자격 증명을 생성합니다. 자격 증명(액세스 토큰 및 새로 고침 토큰)은 로컬에 저장되므로 파트너는 한 번만 로그인해야 합니다.

URL에 대한 POST 요청

PAB에서 리소스 링크를 클릭하면 다음을 포함하여 해당 리소스에 필요한 데이터가 포함된 POST 요청이 전송됩니다.

  • 빌드 ID, 빌드 대상
  • 리소스 이름
  • 나뭇가지
  • 릴리스 후보 이름 및 후보가 내부 빌드인지 여부

POST 요청은 리소스에 액세스하는 데 사용할 수 있는 URL을 반환하는 buildsvc RPC의 downloadBuildArtifact 메서드에서 수신됩니다.

  • Clockwork Companion APK 리소스의 경우 URL은 PAB에서 호스팅되는 읽을 수 있는 URL입니다(인증으로 보호되고 적절한 OAuth2 자격 증명으로 액세스 가능).
  • 다른 리소스의 경우 URL은 내부 Android Build API의 보호되지 않은 긴 URL입니다(5분 후에 만료됨).

URL 가져오기

사이트 간 요청 위조를 방지하기 위해 buildsvc RPC는 XSRF 토큰을 다른 매개변수와 함께 POST해야 합니다. 이 토큰을 사용하면 프로세스가 더 안전해 지지만 PAB 페이지의 JavaScript에서만 사용할 수 있는 토큰도 이제 액세스에 필요하기 때문에 프로그래밍 방식의 액세스가 훨씬 더 어려워집니다.

이 문제를 방지하기 위해 Android 9에서는 아티팩트 목록 및 아티팩트 URL에 액세스하기 위해 예측 가능한 URL 이름을 사용하도록 모든 파일(APK뿐 아니라)에 대한 URL 명명 체계를 재설계합니다. 이제 PAB는 파트너가 리소스를 다운로드할 수 있는 편리한 URL 형식을 사용합니다. HC 스크립트는 URL 형식이 알려져 있기 때문에 이러한 APK를 쉽게 다운로드할 수 있고 HC는 buildsvc RPC가 필요하지 않기 때문에 XSRF/쿠키 문제를 우회할 수 있습니다.

로컬 파일 시스템

아티팩트 목록(또는 zip 파일)이 있는 디렉터리가 주어지면 빌드 공급자는 디렉터리에 있는 내용을 기반으로 관련 이미지를 설정합니다. gsutil 도구를 사용하여 Google Cloud Storage에서 로컬 디렉터리로 파일을 복사할 수 있습니다.

플래싱 빌드

가장 최근의 장치 이미지가 호스트에 다운로드된 후 해당 이미지를 장치에 플래시해야 합니다. 이는 빌드 제공자가 저장한 임시 파일 경로를 기반으로 표준 adbfastboot 명령과 Python 하위 프로세스를 사용하여 수행됩니다.

지원되는 작업:

  • GSI만 깜박임
  • 메인 시스템에서 개별 이미지 플래싱(예: fastboot flash boot boot.img )
  • 메인 시스템에서 모든 이미지를 깜박입니다. 예시:
    • fastboot flashall (내장된 flashall 유틸리티 사용)
    • fastboot flash (한 번에 하나씩)

테스트 실행

Android 9에서 VTS 자동화 테스트 인프라는 TradeFed 테스트 하네스만 지원하지만 향후 다른 하네스를 지원하도록 확장될 수 있습니다.

장치가 준비되면 다음 옵션 중 하나를 사용하여 테스트를 호출할 수 있습니다.

  • TradeFed를 로컬에서 사용할 때 호스트 컨트롤러에서 test 명령을 사용하십시오. 이 명령은 VTS 테스트 계획(예: vts-selftest )의 이름을 가져와 테스트를 실행합니다.
  • TradeFed 클러스터(MTT에 선택적으로 연결됨)를 사용할 때 호스트 컨트롤러 콘솔에서 lease 명령을 사용하여 미충족 테스트 실행을 찾습니다.

TradeFedCluster를 사용하는 경우 TradeFed 는 원격 관리자로 로컬에서 실행됩니다. 그렇지 않은 경우 테스트는 Python 하위 프로세스를 사용하여 호출됩니다.

보고 결과

테스트 결과는 VtsMultiDeviceTest 에 의해 일부 VTS 대시보드 프로젝트에 자동으로 보고됩니다.