本页将介绍如何配置 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/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"
}
此配置以测试平台为基本单元。在上面的配置示例中,使用单个测试平台值创建了测试平台 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
。