ACTS-Tests konfigurieren

Auf dieser Seite wird beschrieben, wie ACTS-Tests konfiguriert werden.

Konfigurationsquellen

Die Android Comms Test Suite (ACTS) hat drei Hauptkonfigurationsquellen:

  • Über die Befehlszeile
  • ACTS-Konfigurationsdatei
  • Umgebungsvariablen

Werte aus diesen Quellen werden in einer einzigen Konfiguration zusammengefasst, die zum Ausführen eines ACTS-Tests verwendet wird. Wenn Werte an mehreren Stellen angegeben sind, werden die Werte gemäß der obigen Reihenfolge überschrieben, wobei die Befehlszeile Vorrang hat.

Hinweis zu Umgebungsvariablen

Seien Sie vorsichtig, wenn Sie Umgebungsvariablen für ACTS-Tests verwenden. Diese Werte sind für den Nutzer am wenigsten sichtbar und die Verwendung außerhalb der Entwicklerworkstation wird nicht empfohlen. Umgebungsvariablen werden während automatisierter ACTS-Tests deaktiviert, um Umgebungs-Poisoning zu vermeiden.

Erforderliche Konfigurationsvariablen

Für jeden ACTS-Test müssen die folgenden Variablen festgelegt werden.

ACTS-Testpfade

ACTS wird von einem einzigen Haupteingangsstandort aus ausgeführt. Daher ist die Position des Testpfads dem Runner unbekannt.

Legen Sie die Position des Testpfads mit der Umgebungsvariablen ACTS_TESTPATH oder mit dem Flag -tp/--testpaths in der Befehlszeile fest. Der Wert kann eine Liste von Verzeichnissen sein.

ACTS-Testklassen

Das ACTS muss wissen, welche Testklassen ausgeführt werden sollen. Dies kann ein regulärer Ausdruck oder eine Liste von Testklassennamen sein.

Verwenden Sie zum Festlegen dieses Werts das Flag -tc/--test_class in der Befehlszeile. Beachten Sie, dass dieses Flag auch eine Liste von Klassennamen akzeptiert. Die Klassennamen müssen mit den entsprechenden Dateinamen übereinstimmen. Beispiel: SampleTest muss in SampleTest.py gefunden werden.

ACTS-Logpfad

ACTS muss einen anderen Speicherort als STDOUT haben, in den Logs geschrieben werden können. ACTS schreibt vollständige Debugging-Logs mit Daten, mit denen Sie feststellen können, warum einige Tests fehlschlagen. Um Unordnung zu vermeiden, schreibt ACTS diese Logs nicht in STDOUT.

Verwenden Sie zum Festlegen des Logpfads die Umgebungsvariable ACTS_LOGPATH oder das Flag -lp/--logpath in der Befehlszeile.

ACTS-Konfigurationspfad

Um den Test durchzuführen, muss ACTS wissen, welche Testumgebung vorhanden ist. Die ACTS-Konfiguration enthält alle Geräte in der Testumgebung sowie alle speziellen Test- oder Umgebungsparameter, die möglicherweise erforderlich sind. Legen Sie diesen Wert mit -c/--config in der Befehlszeile fest.

Wenn die Konfiguration mehrere Testbeds enthält, führt ACTS die Tests für jedes Prüffeld aus. Wenn Sie den Test nur für ein einzelnes testbed in der Liste ausführen möchten, verwenden Sie das Befehlszeilenargument -tb/--testbed <NAME>.

Beispiel für eine lokale Workstation

Die meisten ACTS-Nutzer entwickeln mit einem einzelnen Android-Repository-Zweig und haben eine ähnliche Einrichtung wie diese:

# in ~/.bashrc
ACTS_LOGPATH='/tmp/acts_logpath'
ACTS_TESTPATH='~/android/<REPO_BRANCH>/tools/test/connectivity/acts_tests/'

# On cmdline
$ act.py -c ~/acts_configs/local_config.json -tc SampleTest -tb marlin

Wenn ACTS-Nutzer in mehreren Zweigen ausgeführt werden, führen sie ACTS häufig über das Verzeichnis acts/framework aus und verwenden einen relativen Pfad für ACTS_TESTPATH:

# in ~/.bashrc
ACTS_LOGPATH='/tmp/acts_logpath'
ACTS_TESTPATH='../acts_tests/'

# On cmdline
$ cd ~/android/main/tools/test/connectivity/acts_tests/acts_contrib/
$ act.py -c ~/acts_configs/local_config.json -tc SampleTest -tb marlin

Testbeds konfigurieren

Die ACTS-Konfigurationsdatei enthält alle erforderlichen Informationen zum Ausführen von Tests auf Hardwaregeräten:

{
  "testbed": {
    "my_testbed": {
      "my_testbed_value": "value"
    },
    "another_testbed": {
      "AndroidDevice": [
        "53R147"
      ]
    }
  },
  "user_parameter_1": "special environment value",
  "user_parameter_2": "other special value"
}

Die Basiseinheit dieser Konfiguration ist das testbed. In der obigen Beispielkonfiguration wird die testbed-my_testbed mit einem einzelnen testbed-Wert erstellt. Das zweite Testbed: another_testbed hat eine spezielle Controllerkonfiguration, die die Informationen für eine Liste von Android-Geräten enthält. Diese Geräte werden in einer Liste von Geräten unter self.android_devices gespeichert. Wenn ein testbed kein AndroidDevice-Objekt angibt, löst eine Testklasse, die ein AndroidDevice-Objekt erwartet, eine Ausnahme aus. Eine vollständige Liste der unterstützten Controller-Konfigurationen, die in ACTS enthalten sind, finden Sie in der Liste unter /acts/framework/acts/controllers/.

Alle anderen Werte (die keine besonderen Werte sind, die im obigen Abschnitt erwähnt wurden) werden in self.user_params als Wörterbuch gespeichert. Hier können Sie Umgebungs- oder Testinformationen speichern, z. B. ob sich Smartphones in einer Umgebung mit Messdaten befinden oder wie lange Daten für einen Test erfasst werden sollen.

Sonderfälle für AndroidDevice

Wenn Sie mehrere Geräte mit unterschiedlichen Eigenschaften haben möchten, gibt es bei AndroidDevice einige Sonderfälle.

JSON-Konfigurationsformat

Alle Schlüssel/Wert-Paare im folgenden JSON-Beispiel sind auf das entsprechende AndroidDevice-Objekt festgelegt. Wenn mit der Konfiguration versucht wird, einen im Attribut AndroidDevice definierten Parameter zu überschreiben, wird ControllerError ausgelöst.

  "AndroidDevice": [{"serial": "XXXXXX", "label": "publisher"},
                    {"serial": "YYYYYY", "label": "subscriber", "user_parameter_1": "anything"}]

Im Testskript können Sie dann mithilfe einer Filterfunktion das richtige Gerät abrufen und auf zusätzliche Parameter aus dem Geräteobjekt zugreifen:

  def setup_class(self):
      self.pub = next(filter(lambda ad: ad.label == 'publisher',
                             self.android_devices))
      self.sub = next(filter(lambda ad: ad.label == 'user_parameter_1',
                             self.android_devices))

Optionaler Parameter

Der folgende Parameter ist optional:

  • adb_logcat_param: Ein String, der an den Befehl adb logcat zum Erfassen von ADB-Logs angehängt wird. Standardmäßig wird adb logcat -v threadtime -b all verwendet. Wenn adb_logcat_param festgelegt ist, wird der Abschnitt -b all überschrieben. Wenn Sie beispielsweise adb_logcat_param auf -b radio setzen, wird der Befehl in adb logcat -v threadtime -b radio geändert.