Home | History | Annotate | only in /tools/tradefederation/core/atest
Up to higher level directory
NameDateSize
__init__.py21-Aug-20180
Android.bp21-Aug-2018823
atest.py21-Aug-201820.3K
atest_enum.py21-Aug-2018754
atest_error.py21-Aug-20182K
atest_unittest.py21-Aug-20182.3K
atest_utils.py21-Aug-20186.3K
atest_utils_unittest.py21-Aug-20181.6K
cli_translator.py21-Aug-20188K
cli_translator_unittest.py21-Aug-20186.8K
constants.py21-Aug-2018964
constants_default.py21-Aug-20182.2K
docs/21-Aug-2018
module_info.py21-Aug-20185.7K
module_info_unittest.py21-Aug-20185.9K
README.md21-Aug-201813.5K
run_atest_unittests.sh21-Aug-20181.8K
test_finder_handler.py21-Aug-20188.3K
test_finder_handler_unittest.py21-Aug-20188.6K
test_finders/21-Aug-2018
test_mapping.py21-Aug-20181.9K
test_mapping_unittest.py21-Aug-20181.8K
test_runner_handler.py21-Aug-20183.6K
test_runner_handler_unittest.py21-Aug-20183.7K
test_runners/21-Aug-2018
unittest_constants.py21-Aug-20185.6K
unittest_data/21-Aug-2018
unittest_utils.py21-Aug-20183.8K

README.md

      1 # Atest
      2 
      3 Atest is a command line tool that allows users to build, install and run Android tests locally.
      4 This markdown will explain how to use atest on the commandline to run android tests.<br>
      5 
      6 **For instructions on writing tests [go here](https://android.googlesource.com/platform/platform_testing/+/master/docs/index.md).**
      7 Importantly, when writing your test's build script file (Android.mk), make sure to include
      8 the variable `LOCAL_COMPATIBILITY_SUITE`.  A good default to use for it is `device-test`.
      9 
     10 Curious about how atest works? Want to add a feature but not sure where to begin? [Go here.](./docs/developer_workflow.md)
     11 Just want to learn about the overall structure? [Go here.](./docs/atest_structure.md)
     12 
     13 ##### Table of Contents
     14 1. [Environment Setup](#environment-setup)
     15 2. [Basic Usage](#basic-usage)
     16 3. [Identifying Tests](#identifying-tests)
     17 4. [Specifying Steps: Build, Install or Run](#specifying-steps:-build,-install-or-run)
     18 5. [Running Specific Methods](#running-specific-methods)
     19 6. [Running Multiple Classes](#running-multiple-classes)
     20 7. [Detecting Metrics Regression](#detecting-metrics-regression)
     21 
     22 
     23 ## <a name="environment-setup">Environment Setup</a>
     24 
     25 Before you can run atest, you first have to setup your environment.
     26 
     27 ##### 1. Run envsetup.sh
     28 From the root of the android source checkout, run the following command:
     29 
     30 `$ source build/envsetup.sh`
     31 
     32 ##### 2. Run lunch
     33 
     34 Run the `$ lunch` command to bring up a "menu" of supported devices.  Find the device that matches
     35 the device you have connected locally and run that command.
     36 
     37 For instance, if you have an ARM device connected, you would run the following command:
     38 
     39 `$ lunch aosp_arm64-eng`
     40 
     41 This will set various environment variables necessary for running atest. It will also add the
     42 atest command to your $PATH.
     43 
     44 ## <a name="basic-usage">Basic Usage</a>
     45 
     46 Atest commands take the following form:
     47 
     48 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**atest \<optional arguments> \<tests to run>**
     49 
     50 #### \<optional arguments>
     51 
     52 <table>
     53 <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-b</td><td>--build</td>
     54     <td>Build test targets.</td></tr>
     55 <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-i</td><td>--install</td>
     56     <td>Install test artifacts (APKs) on device.</td></tr>
     57 <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-t</td><td>--test</td>
     58     <td>Run the tests.</td></tr>
     59 <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-s</td><td>--serial</td>
     60     <td>Run the tests on the specified device. Currently, one device can be tested at a time.</td></tr>
     61 <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-d</td><td>--disable-teardown</td>
     62     <td>Disables test teardown and cleanup.</td></tr>
     63 <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-m</td><td>--rebuild-module-info</td>
     64     <td>Forces a rebuild of the module-info.json file.</td></tr>
     65 <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-w</td><td>--wait-for-debugger</td>
     66     <td>Only for instrumentation tests. Waits for debugger prior to execution.</td></tr>
     67 <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-v</td><td>--verbose</td>
     68     <td>Display DEBUG level logging.</td></tr>
     69 <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td><td>--generate-baseline</td>
     70     <td>Generate baseline metrics, run 5 iterations by default.</td></tr>
     71 <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td><td>--generate-new-metrics</td>
     72     <td>Generate new metrics, run 5 iterations by default.</td></tr>
     73 <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td><td>--detect-regression</td>
     74     <td>Run regression detection algorithm.</td></tr>
     75 <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>--[CUSTOM_ARGS]</td>
     76     <td>Specify custom args for the test runners.</td></tr>
     77 <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-h</td><td>--help</td>
     78     <td>Show this help message and exit</td></tr>
     79 </table>
     80 
     81 More information about **-b**, **-i** and **-t** can be found below under [Specifying Steps: Build, Install or Run.](#specifying-steps:-build,-install-or-run)
     82 
     83 #### \<tests to run>
     84 
     85    The positional argument **\<tests to run>** should be a reference to one or more
     86    of the tests you'd like to run. Multiple tests can be run by separating test
     87    references with spaces.<br>
     88 
     89    Usage template: &nbsp; `atest <reference_to_test_1> <reference_to_test_2>`
     90 
     91    Here are some simple examples:
     92 
     93    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`atest FrameworksServicesTests`<br>
     94    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`atest example/reboot`<br>
     95    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`atest FrameworksServicesTests CtsJankDeviceTestCases`<br>
     96    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`atest FrameworksServicesTests:ScreenDecorWindowTests`<br>
     97 
     98    More information on how to reference a test can be found under [Identifying Tests.](#identifying-tests)
     99 
    100 
    101 ## <a name="identifying-tests">Identifying Tests</a>
    102 
    103   A \<reference_to_test> can be satisfied by the test's  **Module Name**,
    104 **Module:Class**, **Class Name**, **TF Integration Test**, **File Path**
    105 or **Package Name**.
    106 
    107   #### Module Name
    108 
    109   Identifying a test by its module name will run the entire module. Input
    110   the name as it appears in the `LOCAL_MODULE` or `LOCAL_PACKAGE_NAME`
    111   variables in that test's **Android.mk** or **Android.bp** file.
    112 
    113   Note: Use **TF Integration Test** to run non-module tests integrated directly
    114 into TradeFed.
    115 
    116   Examples:<br>
    117       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`atest FrameworksServicesTests`<br>
    118       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`atest CtsJankDeviceTestCases`<br>
    119 
    120 
    121   #### Module:Class
    122 
    123   Identifying a test by its class name will run just the tests in that
    124   class and not the whole module. **Module:Class** is the preferred way to run
    125   a single class. **Module** is the same as described above. **Class** is the
    126   name of the test class in the .java file. It can either be the fully
    127   qualified class name or just the basic name.
    128 
    129   Examples:<br>
    130        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    131        `atest FrameworksServicesTests:ScreenDecorWindowTests`<br>
    132        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    133        `atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests`<br>
    134        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    135        `atest CtsJankDeviceTestCases:CtsDeviceJankUi`<br>
    136 
    137 
    138   #### Class Name
    139 
    140   A single class can also be run by referencing the class name without
    141   the module name.
    142 
    143   Examples:<br>
    144       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`atest ScreenDecorWindowTests`<br>
    145       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`atest CtsDeviceJankUi`<br>
    146 
    147   However, this will take more time than the equivalent **Module:Class**
    148   reference, so we suggest using a **Module:Class** reference whenever possible.
    149   Examples below are ordered by performance from the fastest to the slowest:
    150 
    151   Examples:<br>
    152       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    153       `atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests`<br>
    154       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    155       `atest FrameworksServicesTests:ScreenDecorWindowTests`<br>
    156       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    157       `atest ScreenDecorWindowTests`<br>
    158 
    159   #### TF Integration Test
    160 
    161   To run tests that are integrated directly into TradeFed (non-modules),
    162   input the name as it appears in the output of the "tradefed.sh list
    163   configs" cmd.
    164 
    165   Example:<br>
    166      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`atest example/reboot` &nbsp;(runs [this test](https://android.googlesource.com/platform/tools/tradefederation/contrib/+/master/res/config/example/reboot.xml))<br>
    167      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`atest native-benchmark` &nbsp;(runs [this test](https://android.googlesource.com/platform/tools/tradefederation/+/master/res/config/native-benchmark.xml))<br>
    168 
    169 
    170   #### File Path
    171 
    172   Both module-based tests and integration-based tests can be run by
    173   inputting the path to their test file or dir as appropriate. A single
    174   class can also be run by inputting the path to the class's java file.
    175   Both relative and absolute paths are supported.
    176 
    177   Example - 2 ways to run the `CtsJankDeviceTestCases` module via path:<br>
    178   1. run module from android \<repo root>: `atest cts/tests/jank`
    179   2. from android \<repo root>/cts/tests/jank: `atest .`
    180 
    181 
    182   Example - run a specific class within `CtsJankDeviceTestCases` module via path:<br>
    183   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;From android \<repo root>:
    184   `atest cts/tests/jank/src/android/jank/cts/ui/CtsDeviceJankUi.java`
    185 
    186   Example - run an integration test via path:<br>
    187   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;From android \<repo root>:
    188   `atest tools/tradefederation/contrib/res/config/example/reboot.xml`
    189 
    190 
    191   #### Package Name
    192 
    193   Atest supports searching tests from package name as well.
    194 
    195   Examples:<br>
    196      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`atest com.android.server.wm`<br>
    197      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`atest android.jank.cts`<br>
    198 
    199 ## <a name="specifying-steps:-build,-install-or-run">Specifying Steps: Build, Install or Run</a>
    200 
    201 The **-b**, **-i** and **-t** options allow you to specify which steps you want
    202 to run. If none of those options are given, then all steps are run. If any of
    203 these options are provided then only the listed steps are run.
    204 
    205 Note: **-i** alone is not currently support and can only be included with **-t**.
    206 Both **-b** and **-t** can be run alone.
    207 
    208 
    209 - Build targets only:  `atest -b <test>`
    210 - Run tests only: `atest -t <test> `
    211 - Install apk and run tests: `atest -it <test> `
    212 - Build and run, but don't install: `atest -bt <test> `
    213 
    214 
    215 Atest now has the ability to force a test to skip its cleanup/teardown step.
    216 Many tests, e.g. CTS, cleanup the device after the test is run, so trying
    217 to rerun your test with -t will fail without having the **--disable-teardown**
    218 parameter. Use **-d** before -t to skip the test clean up step and test
    219 iteratively.
    220 
    221 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`atest -d <test>`<br/>
    222 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`atest -t <test>`
    223 
    224 Note that -t disables both **setup/install** and **teardown/cleanup** of the device.
    225 So you can continue to rerun your test with just `atest -t <test>` as many times as you want.
    226 
    227 
    228 ## <a name="running-specific-methods">Running Specific Methods</a>
    229 
    230 It is possible to run only specific methods within a test class. While the whole module will
    231 still need to be built, this will greatly speed up the time needed to run the tests. To run only
    232 specific methods, identify the class in any of the ways supported for identifying a class
    233 (MODULE:CLASS, FILE PATH, etc) and then append the name of the method or method using the following
    234 template:
    235 
    236 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`<reference_to_class>#<method1>`
    237 
    238 Multiple methods can be specified with commas:
    239 
    240 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`<reference_to_class>#<method1>,<method2>,<method3>`
    241 
    242 Examples:<br>
    243 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    244 `atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecors`<br>
    245 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    246 `atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval`
    247 
    248 Here are the two preferred ways to run a single method, we're specifying the `testFlagChange` method.
    249 These are preferred over just the class name, because specifying the module or the java file location
    250 allows atest to find the test much faster:
    251 
    252 1. `atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange`
    253 2. From android \<repo root>:<br/>
    254 `atest frameworks/base/services/tests/servicestests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange`
    255 
    256 Multiple methods can be ran from different classes and modules:<br>
    257 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    258 `atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors`
    259 
    260 ## <a name="running-multiple-classes">Running Multiple Classes</a>
    261 
    262 To run multiple classes, deliminate them with spaces just like you would when running multiple tests.
    263 Atest will handle building and running classes in the most efficient way possible, so specifying
    264 a subset of classes in a module will improve performance over running the whole module.
    265 
    266 Examples:<br>
    267 - two classes in same module:<br>
    268 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    269 `atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests`
    270 
    271 - two classes, different modules:<br>
    272 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    273 `atest FrameworksServicesTests:ScreenDecorWindowTests CtsJankDeviceTestCases:CtsDeviceJankUi`
    274 
    275 
    276 ## <a name="detecting-metrics-regression">Detecting Metrics Regression</a>
    277 
    278 Generate pre-patch or post-patch metrics without running regression detection:
    279 
    280 Examples:<br>
    281 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`atest <test> --generate-baseline <optional iter>` <br>
    282 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`atest <test> --generate-new-metrics <optional iter>`
    283 
    284 Local regression detection can be run in three options:
    285 
    286 1) Provide a folder containing baseline (pre-patch) metrics (generated previously).
    287    Atest will run the tests n (default 5) iterations, generate a new set of post-patch metrics, and compare those against existing metrics.
    288 
    289    Example:<br>
    290    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    291    `atest <test> --detect-regression </path/to/baseline> --generate-new-metrics <optional iter>`
    292 
    293 2) Provide a folder containing post-patch metrics (generated previously).
    294    Atest will run the tests n (default 5) iterations, generate a new set of pre-patch
    295    metrics, and compare those against those provided. Note: the developer needs to
    296    revert the device/tests to pre-patch state to generate baseline metrics.
    297 
    298    Example:<br>
    299    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    300    `atest <test> --detect-regression </path/to/new> --generate-baseline <optional iter>`
    301 
    302 3) Provide 2 folders containing both pre-patch and post-patch metrics. Atest will run no tests but
    303    the regression detection algorithm.
    304 
    305    Example:<br>
    306    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    307    `atest --detect-regression </path/to/baseline> </path/to/new>`
    308 
    309 
    310