Um diesen Abschnitt zu verstehen, solltest du dich zuerst mit der Tradefed-@Option vertraut machen.
Mit den üblichen 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 ausführen und einige dieser zusätzlichen Informationen bei Bedarf klären.
Beispiel für eine Dateioption
Beispieldatei für @option:
@Option(name = 'config-file')
private File mConfigFile;
Das kann über die XML-Konfiguration festgelegt werden:
<option name="config-file" value="/tmp/file" />
oder über den Befehl:
--config-file /tmp/file
Beschreibung
Mit dieser Funktion können Sie @Options vom Dateityp, die sich aus der Ferne befinden, in eine lokale Datei auflösen, damit sie für Nutzer nahtlos verfügbar sind.
Damit dies funktioniert, muss die Datei mit einem Remote-Pfad angegeben werden. Beispiel:
--config-file gs://bucket/tmp/file
Dieser Pfad verweist auf eine Datei in einem Google Cloud Storage-Bucket (GCS-Bucket), in dem sie gespeichert ist. Tradefed versucht dann, die Datei lokal herunterzuladen und der @Option zuzuweisen. Dies führt dazu, dass die Variable mConfigFile
jetzt auf die lokale Version der Datei verweist, die vom Test verwendet werden kann.
Wenn die Remotedatei aus irgendeinem Grund nicht heruntergeladen werden kann, löst Tradefed eine ConfigurationException
aus, die den Test verhindert. Wir betrachten das Fehlen dieser Dateien 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
. Der Schlüssel/Wert unzip=true
ist in der Implementierung der IRemoteFileResolver-Schnittstelle verfügbar.
Es stehen zwei integrierte Verhaltensweisen zur Verfügung:
- 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
Du kannst auch globale Abfrageargumente über --dynamic-download-args key=value
übergeben. Dadurch werden der Schlüssel/Wert an alle dynamischen Downloads übergeben, die bei der Aufrufung 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 Downloadorten. Die Auflösung von @Option ist derzeit nur für die Haupt-XML-Tradefed-Konfiguration aktiviert.
Bei Ausführung als Suite werden die Dateien von den aktuellen Modulen (AndroidTest.xml
) nicht standardmäßig aufgelöst.
Damit soll verhindert werden, dass Module unbekannte Abhängigkeiten erstellen. Dafür kann --enable-module-dynamic-download
auf Suite-Ebene verwendet werden. Bei größeren Suiten wie der Kompatibilitätstest-Suite (CTS) und der Vendor Test Suite (VTS) wird sie jedoch nicht aktiviert.
Neues Protokoll implementieren
Die unterstützten Protokolle haben in Tradefed eine Implementierung der IRemoteFileResolver-Schnittstelle, die das Kurz-Tag des Protokolls definiert, das im Dateipfad über getSupportedProtocol
abgeglichen wird. Beispielsweise wird gs
für das Google Cloud Storage-Protokoll verwendet. Wir empfehlen die Implementierung von #resolveRemoteFiles(RemoteFileResolverArgs)
, da diese Benutzeroberfläche langfristig gepflegt wird.
Die implementierten Protokolle können der Datei harness META-INF services hinzugefügt werden, um die Unterstützung offiziell zu aktivieren.