選項處理是 Trade Federation 模組化方法的核心。具體來說,選項是讓開發人員、整合者和測試執行工具能合作,而不會重複彼此工作的機制。簡單來說,我們實作的選項處理功能可讓開發人員將 Java 類別成員標示為可設定,此時整合器可增強或覆寫該成員的值,並可在之後由 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
欄位的預設值,或執行某種篩選作業,否則這些欄位只能附加。
整合服務商
整合器會處理以 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*#*#
或者,為了從相反方向取得類似效果,Test Runner 可以縮短 many-numbers
測試的等待時間:
tf> run many-numbers.xml --timeout 5000
選項排序
您可能會注意到,實作 call
選項的基礎是 Map
,因此在指令列上重複執行 --call
時,這些選項都會儲存。
timeout
選項具有 long
的基礎實作,只能儲存一個值。因此,系統只會儲存指定的最後一個值。--timeout 5 --timeout 10
結果在 timeout
中包含 10。
如果 List
或 Collection
是基礎實作項目,則會依指令列指定的順序儲存所有值。
布林值選項
布林型基礎類型的選項可透過直接傳遞選項名稱 (例如 --[option-name]
) 設為 true
,也可以使用 --no-[option-name]
語法設為 false
。