Aby zrozumieć tę sekcję, najpierw przestudiuj Tradefed @Option .
Typowe opcje Tradefed umożliwiają klasom testowym otrzymywanie dodatkowych informacji z konfiguracji XML lub wiersza poleceń. Ta funkcja umożliwia wykonanie jednego dodatkowego kroku i w razie potrzeby sprawdzenie niektórych dodatkowych informacji.
Przykład opcji pliku
Przykładowy plik @opcja:
@Option(name = 'config-file')
private File mConfigFile;
Powyższe można ustawić poprzez konfigurację XML:
<option name="config-file" value="/tmp/file" />
lub za pomocą polecenia:
--config-file /tmp/file
Opis
Ta funkcja umożliwia przekształcenie zdalnych opcji @Options typu plikowego w plik lokalny, tak aby były one bezproblemowo dostępne z punktu widzenia użytkownika.
Aby to zadziałało, plik musi być określony ze zdalną ścieżką stylu . Na przykład:
--config-file gs://bucket/tmp/file
Ta ścieżka wskazuje plik w zasobniku Google Cloud Storage (GCS), w którym jest on przechowywany. Tradefed po zobaczeniu tej zdalnej ścieżki spróbuje pobrać plik lokalnie i przypisać go do opcji @Option. Powoduje to, że zmienna mConfigFile
wskazuje teraz lokalną wersję pliku, która może zostać wykorzystana w teście.
Jeśli z jakiegoś powodu nie można pobrać pliku zdalnego, Tradefed zgłosi wyjątek ConfigurationException
, który uniemożliwi uruchomienie testu. Brak tych plików uważamy za awarię krytyczną, ponieważ brakuje również niektórych artefaktów testowych.
Użyj parametrów zapytania
Dodanie parametrów zapytania do adresu URL jest możliwe za pomocą ?
. Na przykład gs://bucket/path?unzip=true
. Klucz/wartość unzip=true
będzie dostępna w implementacji interfejsu IRemoteFileResolver .
Dostępne są dwa wbudowane zachowania:
- unzip: Jeśli ustawione na
true
i pobrany plik jest w formacie ZIP, zostanie on automatycznie rozpakowany do lokalizacji tymczasowej. Przykład:?unzip=true
- opcjonalnie: domyślnie
false
. Jeśli ustawione natrue
i rozwiązanie nie powiedzie się, nie zgłosi wyjątku i po prostu nie zastąpi pliku. Przykład:?optional=true
Możesz także przekazać globalne argumenty zapytania za pomocą --dynamic-download-args key=value
, która przekaże klucz/wartość do wszystkich prób pobierania dynamicznego w wywołaniu.
Obsługiwane protokoły
Oficjalnie obsługiwane protokoły i odpowiadające im formaty to:
- Google Cloud Storage, protokół:
gs
, format:gs://<bucket name>/path
- Pliki lokalne, protokół:
file
, format:file:/local/path
- linki http, protokół:
http
, format:http://url
- linki https, protokół:
https
, format:https://url
Ograniczenia
Dynamiczna rozdzielczość @Option obsługuje obecnie tylko ograniczoną liczbę protokołów i lokalizacji, z których można pobierać. Rozdzielczość @Option jest obecnie włączona tylko dla głównej konfiguracji XML Tradefed.
Jeśli działają jako pakiet, bieżące moduły ( AndroidTest.xml
) domyślnie nie rozpoznają plików. Ma to na celu zapobieganie tworzeniu przez moduły nieznanych zależności . Można tego uniknąć, używając --enable-module-dynamic-download
na poziomie pakietu, ale główne pakiety, takie jak Compatibility Test Suite (CTS) i Vendor Test Suite (VTS), nie umożliwią tego.
Zaimplementuj nowy protokół
Obsługiwane protokoły mają w Tradefed implementację interfejsu IRemoteFileResolver , który definiuje krótki znacznik protokołu, który będzie dopasowywany w ścieżce pliku poprzez getSupportedProtocol
. Na przykład gs
jest używany w protokole Google Cloud Storage. Zalecanym interfejsem do wdrożenia jest #resolveRemoteFiles(RemoteFileResolverArgs)
, który będzie interfejsem utrzymywanym długoterminowo.
Zaimplementowane protokoły można dodać do pliku usług META-INF wiązki przewodów , aby oficjalnie włączyć obsługę.