Um diesen Abschnitt zu verstehen, studieren Sie zunächst die @Option von Tradefed.
Typische Optionen in Tradefed ermöglichen es Testklassen, zusätzliche Informationen aus der XML-Konfiguration oder der Befehlszeile zu erhalten. Mit dieser Funktion können Sie bei Bedarf einen Schritt weiter gehen und einige dieser zusätzlichen Informationen klären.
Beispiel für eine Dateioption
Beispieldatei @option:
@Option(name = 'config-file')
private File mConfigFile;
Das Obige kann über die XML-Konfiguration eingestellt werden:
<option name="config-file" value="/tmp/file" />
oder per Befehl:
--config-file /tmp/file
Beschreibung
Mit dieser Funktion können Sie dateitypisierte @Optionen, die remote sind, in eine lokale Datei auflösen, um aus Benutzersicht nahtlos verfügbar zu sein.
Damit dies funktioniert, muss die Datei mit einem Remote-Style-Pfad angegeben werden. Zum Beispiel:
--config-file gs://bucket/tmp/file
Dieser Pfad verweist auf eine Datei in einem Google Cloud Storage (GCS)-Bucket, in dem sie gespeichert ist. Wenn Tradefed diesen Remote-Pfad sieht, wird es versuchen, die Datei lokal herunterzuladen und sie der @Option zuzuweisen. Dies führt dazu, dass die Variable mConfigFile
nun auf die lokale Version der Datei verweist, die vom Test verwendet werden kann.
Wenn die Remote-Datei aus irgendeinem Grund nicht heruntergeladen werden kann, löst Tradefed eine ConfigurationException
aus, die die Ausführung des Tests verhindert. Wir halten das Fehlen dieser Dateien für einen kritischen Fehler, da auch einige Testartefakte fehlen werden.
Verwenden Sie Abfrageparameter
Das Hinzufügen von Abfrageparametern zu einer URL ist mit ?
möglich. . 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 auf
true
gesetzt und die heruntergeladene Datei eine ZIP-Datei ist, wird sie automatisch an einen temporären Speicherort entpackt. Beispiel:?unzip=true
- optional: Der Standardwert ist
false
. Wenn der Wert auftrue
gesetzt ist und die Auflösung fehlschlägt, wird keine Ausnahme ausgelöst und die Datei einfach nicht ersetzt. Beispiel:?optional=true
Sie können auch globale Abfrageargumente über --dynamic-download-args key=value
übergeben, die den Schlüssel/Wert an alle dynamischen Downloads übergeben, 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
Einschränkungen
Die dynamische Auflösung von @Option unterstützt derzeit nur eine begrenzte Anzahl von Protokollen und Speicherorten zum Herunterladen. Die Auflösung von @Option ist derzeit nur für die Hauptkonfiguration von XML Tradefed aktiviert.
Bei der Ausführung als Suite lösen aktuelle Module ( AndroidTest.xml
) die Dateien standardmäßig nicht auf. Dies soll verhindern, dass Module unbekannte Abhängigkeiten erzeugen . Dies kann durch die Verwendung von --enable-module-dynamic-download
auf Suite-Ebene umgangen werden, aber große Suiten wie die Compatibility Test Suite (CTS) und die Vendor Test Suite (VTS) aktivieren dies nicht.
Implementieren Sie ein neues Protokoll
Die unterstützten Protokolle verfügen über eine Implementierung der IRemoteFileResolver-Schnittstelle in Tradefed, die das kurze Tag des Protokolls definiert, das über getSupportedProtocol
im Dateipfad abgeglichen wird. Beispielsweise wird gs
für das Google Cloud Storage-Protokoll verwendet. Die empfohlene zu implementierende Schnittstelle ist #resolveRemoteFiles(RemoteFileResolverArgs)
, die langfristig gepflegte Schnittstelle.
Die implementierten Protokolle können zur Datei „Harness META-INF Services“ hinzugefügt werden, um die Unterstützung offiziell zu aktivieren.