选项处理是 Trade Federation 模块化方法的核心。具体而言,选项是一种机制,让开发者、集成者和测试运行者通过该机制可以共同协作,而不会重复相互的工作。简单地说,实现选项处理后,开发者可将 Java 类成员标记为可配置,届时该成员的值可被集成者增强或覆盖,并且随后可被测试运行者增强或覆盖。该机制适用于所有 Java 固有类型,以及固有类型的任何 Map
或 Collection
实例。
注意:选项处理机制仅适用于实现测试生命周期中包含的某个接口的类,并且仅当该类由生命周期系统实例化后才适用。
开发者
首先,开发者需要使用 @Option
注解来标记成员。
这些对象至少需要指定 name
和 description
值,前者指定与该选项关联的参数名称,后者指定使用 --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 }
以上就是开发者为该测试设置两个配置点的所有要求。开发者随后可以正常离开并使用 mWaitTime
和 mCalls
,而无需特别关注它们可配置的事实。由于 @Option
字段是在类实例化之后、run
方法调用之前设置的,因此实现者可以轻松为 Map
和 Collection
字段设置默认值或执行某类过滤操作,除此之外只能附加这些字段。
集成商
集成者的工作重心是编写 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
。
如果将 List
或 Collection
用作底层实现,则系统会按照命令行中指定的顺序存储所有值。
布尔值选项
布尔值基础类型的选项可以通过直接传递选项名称(例如 --[option-name]
)设置为 true
,也可以利用语法 --no-[option-name]
设置为 false
。