Aby zrozumieć tę sekcję, najpierw zapoznaj się z informacjami o The Tradefed @Option.
Typowe opcje w Tradefed umożliwiają klasom testów otrzymywanie dodatkowych informacji z konfiguracji XML lub wiersza poleceń. Ta funkcja umożliwia wykonanie dodatkowego kroku i w razie potrzeby uzupełnienie niektórych dodatkowych informacji.
Przykład opcji pliku
Przykładowy plik @opcja:
@Option(name = 'config-file')
private File mConfigFile;
Powyższe ustawienia można określić za pomocą konfiguracji XML:
<option name="config-file" value="/tmp/file" />
lub za pomocą polecenia:
--config-file /tmp/file
Opis
Ta funkcja pozwala na bezproblemowe przesyłanie plików @Options, które są zdalne do plików lokalnych, i sprawną dostępność z punktu widzenia użytkownika.
Aby ten sposób zadziałał, plik musi zostać określony za pomocą zdalnej ścieżki stylu. Przykład:
--config-file gs://bucket/tmp/file
Ta ścieżka wskazuje plik w zasobniku Google Cloud Storage (GCS), w którym jest przechowywany. Po zobaczeniu tej zdalnej ścieżki Tradefed spróbuje pobrać plik lokalnie i przypisać go do @Option. W efekcie zmienna mConfigFile
wskazuje teraz lokalną wersję pliku, której może używać test.
Jeśli z jakiegokolwiek powodu nie można pobrać pliku zdalnego, Tradefed wygeneruje błąd ConfigurationException
, który uniemożliwi uruchomienie testu. Ich brak uznajemy za krytyczną awarię, ponieważ brakuje też niektórych artefaktów testowych.
Korzystanie z parametrów zapytania
Parametry zapytania można dodawać do adresu URL za pomocą ?
. Na przykład: gs://bucket/path?unzip=true
. Para klucz-wartość unzip=true
będzie dostępna w implementacji IRemoteFileReleaser.
Dostępne są 2 wbudowane zachowania:
- unzip: jeśli ustawienie to
true
, a pobierany plik jest plikiem ZIP, zostanie on automatycznie rozpakowany w tymczasowej lokalizacji. Przykład:?unzip=true
- opcjonalnie: domyślna wartość to
false
. Jeśli ustawisz wartośćtrue
, a rozdzielczość nie powiedzie się, nie zostanie wygenerowany wyjątek i plik nie zostanie zastąpiony. Przykład:?optional=true
Możesz też przekazywać argumenty zapytania globalnego za pomocą parametru --dynamic-download-args key=value
, który przekaże parę klucz-wartość do wszystkich prób pobrań dynamicznych wykonanych w wywołaniu.
Obsługiwane protokoły
Oficjalnie obsługiwane protokoły i odpowiednie formaty:
- 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ść opcji @Option obsługuje obecnie tylko ograniczoną liczbę protokołów i lokalizacji do pobrania. Rozdzielczość @Option jest obecnie włączona tylko w głównej konfiguracji XML Tradefed.
Jeśli pakiet jest uruchamiany jako zestaw, bieżące moduły (AndroidTest.xml
) nie będą domyślnie rozwiązywać plików.
Ma to zapobiec tworzeniu przez moduły nieznanych zależności. Można go uniknąć, używając znaku --enable-module-dynamic-download
na poziomie zestawu, ale główne zestawy, takie jak Compatibility Test Suite (CTS) i Vendor Test Suite (VTS), nie będą go uwzględniać.
Wdrażanie nowego protokołu
Obsługiwane protokoły mają w Tradefed implementację interfejsu IRemoteFileResolver, który definiuje krótki tag protokołu, który zostanie dopasowany w ścieżce pliku za pomocą 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 utrzymanym na dłuższą metę.
Zaimplementowane protokoły można dodać do pliku META-INF services, aby oficjalnie włączyć obsługę.