普通文本  |  95行  |  3.15 KB

# Instrumentation Tests

1.  Below are common destinations for hermetic tests against framework services:

    ```
    frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
    ```

    If you are adding a brand new instrumentation module for your component, see

    *   [Self-Instrumenting Tests: A Complete Example](instr-self-e2e.md)
    *   [Instrumentation Targeting an Application: A Complete Example]
        (instr-app-e2e.md)

1.  Following the existing convention if you are adding tests into one of the
    locations above. If you are setting up a new test module, please follow the
    setup of `AndroidManifest.xml` and `Android.mk` in one of the locations
    above

1.  See https://android.googlesource.com/platform/frameworks/base.git/+/master/core/tests/coretests/ for an example

1.  Note: do not forget to mark your test as `@SmallTest`, `@MediumTest` or
    `@LargeTest`

1.  Build the test module with make, e.g.:

    ```
    make FrameworksCoreTests -j
    ```

1.  Automatic installation and run with the TradeFederation test harness:

    ```
    make tradefed-all -j
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    ```

1.  Manually Install and Run:
    1. Install the generated apk:

    ```
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    ```

    Tip: you use `adb shell pm list instrumentation` to find the
    instrumentations inside the apk just installed

    1.  Run the tests with various options:

        1.  all tests in the apk

            ```
            adb shell am instrument -w com.android.frameworks.coretests\
              /android.support.test.runner.AndroidJUnitRunner
            ```

        1.  all tests under a specific Java package

            ```
            adb shell am instrument -w -e package android.animation \
              com.android.frameworks.coretests\
              /android.support.test.runner.AndroidJUnitRunner
            ```

        1.  all tests under a specific class

            ```
            adb shell am instrument -w -e class \
              android.animation.AnimatorSetEventsTest \
              com.android.frameworks.coretests\
              /android.support.test.runner.AndroidJUnitRunner
            ```

        1.  a specific test method

            ```
            adb shell am instrument -w -e class \
              android.animation.AnimatorSetEventsTest#testCancel \
              com.android.frameworks.coretests\
              /android.support.test.runner.AndroidJUnitRunner
            ```

Your test can make an explicit assertion on pass or fail using `JUnit` APIs; in
addition, any uncaught exceptions will also cause a functional failure.

To emit performance metrics, your test code can call
[`Instrumentation#sendStatus`](http://developer.android.com/reference/android/app/Instrumentation.html#sendStatus\(int, android.os.Bundle\))
to send out a list of key-value pairs. It's important to note that:

1.  metrics can be integer or floating point
1.  any non-numerical values will be discarded
1.  your test apk can be either functional tests or metrics tests, however
    mixing both are not currently supported