ACTS テストを構成する

このページでは、ACTS テストを構成する方法について説明します。

構成のソース

Android Comms テストスイート(ACTS)では、主に次の 3 つの構成ソースがあります。

  • コマンドライン インターフェース(CLI)
  • ACTS 構成ファイル
  • 環境変数

これらのソースの値は、ACTS テストの実行に使用される単一の構成に統合されています。複数の場所で値が指定されている場合、値は上記の順序(CLI が優先されます)に基づいて上書きされます。

環境変数に関する注意事項

ACTS テストで環境変数を使用する際は注意が必要です。これらの値はユーザーにはほとんど表示されないため、デベロッパーのワークステーション外で使用することはおすすめしません。環境の汚染を防ぐため、ACTS 自動テスト中は環境変数が無効になります。

必要な構成変数

ACTS テストのたびに、次の変数を設定する必要があります。

ACTS テストパス

ACTS は、単一のメイン エントリ ロケーションから実行されます。そのため、テストパスのロケーションはランナーにわかりません。

テストパスのロケーションを設定するには、ACTS_TESTPATH 環境変数を使用するか、コマンドラインで -tp / --testpaths フラグを使用します。この値には、ディレクトリのリストを指定できます。

ACTS テストクラス

ACTS は実行するテストクラスを知っている必要があります。テストクラス名の正規表現またはリストを指定できます。

この値を設定するには、コマンドラインで -tc / --test_class フラグを使用します。このフラグにはクラス名のリストも指定できます。クラス名は、対応するファイル名と一致する必要があります。たとえば、SampleTestSampleTest.py にある必要があります。

ACTS ログパス

ACTS には、STDOUT 以外にログを書き込む場所が必要です。ACTS は、テストが失敗した理由を特定するのに役立つデータを含む、完全なデバッグログを書き込みます。便宜上、ACTS はこうしたログを STDOUT に書き込むことはありません。

ログパスを設定するには、ACTS_LOGPATH 環境変数を使用するか、コマンドラインで -lp / --logpath フラグを使用します。

ACTS 構成パス

テストを実行するには、ACTS はどの testbed が存在するかを知っている必要があります。ACTS 構成には、testbed のすべてのデバイスと、必要になる特別なテストパラメータまたは環境パラメータが含まれます。コマンドラインでこの値を設定するには、-c / --config を使用します。

構成内に複数の testbed が存在する場合、ACTS は各 testbed のテストを実行します。リスト内の単一の testbed のテストのみを実行するには、-tb/--testbed <NAME> コマンドライン引数を使用します。

ローカル ワークステーションの例

大半の ACTS ユーザーは単一の Android Repo ブランチで開発し、次のような設定をしています。

# 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

ACTS ユーザーが複数のブランチで実行する場合は、通常は acts/framework ディレクトリから ACTS を実行し、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

テストベッドの設定

ACTS 構成ファイルは、ハードウェア デバイス上でテストを実行するために必要な情報をすべて提供します。

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

この構成の基本単位は testbed です。上記の構成例では、testbed my_testbed は 1 つの testbed 値で作成されます。2 番目の testbed another_testbed には、Android デバイスのリストの情報を保持する特別なコントローラ構成があります。これらのデバイスは、self.android_devices のデバイスのリストに保存されます。testbed で AndroidDevice オブジェクトが指定されていない場合、AndroidDevice オブジェクトを想定しているテストクラスにより例外が発生します。ACTS に付属する、サポートされているコントローラ構成の完全なリストについては、/acts/framework/acts/controllers/ のリストをご覧ください。

その他の値(上記のセクションで説明した特別な値ではないもの)はすべて、辞書として self.user_params に格納されます。この場所は、スマートフォンが従量制のデータ環境にあるかどうか、テスト用データの収集期間など、環境またはテストの情報を格納するのに適しています。

AndroidDevice の特殊なケース

複数のデバイスでさまざまなプロパティを使用して開発を行う場合の便宜を図るため、AndroidDevice には特殊なケースがあります。

JSON 構成形式

次の JSON の例の Key-Value ペアはすべて、対応する AndroidDevice オブジェクトに設定されています。構成が AndroidDevice 属性で定義されたパラメータを上書きしようとすると、ControllerError がスローされます。

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

その後、テスト スクリプトで、フィルタ関数を使用して正しいデバイスを取得し、デバイス オブジェクトから追加のパラメータにアクセスできます。

  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))

省略可能なパラメータ

以下に、省略可能なパラメータを示します。

  • adb_logcat_param: adb ログを収集するために adb logcat コマンドに追加される文字列。デフォルトでは adb logcat -v threadtime -b all が使用されます。adb_logcat_param を設定した場合、-b all セクションが上書きされます。たとえば、adb_logcat_param-b radio に設定すると、コマンドは adb logcat -v threadtime -b radio に変更されます。