配置 ACTS 测试

本页将介绍如何配置 ACTS 测试。

配置来源

Android 通讯测试套件 (ACTS) 有三个主要配置来源:

  • 命令行界面 (CLI)
  • ACTS 配置文件
  • 环境变量

来自这些来源的值被组合成了用于运行 ACTS 测试的单个配置。如果在多个位置指定了值,系统会根据上述顺序(CLI 优先)覆盖值。

关于环境变量的注意事项

使用环境变量进行 ACTS 测试时,需要小心。这些值对用户的可见性很低,建议不要在开发者工作站之外使用这些值。在 ACTS 自动测试期间会停用环境变量,以免破坏环境。

必需的配置变量

每项 ACTS 测试都需要设置以下变量。

ACTS 测试路径

ACTS 从单个主入口位置运行。因此,运行程序并不知道测试路径位置。

请使用 ACTS_TESTPATH 环境变量或在命令行中使用 -tp/--testpaths 标志设置测试路径位置。该值可以是目录列表。

ACTS 测试类

ACTS 必须知道要运行哪些测试类。该值可以是正则表达式或测试类名称列表。

如需设置此值,请在命令行中使用 -tc/--test_class 标志。请注意,此标志也接受类名称列表。类名称必须与其对应的文件名相符,例如,SampleTest.py 中必须包含 SampleTest

ACTS 日志路径

除 STDOUT 以外,ACTS 必须还有另一个可向其中写入日志的位置。ACTS 会写入完整的调试日志,其中包含的数据可帮助确定某些测试失败的原因。为避免混乱,ACTS 不会将这些日志写入 STDOUT。

如需设置日志路径,请使用 ACTS_LOGPATH 环境变量或在命令行中使用 -lp/--logpath 标志。

ACTS 配置路径

为了运行测试,ACTS 必须知道存在的测试平台。ACTS 配置包含测试平台中的所有设备,以及可能需要的任何特殊测试或环境参数。在命令行中使用 -c/--config 来设置此值。

如果配置中包含多个测试平台,ACTS 会针对每个测试平台运行测试。如要只针对列表中的一个测试平台运行测试,请使用 -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/master/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"
}

此配置以测试平台为基本单元。在上面的配置示例中,使用单个测试平台值创建了测试平台 my_testbed。第二个测试平台 another_testbed 具有特殊的控制器配置,该配置中包含了 Android 设备列表的信息。这些设备存储在 self.android_devices 下的设备列表中。请注意,如果测试平台没有指定 AndroidDevice 对象,那么需要 AndroidDevice 对象的测试类会引发异常。如需查看 ACTS 附带的受支持控制器配置的完整列表,请参阅位于 /acts/framework/acts/controllers/ 的列表。

所有其他值(不属于上一部分中提到的特殊值)都存储在 self.user_params 中(作为字典)。此处非常适合用来存储环境或测试信息,例如手机是否处于按流量计费的数据环境中或者为某项测试收集数据需要多长时间。

AndroidDevice 的特殊用例

AndroidDevice 提供了一些特殊用例,以方便您使用具有不同属性的多种设备进行开发。

JSON 配置格式

以下 JSON 中的所有键值对均已设置为相应的 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 logcat 命令的字符串,用于收集 adb 日志。默认情况下会使用 adb logcat -v threadtime -b all。如果设置了 adb_logcat_param,则会覆盖 -b all 部分。例如,将 adb_logcat_param 设置为 -b radio 会将命令更改为 adb logcat -v threadtime -b radio