Tradefed 中的选项处理

选项处理是 Trade Federation 模块化方法的核心。具体而言,选项是一种机制,让开发者、集成者和测试运行者通过该机制可以共同协作,而不会重复相互的工作。简单地说,实现选项处理后,开发者可将 Java 类成员标记为可配置,届时该成员的值可被集成者增强或覆盖,并且随后可被测试运行者增强或覆盖。该机制适用于所有 Java 固有类型,以及固有类型的任何 MapCollection 实例。

注意:选项处理机制仅适用于实现测试生命周期中包含的某个接口的类,并且仅当该类由生命周期系统实例化后才适用。

开发者

首先,开发者需要使用 @Option 注解来标记成员。 这些对象至少需要指定 namedescription 值,前者指定与该选项关联的参数名称,后者指定使用 --help--help-all 运行命令时会在 TF 控制台上显示的说明。

举例来说,假设我们要构建一个功能完善的电话测试,我们会在测试中拨打各种电话号码,并预期在每个号码连接后收到一系列 DTMF 音。

public class PhoneCallFuncTest extends IRemoteTest {
    @Option(name = "timeout", description = "How long to wait for connection, in millis")
    private long mWaitTime = 30 * 1000;  // 30 seconds

    @Option(name = "call", description = "Key: Phone number to attempt. " +
            "Value: DTMF to expect. May be repeated.")
    private Map<String, String> mCalls = new HashMap<String, String>;

    public PhoneCallFuncTest() {
        mCalls.add("123-456-7890", "01134");  // default
    }

以上就是开发者为该测试设置两个配置点的所有要求。开发者随后可以正常离开并使用 mWaitTimemCalls,而无需特别关注它们可配置的事实。由于 @Option 字段是在类实例化之后、run 方法调用之前设置的,因此实现者可以轻松为 MapCollection 字段设置默认值或执行某类过滤操作,除此之外只能附加这些字段。

集成商

集成者的工作重心是编写 XML 格式的配置。配置格式允许集成者为任何 @Option 字段设置(或附加)值。例如,假设集成者想要定义拨打默认号码的低延迟测试,以及会拨打各种号码的运行时间较长的测试。集成者可以创建一对配置,可能如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration description="low-latency default test; low-latency.xml">
    <test class="com.example.PhoneCallFuncTest">
        <option name="timeout" value="5000" />
    </test>
</configuration>
<?xml version="1.0" encoding="utf-8"?>
<configuration description="call a bunch of numbers; many-numbers.xml">
    <test class="com.example.PhoneCallFuncTest">
        <option name="call" key="111-111-1111" value="#*#*TEST1*#*#" />
        <option name="call" key="222-222-2222" value="#*#*TEST2*#*#" />
        <!-- ... -->
    </test>
</configuration>

测试运行程序

测试运行者也可以通过 Trade Federation 控制台访问这些配置点。首先也是最重要的,它们将使用 run command <name> 指令(或简称 run <name>)运行命令(即配置及其所有参数)。除此之外,他们可以指定任何参数列表作为命令的一部分,这可能替换或附加到各个配置内的生命周期对象指定的字段。

如需使用 many-numbers 电话号码运行低延迟测试,测试运行者可以执行:

tf> run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#

或者,要从相反方向获得类似的效果,测试运行者可以减少 many-numbers 测试的等待时间:

tf> run many-numbers.xml --timeout 5000

选项排序

您可能会注意到 call 选项的底层实现是 Map,因此在命令行上重复了 --call 时,它们都将存储起来。

选项 timeout(其底层实现为 long)只能存储一个值。因此,系统只会存储指定的最后一个值。--timeout 5 --timeout 10 会生成包含 10 的 timeout

如果将 ListCollection 用作底层实现,则系统会按照命令行中指定的顺序存储所有值。

布尔值选项

布尔值基础类型的选项可以通过直接传递选项名称(例如 --[option-name])设置为 true,也可以利用语法 --no-[option-name] 设置为 false

另请参阅

将选项传递给套件和模块