期權處理是 Trade Federation 模塊化方法的核心。特別是,選項是開發人員、集成人員和測試運行人員可以一起工作而不必重複彼此工作的機制。簡而言之,我們的選項處理實現允許開發人員將 Java 類成員標記為可配置的,此時該成員的值可能會被 Integrator 增加或覆蓋,並且隨後可能被 Test Runner 增加或覆蓋。這種機制適用於所有 Java 內在類型,以及任何Map
或Collection
的內在類型。
注意:選項處理機制僅適用於實現Test Lifecycle中包含的接口之一的類,並且僅當該類由生命週期機制實例化時。
開發商
首先,開發人員使用@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
字段設置默認值或執行某種過濾,否則這些字段是附加的-只要。
積分器
Integrator 在以 XML 編寫的配置世界中工作。配置格式允許 Integrator 為任何@Option
字段設置(或附加)一個值。例如,假設 Integrator 想要定義一個調用默認號碼的低延遲測試,以及一個調用各種號碼的長時間運行的測試。他們可以創建一對可能如下所示的配置:
<?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>
測試賽跑者
Test Runner 還可以通過 Trade Federation 控制台訪問這些配置點。首先,他們將使用run command <name>
指令(或簡稱run <name>
)運行命令(即配置及其所有參數)。除此之外,他們可以指定任何參數列表作為命令的一部分,可以替換或附加到每個配置中生命週期對象指定的字段。
要使用many-numbers
電話號碼運行低延遲測試,Test Runner 可以執行:
tf> run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#
或者,為了從相反的方向獲得類似的效果,Test Runner 可以減少many-numbers
測試的等待時間:
tf> run many-numbers.xml --timeout 5000
選項訂購
您可能會注意到call
選項的底層實現是一個Map
,因此在命令行上重複--call
時,它們都將被存儲。
具有long
底層實現的選項timeout
只能存儲一個值。所以只會存儲最後指定的值。 --timeout 5 --timeout 10
將導致包含 10 的timeout
。
在List
或Collection
作為底層實現的情況下,所有值都將按照命令行上指定的順序存儲。
布爾選項
布爾基礎類型的選項可以通過直接傳遞選項名稱設置為true
,例如--[option-name]
並且可以使用語法--no-[option-name]
設置為false
。