Um diesen Abschnitt zu verstehen, sollten Sie sich zuerst mit der Tradefed-@Option vertraut machen.
Mit typischen Optionen in Tradefed können Testklassen zusätzliche Informationen aus der XML-Konfiguration oder der Befehlszeile erhalten. Mit dieser Funktion können Sie einen zusätzlichen Schritt durchführen und einige dieser zusätzlichen Informationen bei Bedarf korrigieren.
Beispiel für Dateioption
Beispieldatei @option:
@Option(name = 'config-file')
private File mConfigFile;
Die oben genannten Einstellungen können über die XML-Konfiguration festgelegt werden:
<option name="config-file" value="/tmp/file" />
oder über einen Befehl:
--config-file /tmp/file
Beschreibung
Mit dieser Funktion können Sie @Options vom Typ „Datei“, die sich auf eine Remotedatei beziehen, in eine lokale Datei auflösen, sodass sie für Nutzer nahtlos verfügbar sind.
Damit dies funktioniert, muss die Datei mit einem Remote-Stilpfad angegeben werden. Beispiel:
--config-file gs://bucket/tmp/file
Dieser Pfad verweist auf eine Datei in einem Google Cloud Storage-Bucket (GCS), in dem sie gespeichert ist. Wenn Tradefed diesen Remote-Pfad sieht, wird versucht, die Datei lokal herunterzuladen und der @Option zuzuweisen. Dadurch verweist die Variable mConfigFile
jetzt auf die lokale Version der Datei, die vom Test verwendet werden kann.
Wenn die Remotedatei aus irgendeinem Grund nicht heruntergeladen werden kann, löst Tradefed eine ConfigurationException
aus, die verhindert, dass der Test ausgeführt wird. Das Fehlen dieser Dateien werten wir als kritischen Fehler, da auch einige Testartefakte fehlen.
Abfrageparameter verwenden
Mit ?
können Sie einer URL Abfrageparameter hinzufügen. Beispiel: gs://bucket/path?unzip=true
. Das Schlüssel/Wert-Paar unzip=true
ist in der Implementierung der IRemoteFileResolver-Schnittstelle verfügbar.
Es gibt zwei integrierte Verhaltensweisen:
- unzip: Wenn diese Option auf
true
festgelegt ist und die heruntergeladene Datei eine ZIP-Datei ist, wird sie automatisch an einem temporären Speicherort entpackt. Beispiel:?unzip=true
- Optional. Die Standardeinstellung ist
false
. Wenntrue
festgelegt ist und die Auflösung fehlschlägt, wird keine Ausnahme ausgelöst und die Datei wird einfach nicht ersetzt. Beispiel:?optional=true
Sie können auch globale Abfrageargumente über --dynamic-download-args key=value
übergeben, mit denen der Schlüssel/Wert an alle dynamischen Downloads übergeben wird, die im Aufruf versucht werden.
Unterstützte Protokolle
Die offiziell unterstützten Protokolle und ihre entsprechenden Formate sind:
- Google Cloud Storage, Protokoll:
gs
, Format:gs://<bucket name>/path
- Lokale Dateien, Protokoll:
file
, Format:file:/local/path
- http-Links, Protokoll:
http
, Format:http://url
- https-Links, Protokoll:
https
, Format:https://url
Beschränkungen
Die dynamische Auflösung von @Option unterstützt derzeit nur eine begrenzte Anzahl von Protokollen und Download-Standorten. Die Auflösung von @Option ist derzeit nur für die Tradefed-Haupt-XML-Konfiguration aktiviert.
Wenn die Ausführung als Suite erfolgt, werden die Dateien in den aktuellen Modulen (AndroidTest.xml
) standardmäßig nicht aufgelöst.
So soll verhindert werden, dass Module unbekannte Abhängigkeiten erstellen. Dies kann auf Suite-Ebene mit --enable-module-dynamic-download
umgangen werden. Bei wichtigen Suites wie der Compatibility Test Suite (CTS) und der Vendor Test Suite (VTS) ist dies jedoch nicht möglich.
Neues Protokoll implementieren
Die unterstützten Protokolle haben eine Implementierung in Tradefed der IRemoteFileResolver-Schnittstelle, die das Kurz-Tag des Protokolls definiert, das im Dateipfad über getSupportedProtocol
abgeglichen wird. gs
wird beispielsweise für das Google Cloud Storage-Protokoll verwendet. Die empfohlene Schnittstelle für die Implementierung ist #resolveRemoteFiles(RemoteFileResolverArgs)
. Sie wird langfristig unterstützt.
Die implementierten Protokolle können der Datei META-INF/services des Harness hinzugefügt werden, um die Unterstützung offiziell zu aktivieren.