选项处理

选项处理是 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