Tradefed でのオプション処理

オプション処理は、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
    }

デベロッパーがテスト用に 2 つの設定ポイントをセットアップするために必要なのはこれだけです。すると、設定可能であるということにはあまり注意を払わずに、通常どおり 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 を繰り返すとすべてが格納されることに気付くかもしれません。

long の基となる実装を持つオプション timeout は、値を 1 つしか格納できません。そのため、最後に指定した値のみが格納されます。--timeout 5 --timeout 10 は、値が 10 の timeout になります。

基となる実装が List または Collection の場合、値はすべて、コマンドラインで指定された順序で格納されます。

ブール値のオプション

ブール値の基になるオプションは、オプション名(--[option-name] など)を直接渡し、true に設定できます。たとえば、構文 --no-[option-name] を使用して false に設定できます。

関連ドキュメント

スイートとモジュールにオプションを渡す