2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
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 つの設定ポイントをセットアップするために必要なのはこれだけです。すると、設定可能であるということにはあまり注意を払わずに、通常どおり 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
を繰り返すとすべてが格納されることに気付くかもしれません。
long
の基となる実装を持つオプション timeout
は、値を 1 つしか格納できません。そのため、最後に指定した値のみが格納されます。--timeout 5 --timeout 10
は、値が 10 の timeout
になります。
基となる実装が List
または Collection
の場合、値はすべて、コマンドラインで指定された順序で格納されます。
ブール値のオプション
ブール値の基になるオプションは、オプション名(--[option-name]
など)を直接渡し、true
に設定できます。たとえば、構文 --no-[option-name]
を使用して false
に設定できます。
関連ドキュメント
スイートとモジュールにオプションを渡す
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-03-26 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-03-26 UTC。"],[],[],null,["# Option handling in Tradefed\n\nOption handling lies at the heart of Trade Federation's modular approach. In particular, options\nare the mechanism by which the developer, Integrator, and Test Runner can work together without\nhaving to duplicate each-other's work. Put simply, our implementation of option handling allows the\ndeveloper to mark a Java class member as being configurable, at which point the value of that member\ncan be augmented or overridden by the Integrator, and can be subsequently augmented or overridden by\nthe Test Runner. This mechanism works for all Java intrinsic types, as well as for any\n`Map` or `Collection` instances of intrinsic types.\n\n**Note:** The option-handling mechanism only works for classes\nimplementing one of the\ninterfaces included in the [Test Lifecycle](/docs/core/tests/tradefed/fundamentals/lifecycle), and only when that class is\n*instantiated* by the lifecycle machinery.\n\nDeveloper\n---------\n\nTo start off, the developer marks a member with the\n[@Option](https://android.googlesource.com/platform/tools/tradefederation/+/android16-release/common_util/com/android/tradefed/config/Option.java) annotation.\nThey specify (at a minimum) the `name` and `description` values, which\nspecify the argument name associated with that Option, and the description that is displayed on\nthe TF console when the command is run with `--help` or `--help-all`.\n\nAs an example, let's say we want to build a functional phone test that dials a variety of\nphone numbers, and expects to receive a sequence of DTMF tones from each number after it\nconnects. \n\n```gdscript\npublic class PhoneCallFuncTest extends IRemoteTest {\n @Option(name = \"timeout\", description = \"How long to wait for connection, in millis\")\n private long mWaitTime = 30 * 1000; // 30 seconds\n\n @Option(name = \"call\", description = \"Key: Phone number to attempt. \" +\n \"Value: DTMF to expect. May be repeated.\")\n private Map\u003cString, String\u003e mCalls = new HashMap\u003cString, String\u003e;\n\n public PhoneCallFuncTest() {\n mCalls.add(\"123-456-7890\", \"01134\"); // default\n }\n```\n\nThat's all that's required for the developer to set up two points of configuration for that\ntest. They could then go off and use `mWaitTime` and `mCalls` as normal,\nwithout paying much attention to the fact that they're configurable. Because the\n`@Option` fields are set after the class is instantiated, but before the\n`run` method is called, that provides an easy way for implementors to set up defaults for\nor perform some kind of filtering on `Map` and `Collection` fields, which are\notherwise append-only.\n\nIntegrator\n----------\n\nThe Integrator works in the world of configurations, which are written in XML. The config format\nallows the Integrator to set (or append) a value for any `@Option` field. For instance,\nsuppose the Integrator wanted to define a lower-latency test that calls the default number, as well\nas a long-running test that calls a variety of numbers. They could create a pair of configurations\nthat might look like the following: \n\n```world-of-warcraft-toc\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003cconfiguration description=\"low-latency default test; low-latency.xml\"\u003e\n \u003ctest class=\"com.example.PhoneCallFuncTest\"\u003e\n \u003coption name=\"timeout\" value=\"5000\" /\u003e\n \u003c/test\u003e\n\u003c/configuration\u003e\n``` \n\n```world-of-warcraft-toc\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003cconfiguration description=\"call a bunch of numbers; many-numbers.xml\"\u003e\n \u003ctest class=\"com.example.PhoneCallFuncTest\"\u003e\n \u003coption name=\"call\" key=\"111-111-1111\" value=\"#*#*TEST1*#*#\" /\u003e\n \u003coption name=\"call\" key=\"222-222-2222\" value=\"#*#*TEST2*#*#\" /\u003e\n \u003c!-- ... --\u003e\n \u003c/test\u003e\n\u003c/configuration\u003e\n```\n\nTest Runner\n-----------\n\nThe Test Runner also has access to these configuration points through the Trade Federation console.\nFirst and foremost, they run a command (that is, a config and all of its arguments) with the\n`run command \u003cname\u003e` instruction (or `run \u003cname\u003e` for short).\nBeyond that, they can specify any list of arguments are part of the command, which can replace or\nappend to fields specified by lifecycle objects within each config.\n\nTo run the low-latency test with the `many-numbers` phone numbers, the Test Runner\ncould execute: \n\n```\ntf\u003e run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#\n```\n\nOr, to get a similar effect from the opposite direction, the Test Runner could reduce the wait\ntime for the `many-numbers` test: \n\n```\ntf\u003e run many-numbers.xml --timeout 5000\n```\n\nOption ordering\n---------------\n\nYou might notice that the `call` option underlying implementation is a `Map`\nso upon repeated `--call` on the command line, they're all stored.\n\nThe option `timeout`, which has an underlying implementation of `long`,\ncan only store one value. So only the last value specified is stored.\n`--timeout 5 --timeout 10` results in `timeout` containing 10.\n\nIn case of a `List` or `Collection` as the underlying implementation,\nall the values are stored, in the order specified on the command line.\n\nBoolean options\n---------------\n\nOptions of boolean underlying type can be set to `true` by directly passing the\noption name, for example, `--[option-name]` and can be set to `false` using\nthe syntax `--no-[option-name]`.\n\nSee also\n--------\n\n[Pass options to suite and\nmodules](/docs/core/tests/tradefed/testing/through-suite/option-passing)"]]