OmniLab ATS의 가상 기기

OmniLab ATS는 실제 Android 기기 없이 테스트를 실행할 수 있는 Cuttlefish 가상 기기를 지원합니다. Cuttlefish는 하드웨어에 독립적인 기능을 테스트하는 데 적합합니다. 가상 기기 사용을 시작하기 전에 사용자 가이드에 따라 OmniLab ATS를 설치합니다.

OmniLab ATS는 로컬 및 원격이라는 두 가지 모드로 가상 기기를 지원합니다. 다음 표에서는 두 모드를 비교해서 보여줍니다.

로컬 가상 기기 원격 가상 기기
ATS 작업자 호스트에서 실행됨 ATS 작업자 호스트가 SSH를 통해 액세스할 수 있는 원격 호스트에서 실행됩니다.
x86 기반 호스트 아키텍처에 따라 x86 또는 ARM일 수 있습니다.
간편한 설정 설정이 더 복잡함

로컬 및 원격 가상 기기는 독립적으로 사용 설정할 수 있습니다. 각 모드에 관한 자세한 내용은 다음을 참고하세요.

로컬 가상 기기 설정

이 섹션에서는 로컬 가상 기기용 OmniLab ATS를 설정하는 단계를 설명합니다.

Cuttlefish 종속 항목 설치

다음 명령어를 실행하여 필요한 커널 모듈이 로드되었는지 확인합니다.

sudo modprobe -a kvm tun vhost_net vhost_vsock

로컬 가상 기기로 OmniLab ATS 시작

OmniLab ATS를 시작하기 전에 모든 Cuttlefish 인스턴스가 중지되었는지 확인합니다. OmniLab ATS는 테스트 주기 중에 가상 기기를 자동으로 시작하고 중지하며, 기존 Cuttlefish 인스턴스는 OmniLab ATS에서 관리하는 인스턴스와 충돌합니다. Cuttlefish 인스턴스 중지에 관한 자세한 내용은 Cuttlefish 중지를 참고하세요.

로컬 가상 기기를 사용 설정하려면 다음을 실행합니다.

mtt start --max_local_virtual_devices N

N은 OmniLab ATS가 동시에 할당할 수 있는 최대 가상 기기 수입니다. 기본값은 0입니다.

누락된 기기 노드로 인해 명령어가 실패하면 오류 메시지의 단계를 따라 커널 모듈을 로드합니다. 그래도 실패하면 시스템을 재부팅하세요.

원격 가상 기기 설정

이 섹션에서는 원격 가상 기기용 OmniLab ATS를 설정하는 단계를 설명합니다.

Cuttlefish 종속 항목 설치

Cuttlefish 종속 항목을 설치하려면 다음 단계를 따르세요.

  1. Cuttlefish > 시작의 단계에 따라 원격 호스트에 Debian 패키지를 설치합니다.

  2. 다음 단계에 따라 원격 호스트에서 최대 가상 기기 수를 구성합니다.

    1. 루트 권한으로 /etc/default/cuttlefish-host-resources를 수정합니다.
    2. num_cvd_accounts를 이 호스트에서 허용할 최대 가상 기기 수로 설정합니다.
    3. sudo systemctl restart cuttlefish-host-resources을 실행합니다.
    4. ifconfig를 실행하고 cvd-wtap-* 인터페이스 수를 확인합니다.

SSH 계정 만들기

OmniLab ATS 호스트는 SSH를 통해 원격 호스트에 연결되므로 원격 호스트에서 SSH 계정을 준비해야 합니다. OmniLab ATS는 HOME 디렉터리의 파일을 조작하므로 전용 계정을 만드는 것이 좋습니다.

OmniLab ATS 호스트는 비밀번호 없이 원격 호스트에 로그인하려면 SSH 키 쌍이 필요합니다. 다음 단계에서는 SSH 키를 설정하는 방법을 설명합니다.

  1. 비공개 키와 공개 키를 생성하려면 OmniLab ATS 호스트에서 ssh-keygen를 실행합니다.
  2. 원격 호스트~/.ssh/authorized_keys에 공개 키를 업로드하고 추가합니다.

SSH 계정이 Cuttlefish 종속 항목 설치에 사용된 계정과 다른 경우 SSH 계정에서 Cuttlefish를 실행할 수 있도록 하려면 원격 호스트에서 다음 명령어를 실행합니다.

sudo usermod -aG kvm,cvdnetwork,render $USER

원격 가상 기기로 OmniLab ATS 시작

OmniLab ATS를 시작하기 전에 모든 Cuttlefish 인스턴스가 중지되었는지 확인합니다. OmniLab ATS는 테스트 주기 중에 가상 기기를 자동으로 시작하고 중지하며, 기존 Cuttlefish 인스턴스는 OmniLab ATS에서 관리하는 인스턴스와 충돌합니다. Cuttlefish 인스턴스 중지에 관한 자세한 내용은 Cuttlefish 중지를 참고하세요.

성능을 개선하려면 로컬 영역 네트워크에 OmniLab ATS 호스트와 원격 호스트를 설정하는 것이 좋습니다.

원격 가상 기기를 사용 설정하려면 OmniLab ATS 호스트에서 다음 명령어를 실행합니다.

mtt start --remote_virtual_devices USER@HOST/N \
--remote_ssh_key KEY

USER은 SSH 계정 이름입니다.

HOST는 원격 호스트의 IPv4 주소입니다.

N은 OmniLab ATS가 동시에 할당할 수 있는 최대 가상 기기 수입니다.

KEYOmniLab ATS 호스트의 비공개 SSH 키 경로입니다.

이 명령어는 OmniLab ATS를 시작하기 전에 원격 호스트에 대한 연결을 테스트합니다. 콘솔에 The specified --remote_virtual_devices and --remote_ssh_key are invalid.와 같은 경고 메시지가 표시되면 SSH 설정을 확인해야 합니다.

리소스 충돌을 방지하기 위해 OmniLab ATS 호스트는 최대 1대의 원격 호스트에 연결할 수 있습니다. 여러 OmniLab ATS 호스트를 동시에 하나의 원격 호스트에 연결할 수 없습니다.

가상 기기로 테스트 실행

이 섹션에서는 로컬 또는 원격 가상 기기에서 테스트를 실행하는 단계를 설명합니다.

기기 선택

기기 목록에서 OmniLab ATS는 가상 기기를 실제 일련번호 대신 자리표시자로 표시합니다. 자리표시자는 로컬 가상 기기의 경우 HOSTNAME:local-virtual-device-ID 형식으로, 원격 가상 기기의 경우 remote-virtual-ADDRESS-ID 형식으로 표시됩니다. 상태는 Available 또는 Allocated입니다. 자리표시자가 Available이면 가상 기기가 실행되고 있지 않으며 테스트에 할당할 수 있음을 나타냅니다.

가상 기기 선택

그림 1. 가상 기기 선택

기기 작업 추가

하나 이상의 가상 기기를 선택하면 연결된 기기 작업이 목록에 자동으로 추가됩니다. 작업은 가상 기기를 만드는 데 필요한 TradeFed 매개변수와 테스트 리소스로 구성됩니다.

로컬 가상 기기 작업

그림 2. 로컬 가상 기기의 기기 작업

원격 가상 기기 작업

그림 3. 원격 가상 기기의 기기 작업

테스트 리소스 설정

Cuttlefish 가상 기기에는 가상 머신 도구, 이미지, Acloud라는 세 가지의 테스트 리소스가 필요합니다. 일반적인 Cuttlefish 빌드(예: ci.android.comaosp_cf_x86_64_only_phone-userdebug)에서 가상 머신 도구는 cvd-host_package.tar.gz에 패키징되며 이미지는 aosp_cf_x86_64_phone-img-*.zip에 패키징됩니다. Acloud 바이너리는 OmniLab ATS에 빌드되며 모든 버전의 Cuttlefish와 호환됩니다. Acloud 바이너리의 기본 다운로드 URL은 디버깅 목적일 때만 변경하면 됩니다.

가상 기기 테스트 리소스

그림 4. 가상 기기의 테스트 리소스

테스트 실행 보기

kernel.log, host_log.txt, launcher.log를 비롯하여 기기 로그는 출력 파일 폴더에 수집됩니다. View Output Files를 클릭하여 결과를 확인합니다.

테스트 실행 결과

그림 5. 테스트 실행 결과