Lariat ist ein leistungsstarkes Befehlszeilen-Tool, das die Ausführung von Befehlen und das Ausführen von ausführbaren Android-Geräten optimieren soll. Dies erreicht dies durch Nutzung der API von Gerätefarmern und der Android Debug Bridge (ADB). Mit Lariat wird der umständliche Prozess der manuellen Verbindung mit Geräten, dem Drücken von Dateien, dem Ausführen von Befehlen und dem Abrufen von Ergebnissen vereinfacht und effizienter gestaltet. Es ist eine ideale Lösung zur Automatisierung von Aufgaben in CII -Pipelines (Continuous Integration).
Lariat ist auf PYPI erhältlich:
python -m pip install lariat
Lariat unterstützt offiziell Python 3.8+.
Lariat verwendet eine JSON -Konfigurationsdatei. Der Standardort für diese Konfigurationsdatei befindet sich im Verzeichnis .lariat
im Home -Verzeichnis des Benutzers ( ~/.lariat/config.json
). Die Konfigurationsdatei wird Folgendes angeben:
device_farmer_url
: Die URL der DeviceFarmer -Instanz, mit der eine Verbindung hergestellt werden soll.
.json
oder .yaml
endet. access_token
: Ihr Geräte -Farmer -Zugangs -Token.
adb_private_key_path
: (Optional) Pfad zu einem nicht defekten ADB-privaten Schlüssel. Standardmäßig ~/.android/adbkey
wenn nicht angegeben
adb_shell_default_read_timeout_s
: (optional) Standard -Timeout (in Sekunden) zum Lesen von Daten von einem Gerät. Dieser Wert muss möglicherweise aus dem Standardwert von 10 Sekunden für bestimmte Gerätevorgänge erhöht werden.
{
"access_token" : " ef02da4fb3884395af4cf011061a2318ca5e9a04abd04de59c5c99afcce0b7fz " ,
"device_farmer_url" : " https://my.device-farmer-instance.com/ " ,
"adb_private_key_path" : " /custom/path/adb.key " ,
"adb_shell_default_read_timeout_s" : 32.5
}
Alle Konfigurationsoptionen können in der Befehlszeile angegeben werden, um alle in der Konfigurationsdatei festgelegten Standardeinstellungen zu überschreiben. Beispielsweise kann die Befehlszeilenoption --device_farmer_url
verwendet werden, um die in der Konfigurationsdatei festgelegte Gerätefarmer -URL zu überschreiben.
usage: lariat [-h] [-g | -e EXEC_FILE | -c COMMAND] [--config CONFIG] [-s SELECT [SELECT ...]] [-f FILTER [FILTER ...]]
[-p PUSH_FILES]
DeviceFarmer automation tool
optional arguments:
-h , --help show this help message and exit
-g , --get-devices Enumerate devices on DeviceFarmer instance. Does not execute any commands on devices. Prints JSON results
to stdout.
-e EXEC_FILE, --exec-file EXEC_FILE
Push a file and execute it. Pushes to /data/local/tmp/.
-c COMMAND, --command COMMAND
Run a command.
--config CONFIG Override the default path to the configuration file. Default:/home/larry.espenshade/.lariat/config.json
-s SELECT [SELECT ...], --select SELECT [SELECT ...]
Select the fields to be returned by --get-devices (-g). If not specified, all fields are returned.
-f FILTER [FILTER ...], --filter FILTER [FILTER ...]
Filter devices via a list of key-value pairs (e.g., sdk=27 manufacturer=SAMSUNG). Non boolean values are
regex matched
-p PUSH_FILES, --push-files PUSH_FILES
Specify the path to the file or directory to be pushed to the device. Pushes to /data/local/tmp/.
-v, --verbose Increase log level. Can be supplied multiple times to further increase log verbosity (e.g. -vv)
Die Optionen --select
und --filter
verwenden beide "Feldnamen", um ihre jeweiligen Aktionen auszuführen. Diese Feldnamen sind JSON -Schlüssel, wie von DeviceFarmer als Teil seiner REST -API definiert. Sie können unterstützte Felder für Ihre DeviceFarmer -Installation anzeigen, indem Sie zu den folgenden URLs navigieren: https://<device_farmer_url>/api/v1/devices/<serial>
wobei device_farmer_url
die URL zu Ihrer Gerätefarmer -Installation ist, und serial
ist die Serielle der Seriennummer eines One One One One One ein Ihrer Geräte. Die /<serial>
-Komponente kann weggelassen werden, um alle Felder aller Geräte anzuzeigen.
Feldnamen unterstützen die Punktnotation, um auf verschachtelte Schlüssel zuzugreifen. Zum Beispiel kann battery.health
verwendet werden, um auf den verschachtelten health
innerhalb battery
zuzugreifen.
Beachten Sie, dass das Angeben eines --filter
zusammen mit einer --select
automatisch alle im Filter angegebenen Feldnamen im resultierenden JSON enthalten.
abi
- Binary -Schnittstelle für Geräteanwendung (z. B. armeabi-v7a
)manufacturer
- GeräteherstellermarketName
- Geräte -Marketing -Namemodel
- Gerätemodellameprovider.name
- STF -Anbieter, der dieses Gerät hostetversion
- Android -Versionlariat --get-devices
--get-devices
zurückgegeben wurden: lariat --get-devices --select serial model status
lariat --get-devices --filter manufacturer=SAMSUNG sdk=2[5-7]
lariat --get-devices --filter provider.name=my.devicefarmer.com
lariat --exec-file path/to/hello
lariat --command " echo hello " --filter abi=arm64-v8a
lariat --push-files path/to/files
Lariat gibt die Ergebnisse für jedes Gerät zurück, das die Filterkriterien erfüllt hat.
Das Folgende ist die Ausgabe des Beispiels für einen echo
-Befehl:
lariat --command " echo hello " --filter abi=arm64-v8a
" A12345 " : {
" output " : " hello " ,
" exitcode " : 0,
},
" B54321 " : {
" output " : " hello " ,
" exitcode " : 0,
},
" C678910 " : {
" reason " : " Device is currently in use " ,
}
Jedes Ergebnis enthält je nach Verfügbarkeit des Geräts unterschiedliche Felder:
Wenn ein Gerät nicht verfügbar ist , hat das Ergebnis ein einzelnes Feld:
reason
: Gibt an, warum das Gerät nicht zur Verwendung verfügbar war, wie es derzeit verwendet wird, nicht auf dem Bereich vorhanden ist.Wenn ein Gerät verfügbar ist und ein Betrieb darauf ausgeführt wurde, enthält das Ergebnis zwei Felder:
output
: Enthält die ADB -Shell -Ausgabe des ausgeführten Befehls oder Details zur durchgeführten Aktion.exitcode
: Der Rückgabecode des Befehls oder der Aktion, die auf dem Gerät ausgeführt wird.Denken Sie daran, dass ein Gerät entweder ein Feld "Grund" (falls es nicht verfügbar war) oder "Ausgabe" und "ExitCode" -Felder hat
Aus Gründen der Bequemlichkeit ist ein offizielles Lariat -Docker -Bild verfügbar.
Um das Docker -Bild zu verwenden, laufen Sie einfach aus
docker run --rm -v ~ /.android:/root/.android:ro -v ~ /.lariat:/root/.lariat:ro ghcr.io/zetier/lariat:latest -c ' echo hello '
Dieser Befehl Docker Run erstellt und führt einen Docker -Container basierend auf dem Bild ghcr.io/zetier/lariat:latest aus. Es führt die folgenden Aktionen aus:
Erstellt eine schreibgeschützte Lautstärkemontage für das .android-Verzeichnis auf der Host-Maschine, die ADB-Tasten enthält, zum Verzeichnis /root/.android im Container.
Erstellt eine schreibgeschützte Lautstärkereinzeit für das .lariat-Verzeichnis auf dem Host-Computer, das die Lariat-Konfigurationsdatei enthält, zum Verzeichnis /root/.lariat im Container.
Das Flag -RM -Flag stellt sicher, dass der Container nach dem Abschluss automatisch entfernt wird.
Im Container wird der Befehl lariat -c 'echo hello'
ausgeführt, wodurch "Hallo" als Ausgabe auf jedem abschließbaren Gerät auf Ihrem Gerätefarmerbereich druckt.
Bitte beachten Sie, dass Sie möglicherweise den Befehl Docker Run entsprechend ändern müssen, wenn sich Ihre ADB -Tasten und Ihre Konfigurationsdatei in verschiedenen Verzeichnissen auf dem Host -Computer befinden, um die richtigen Pfade für die Volumenmontage bereitzustellen.
Lariat wurde für eine einfache Integration in CI -Pipelines entwickelt. Im Folgenden finden Sie ein Beispiel für einen Gitlab -Job, der eine binäre in der Pipeline auf einem Gerätefarbenbereich eingebaute Binäranlagen testet:
.lariat-test :
image :
name : ghcr.io/zetier/lariat:latest
entrypoint : [""]
stage : test
before_script :
# Copy keys and configs from private CI variables
- mkdir -p ~/.android
- echo "$CI_ADB_PUB_KEY" > ~/.android/adbkey.pub
- echo "$CI_ADB_PRI_KEY" > ~/.android/adbkey
- echo "$CI_FARMHAND_CONFIG" -> ~/.lariat/config.json
script :
- lariat --file $BINARY > test_results.json
artifacts :
paths :
- test_results.json
# Assumes a `build-android-binary` job that produces `android_binary`
# as an artifact.
android-range-test :
extends : .lariat-test
variables :
BINARY : android_binary
needs :
- build-android-binary
Lariat sperrt Geräte, bevor er Operationen ausführt, um einen exklusiven Zugriff zu gewährleisten. Nach Abschluss der Operationen werden die Geräte freigeschaltet.
Stellen Sie sicher, dass Sie über ~/.lariat/config.json
den richtigen Pfad zur Adb -privaten Schlüsseldatei angeben, wenn sie sich vom Standardstandort unterscheidet ( ~/.android/adbkey
).
Standardmäßig wird Lariat aufgezählt jeder Gerät auf dem Gerätefarmbereich, einschließlich der nicht present
oder ready
. Sie können dies nach Bedarf ändern, indem Sie --filter ready=true present=true
bei Bedarf.
HINWEIS: LIARIAT wird eingeschaltet und regelmäßig mit Ubuntu 18.04 mit Python 3.8 getestet. Andere Verteilungen und Versionen können funktionieren, sind jedoch derzeit nicht getestet.
Klonen Sie das Repository
Installieren Sie Abhängigkeiten zusammen mit dem Lariat Python -Paket
sudo apt-get update
sudo apt-get install python3-venv python3.8-venv -y
python3.8 -m venv venv
source venv/bin/activate
(venv) pip install --upgrade pip
(venv) pip install .
Erstellen Sie eine Konfigurationsdatei
Beiträge sind willkommen! Wenn Sie Probleme finden oder Vorschläge für Verbesserungen haben, öffnen Sie bitte ein Problem oder senden Sie eine Pull -Anfrage.
Dieses Projekt ist unter der GPLV2 -Lizenz lizenziert.