upload android base code part6
This commit is contained in:
parent
421e214c7d
commit
4e516ec6ed
35396 changed files with 9188716 additions and 0 deletions
155
android/platform_testing/docs/development/test-config.md
Normal file
155
android/platform_testing/docs/development/test-config.md
Normal file
|
@ -0,0 +1,155 @@
|
|||
## Test Module Config
|
||||
|
||||
Some test modules may require customized setup and tear down steps that cannot
|
||||
be performed within test case itself. Typical examples may include:
|
||||
|
||||
* install other apks (in addition to the test apk)
|
||||
* push some files to the device
|
||||
* run commands (e.g. adb shell pm ...)
|
||||
|
||||
In the past, component teams usually resort to writing a host side test to
|
||||
perform such tasks, which requires understanding of TradeFederation harness
|
||||
and typically increases the complexity of a test module .
|
||||
|
||||
Borrowing from CTS, we introduced the concept of test module config to support
|
||||
such tasks, the common tasks list above can be achieved by just a few lines of
|
||||
config. For maximum flexibility, you can even implement your own target
|
||||
preparer, as defined by [ITargetPreparer]
|
||||
(https://source.android.com/reference/com/android/tradefed/targetprep/ITargetPreparer.html)
|
||||
or [ITargetCleaner]
|
||||
(https://source.android.com/reference/com/android/tradefed/targetprep/ITargetCleaner.html),
|
||||
and configure them to use in your own test module config.
|
||||
|
||||
A test module config for a test module is a required XML file added to the top
|
||||
level module source folder, named ‘AndroidTest.xml’. The XML follows the format
|
||||
of a configuration file used by TradeFederation test automation harness.
|
||||
Currently the main tags handled via the test module configs are the “target_preparer” and
|
||||
"test" tags.
|
||||
|
||||
## Target Preparers
|
||||
A “target_preparer” tag, as the name suggests, defines a target preparer
|
||||
(see [ITargetPreparer](https://source.android.com/reference/com/android/tradefed/targetprep/ITargetPreparer.html))
|
||||
that offers a setup method, which gets called before the test module is executed
|
||||
for testing; and if the class referenced in the “target_preparer” tag also
|
||||
implements
|
||||
[ITargetCleaner](https://source.android.com/reference/com/android/tradefed/targetprep/ITargetCleaner.html),
|
||||
its teardown method will be invoked after the test module has finished.
|
||||
|
||||
To use the built-in common module config, add a new file ‘AndroidTest.xml’ at
|
||||
the top level folder for your test module, and populate it with the following
|
||||
content:
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- [insert standard AOSP copyright here] -->
|
||||
<configuration description="Test module config for Foo">
|
||||
<!-- insert options here -->
|
||||
</configuration>
|
||||
```
|
||||
|
||||
As an example, we can add the following option tags (at the “insert” comment
|
||||
above):
|
||||
|
||||
```xml
|
||||
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
|
||||
<option name="run-command" value="settings put secure accessibility_enabled 1" />
|
||||
<option name="teardown-command" value="settings put secure accessibility_enabled 0" />
|
||||
</target_preparer>
|
||||
```
|
||||
|
||||
The options will configure the test harness to:
|
||||
|
||||
1. before test module is invoked, execute shell command “settings put secure
|
||||
accessibility_enabled 1” on device
|
||||
2. after test module is finished, execute shell command “settings put secure
|
||||
accessibility_enabled 0”
|
||||
|
||||
In this particular example, accessibility is enabled/disabled before/after the
|
||||
test module execution, respectively. With a simple example demonstrated, it’s
|
||||
necessary to cover more details on how the “option” tag is used. As shown above,
|
||||
the tag can have two attributes: name, value. The name attribute indicated the
|
||||
name of the option, and is further broken down into two parts separated by a
|
||||
colon: short name for the preparer, and the actual option name offered by the
|
||||
preparer. The exact purpose of value field is dependent on how preparer defined
|
||||
the option: it can be a string, a number, a boolean, or even a file path etc. In
|
||||
the example above, name “run-command:run-command” means that we are setting
|
||||
value for the option “run-command” defined by a target preparer with short name
|
||||
“run-command”; and name “run-command:teardown-command” means that we are setting
|
||||
value for the option “teardown-command” also defined by the same target preparer
|
||||
with short name “run-command”. Here's a summary of the 3 common target
|
||||
preparers:
|
||||
|
||||
* class name: [PushFilePreparer](https://android.googlesource.com/platform/tools/tradefederation/+/master/src/com/android/tradefed/targetprep/PushFilePreparer.java)
|
||||
|
||||
* **short name**: push-file
|
||||
* **function**: pushes arbitrary files under test case folder into
|
||||
destination on device
|
||||
* **notes**:
|
||||
* this preparer can push from folder to folder, or file to file; that
|
||||
is, you cannot push a file under a folder on device: you must
|
||||
specify the destination filename under that folder as well
|
||||
* **options**:
|
||||
* **push:** A push-spec, formatted as
|
||||
'`/path/to/srcfile.txt->/path/to/destfile.txt`' or
|
||||
'`/path/to/srcfile.txt->/path/to/destdir/`'. May be repeated
|
||||
This path may be relative to the test module directory or the out
|
||||
directory itself.
|
||||
* **post-push: **A command to run on the device (with \``adb shell
|
||||
<your command>`\`) after all pushes have been attempted. Typical use
|
||||
case would be using chmod for permissions
|
||||
|
||||
* class name: [InstallApkSetup](https://android.googlesource.com/platform/tools/tradefederation/+/master/src/com/android/tradefed/targetprep/InstallApkSetup.java)
|
||||
|
||||
* **short name:**install-apk
|
||||
* **function:** pushes arbitrary apk files under into destination on
|
||||
device
|
||||
* **options:**
|
||||
* **test-file-name:** the name of the apk to be installed on to
|
||||
device.
|
||||
* **install-arg:** Additional arguments to be passed to the pm install
|
||||
command, including leading dash, e.g. “-d". May be repeated
|
||||
|
||||
* class name: [RunCommandTargetPreparer](https://android.googlesource.com/platform/tools/tradefederation/+/master/src/com/android/tradefed/targetprep/RunCommandTargetPreparer.java)
|
||||
|
||||
* **short name:** run-command
|
||||
* **function:** executes arbitrary shell commands before or after test
|
||||
module execution
|
||||
* **options:**
|
||||
* **run-command:**adb shell command to run. May be repeated
|
||||
* **teardown-command:**adb shell command to run during teardown phase.
|
||||
May be repeated
|
||||
|
||||
## Test Class
|
||||
A test class is the TradeFederation class to use to execute the test.
|
||||
|
||||
```xml
|
||||
<test class="com.android.tradefed.testtype.AndroidJUnitTest">
|
||||
<option name="package" value="android.test.example.helloworld"/>
|
||||
<option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
|
||||
</test>
|
||||
```
|
||||
|
||||
Here are 3 common test classes:
|
||||
|
||||
* class name: [GTest](https://android.googlesource.com/platform/tools/tradefederation/+/master/src/com/android/tradefed/testtype/GTest.java)
|
||||
|
||||
* **short name:** gtest
|
||||
* **function:** A Test that runs a native test package on given device.
|
||||
* **options:**
|
||||
* **native-test-device-path:**The path on the device where native tests are located.
|
||||
|
||||
* class name: [InstrumentationTest](https://android.googlesource.com/platform/tools/tradefederation/+/master/src/com/android/tradefed/testtype/InstrumentationTest.java)
|
||||
|
||||
* **short name:** instrumentation
|
||||
* **function:** A Test that runs an instrumentation test package on given device
|
||||
* **options:**
|
||||
* **package:**The manifest package name of the Android test application to run.
|
||||
* **class:**The test class name to run.
|
||||
* **method:**The test method name to run.
|
||||
|
||||
* class name: [AndroidJUnitTest](https://android.googlesource.com/platform/tools/tradefederation/+/master/src/com/android/tradefed/testtype/AndroidJUnitTest.java)
|
||||
|
||||
* **function:** A Test that runs an instrumentation test package on given
|
||||
device using the android.support.test.runner.AndroidJUnitRunner
|
||||
This is the main way to execute an instrumentation test.
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue