Tradefed 中的選項處理

選項處理是 Trade Federation 模組化方法的重心。具體來說,選項是開發人員、整合人員和測試執行器可以共同作業的機制,不必重複彼此的工作。簡單來說,我們的選項處理實作方式可讓開發人員將 Java 類別成員標示為可設定,此時該成員的值可由整合人員擴增或覆寫,並隨後由測試執行器擴增或覆寫。這項機制適用於所有 Java 內建型別,以及內建型別的任何 MapCollection 執行個體。

注意:選項處理機制僅適用於實作測試生命週期中介面之一的類別,且僅在生命週期機制例項化該類別時有效。

開發人員

首先,開發人員會使用 @Option 註解標記成員。 這些值至少會指定 namedescription 值,分別與該選項相關聯的引數名稱,以及在 TF 控制台中執行 --help--help-all 指令時顯示的說明。

舉例來說,假設我們要建構功能性電話測試,撥打各種電話號碼,並在連線後接收每個號碼的 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 結果,其中 timeout 包含 10。

如果底層實作是 ListCollection,系統會儲存所有值,順序與指令列上指定的相同。

布林值選項

布林基礎型別的選項可以設為 true,方法是直接傳遞選項名稱,例如 --[option-name],也可以使用 --no-[option-name] 語法設為 false

另請參閱

將選項傳遞至套件和模組