이 섹션을 이해하려면 먼저 Tradefed @Option부터 살펴봐야 합니다.
Tradefed의 일반적인 옵션을 사용하면 클래스를 테스트하여 XML 구성 또는 명령줄에서 추가 정보를 가져올 수 있습니다. 이 기능을 사용하면 필요한 경우 하나의 추가 단계를 통해 이러한 추가 정보의 일부를 리졸브할 수 있습니다.
파일 옵션의 예
예시 파일 @option:
@Option(name = 'config-file')
private File mConfigFile;
위의 예시는 XML 구성을 통해 설정할 수 있습니다.
<option name="config-file" value="/tmp/file" />
명령어를 통해 설정할 수도 있습니다.
--config-file /tmp/file
설명
이 기능을 사용하면 원격인 파일 형식 @Options를 로컬 파일로 리졸브하여 사용자의 입장에서 원활하게 사용할 수 있도록 할 수 있습니다.
이 작업의 경우 파일을 원격 형식 경로로 지정해야 합니다. 예를 들면 다음과 같습니다.
--config-file gs://bucket/tmp/file
이 경로는 경로가 저장되는 GCS(Google Cloud Storage) 버킷 내의 파일을 가리킵니다. Tradefed는 원격 경로를 보자마자 로컬에서 파일을 다운로드하여 @Option에 할당하려고 시도합니다. 따라서 mConfigFile
변수가 이제 테스트에서 사용할 수 있는 파일의 로컬 버전을 가리키게 됩니다.
어떠한 이유로든 원격 파일을 다운로드할 수 없는 경우 Tradefed에서 테스트의 실행을 막는 ConfigurationException
이 발생합니다. 일부 테스트 아티팩트가 함께 누락될 수 있는 만큼 Google은 이러한 파일의 누락을 치명적인 결함으로 간주합니다.
쿼리 매개변수 사용
?
를 사용하여 쿼리 매개변수를 URL에 추가할 수 있습니다. 예를 들면 다음과 같습니다. gs://bucket/path?unzip=true
. 키/값 unzip=true
는 IRemoteFileResolver 인터페이스 구현에서 사용할 수 있습니다.
다음 두 가지 기본 제공 동작을 사용할 수 있습니다.
- unzip:
true
로 설정하고 다운로드한 파일이 zip이면 임시 위치에 자동으로 압축 해제됩니다. 예:?unzip=true
- optional: 기본값은
false
입니다.true
로 설정하고 확인이 실패하면 예외가 발생하지 않으며 파일이 대체되지만 않습니다. 예:?optional=true
호출에서 시도한 모든 동적 다운로드에 키/값을 전달하는 --dynamic-download-args key=value
를 통해 전역 쿼리 인수를 전달할 수도 있습니다.
지원되는 프로토콜
공식적으로 지원되는 프로토콜과 이에 상응하는 형식은 다음과 같습니다.
- Google Cloud Storage, 프로토콜:
gs
, 형식:gs://<bucket name>/path
- 로컬 파일, 프로토콜:
file
, 형식:file:/local/path
- http 링크, 프로토콜:
http
, 형식:http://url
- https 링크, 프로토콜:
https
, 형식:https://url
제한사항
@Option의 동적 해결책은 현재 다운로드할 제한된 수의 프로토콜과 위치만 지원합니다. @Option의 해결책은 현재 기본 XML Tradefed 구성에 의해서만 사용 설정됩니다.
도구 모음으로 실행 중인 경우 현재 모듈(AndroidTest.xml
)은 기본적으로 파일을 확인하지 않습니다.
이는 모듈에 의해 알 수 없는 종속 항목이 생성되지 않도록 하기 위함입니다. 도구 모음 수준에서 --enable-module-dynamic-download
를 사용하여 이스케이프할 수 있지만 호환성 테스트 모음(CTS) 및 공급업체 테스트 모음(VTS)과 같은 주요 도구 모음에서 사용 설정하지 않습니다.
새 프로토콜 구현
지원되는 프로토콜은 IRemoteFileResolver 인터페이스의 Tradefed에 구현되어 있으며 getSupportedProtocol
을 통한 파일 경로에서 일치할 프로토콜의 짧은 태그를 정의합니다. 예를 들어 gs
는 Google Cloud Storage 프로토콜에 사용됩니다. 구현할 권장 인터페이스는 #resolveRemoteFiles(RemoteFileResolverArgs)
이며 장기적으로 유지되는 인터페이스입니다.
구현된 프로토콜은 하네스 META-INF 서비스 파일에 추가하여 공식적으로 지원을 사용 설정할 수 있습니다.