Quddus Chong | 489218c | 2015-02-26 16:38:46 -0800 | [diff] [blame] | 1 | page.title=Testing Support Library |
| 2 | |
| 3 | @jd:body |
| 4 | |
| 5 | <div id="qv-wrapper"> |
| 6 | <div id="qv"> |
| 7 | <h2> |
| 8 | In this document |
| 9 | </h2> |
| 10 | |
| 11 | <ol> |
| 12 | <li> |
| 13 | <a href="#features">Testing Support Library Features</a> |
| 14 | <ol> |
| 15 | <li> |
| 16 | <a href="#AndroidJUnitRunner">AndroidJUnitRunner</a> |
| 17 | </li> |
| 18 | |
| 19 | <li> |
| 20 | <a href="#Espresso">Espresso</a> |
| 21 | </li> |
| 22 | |
| 23 | <li> |
| 24 | <a href="#UIAutomator">UI Automator</a> |
| 25 | </li> |
| 26 | </ol> |
| 27 | </li> |
| 28 | |
| 29 | <li> |
| 30 | <a href="#setup">Testing Support Library Setup</a> |
| 31 | </li> |
| 32 | </ol> |
| 33 | |
| 34 | <h2>See also</h2> |
| 35 | <ol> |
| 36 | <li><a href="{@docRoot}reference/android/support/test/package-summary.html"> |
| 37 | Testing Support Library API Reference</a></li> |
| 38 | <li><a href="https://github.com/googlesamples/android-testing" class="external-link"> |
| 39 | Code Samples</a></li> |
| 40 | </ol> |
| 41 | </div> |
| 42 | </div> |
| 43 | |
| 44 | <p> |
| 45 | The Android Testing Support Library provides an extensive framework for testing Android apps. |
| 46 | This library provides a set of APIs that allow you to quickly build and run test code for |
| 47 | your apps, including JUnit 4 and functional user interface (UI) tests. You can run tests |
| 48 | created using these APIs from the <a href= |
| 49 | "{@docRoot}tools/studio/index.html">Android Studio IDE</a> or from the command line. |
| 50 | </p> |
| 51 | |
| 52 | <p>The Android Testing Support library is available through the Android SDK Manager. |
| 53 | For more information, see <a href="#setup">Testing Support Library Setup</a> |
| 54 | </p> |
| 55 | |
| 56 | <p> |
| 57 | This page provides information about what tools are provided in the Android Testing Support |
| 58 | Library, how to use them in your testing environment, and information about library releases. |
| 59 | </p> |
| 60 | |
| 61 | <h2 id="features"> |
| 62 | Testing Support Library Features |
| 63 | </h2> |
| 64 | |
| 65 | <p> |
| 66 | The Android Testing Support Library includes the following test automation tools: |
| 67 | </p> |
| 68 | |
| 69 | <ul> |
| 70 | <li> |
| 71 | <strong><a href="#AndroidJUnitRunner">AndroidJUnitRunner</a></strong>: JUnit 4-compatible |
| 72 | test runner for Android |
| 73 | </li> |
| 74 | |
| 75 | <li> |
| 76 | <strong><a href="#Espresso">Espresso</a></strong>: UI testing framework; suitable for |
| 77 | functional UI testing within an app |
| 78 | </li> |
| 79 | |
| 80 | <li> |
| 81 | <strong><a href="#UIAutomator">UI Automator</a></strong>: UI testing framework; suitable |
| 82 | for cross-app functional UI testing across system and installed apps |
| 83 | </li> |
| 84 | </ul> |
| 85 | |
| 86 | <h3 id="AndroidJUnitRunner"> |
| 87 | AndroidJUnitRunner |
| 88 | </h3> |
| 89 | |
| 90 | <p> |
| 91 | The |
| 92 | <a href="{@docRoot}reference/android/support/test/runner/AndroidJUnitRunner.html">{@code AndroidJUnitRunner}</a> |
| 93 | class is a <a href="http://junit.org/" class="external-link">JUnit</a> test runner that lets you |
| 94 | run JUnit 3 or JUnit 4-style test classes on Android devices, including those using the |
| 95 | <a href="#Espresso">Espresso</a> and <a href="#UIAutomator">UI Automator</a> testing frameworks. |
| 96 | The test runner handles loading your test package and the app under test |
| 97 | to a device, running your tests, and reporting test results. This class replaces the {@link |
| 98 | android.test.InstrumentationTestRunner} class, which only supports JUnit 3 tests. |
| 99 | </p> |
| 100 | |
| 101 | <p> |
| 102 | The key features of this test runner include: |
| 103 | </p> |
| 104 | |
| 105 | <ul> |
| 106 | <li><a href="#ajur-junit">JUnit support</a> |
| 107 | </li> |
| 108 | |
| 109 | <li><a href="#ajur-instrumentation">Access to instrumentation information</a> |
| 110 | </li> |
| 111 | |
| 112 | <li><a href="#ajur-filtering">Test filtering</a> |
| 113 | </li> |
| 114 | |
| 115 | <li><a href="#ajur-sharding">Test sharding</a> |
| 116 | </li> |
| 117 | </ul> |
| 118 | |
| 119 | <p>Requires Android 2.2 (API level 8) or higher.</p> |
| 120 | |
| 121 | <h4 id="ajur-junit"> |
| 122 | JUnit support |
| 123 | </h4> |
| 124 | |
| 125 | <p> |
| 126 | The test runner is compatible with your JUnit 3 and JUnit 4 (up to JUnit |
| 127 | 4.10) tests. However, you should avoid mixing JUnit 3 and and JUnit 4 test code in the same |
| 128 | package, as this might cause unexpected results. If you are creating an instrumented JUnit 4 |
| 129 | test class to run on a device or emulator, your test class must be prefixed with the |
| 130 | {@code @RunWith(AndroidJUnit4.class)} annotation. |
| 131 | </p> |
| 132 | |
| 133 | <p>The following code snippet shows how you might write an instrumented JUnit 4 test to validate |
| 134 | that the <em>add</em> operation in the {@code CalculatorActivity} class works correctly. |
| 135 | </p> |
| 136 | |
| 137 | <pre> |
| 138 | import android.support.test.runner.AndroidJUnit4; |
| 139 | import android.support.test.runner.AndroidJUnitRunner; |
| 140 | import android.test.ActivityInstrumentationTestCase2; |
| 141 | |
| 142 | @RunWith(AndroidJUnit4.class) |
| 143 | public class CalculatorInstrumentationTest |
| 144 | extends ActivityInstrumentationTestCase2<CalculatorActivity> { |
| 145 | |
| 146 | @Before |
| 147 | public void setUp() throws Exception { |
| 148 | super.setUp(); |
| 149 | |
| 150 | // Injecting the Instrumentation instance is required |
| 151 | // for your test to run with AndroidJUnitRunner. |
| 152 | injectInstrumentation(InstrumentationRegistry.getInstrumentation()); |
| 153 | mActivity = getActivity(); |
| 154 | } |
| 155 | |
| 156 | @Test |
| 157 | public void typeOperandsAndPerformAddOperation() { |
| 158 | // Call the CalculatorActivity add() method and pass in some operand values, then |
| 159 | // check that the expected value is returned. |
| 160 | } |
| 161 | |
| 162 | @After |
| 163 | public void tearDown() throws Exception { |
| 164 | super.tearDown(); |
| 165 | } |
| 166 | } |
| 167 | </pre> |
| 168 | |
| 169 | <h4 id="ajur-instrumentation"> |
| 170 | Access to instrumentation information |
| 171 | </h4> |
| 172 | |
| 173 | <p> |
| 174 | You can use the |
| 175 | <a href="{@docRoot}reference/android/support/test/InstrumentationRegistry.html">{@code InstrumentationRegistry}</a> |
| 176 | class to access information related to your |
| 177 | test run. This class includes the {@link android.app.Instrumentation} object, target app {@link |
| 178 | android.content.Context} object, test app {@link android.content.Context} object, and the |
| 179 | command line arguments passed into your test. This data is useful when you are writing tests |
| 180 | using the UI Automator framework or when writing tests that have dependencies on the {@link |
| 181 | android.app.Instrumentation} or {@link android.content.Context} objects. |
| 182 | </p> |
| 183 | |
| 184 | <h4 id="ajur-filtering"> |
| 185 | Test filtering |
| 186 | </h4> |
| 187 | |
| 188 | <p> |
| 189 | In your JUnit 4.x tests, you can use annotations to configure the test run. This feature |
| 190 | minimizes the need to add boilerplate and conditional code in your tests. In addition to the |
| 191 | standard annotations supported by JUnit 4, the test runner also supports Android-specific |
| 192 | annotations, including: |
| 193 | </p> |
| 194 | |
| 195 | <ul> |
| 196 | <li><a href="{@docRoot}reference/android/support/test/filters/RequiresDevice.html">{@code @RequiresDevice}</a>: |
| 197 | Specifies that the test should run only on physical devices, not on emulators. |
| 198 | </li> |
| 199 | |
| 200 | <li><a href="{@docRoot}reference/android/support/test/filters/SdkSuppress.html">{@code @SdkSupress}</a>: |
| 201 | Suppresses the test from running on a lower Android API level than the given level. For |
| 202 | example, to suppress tests on all API levels lower than 18 from running, use the annotation |
| 203 | {@code @SDKSupress(minSdkVersion=18)}. |
| 204 | </li> |
| 205 | |
| 206 | <li>{@link android.test.suitebuilder.annotation.SmallTest @SmallTest}, |
| 207 | {@link android.test.suitebuilder.annotation.MediumTest @MediumTest}, |
| 208 | and {@link android.test.suitebuilder.annotation.LargeTest @LargeTest}: Classify how long |
| 209 | a test should take to run, and consequently, how frequently you can run the test. |
| 210 | </li> |
| 211 | </ul> |
| 212 | |
| 213 | <h4 id="ajur-sharding"> |
| 214 | Test sharding |
| 215 | </h4> |
| 216 | |
| 217 | <p> |
| 218 | The test runner supports splitting a single test suite into multiple |
| 219 | <em>shards</em>, so you can easily run tests belonging to the same shard together as a group, |
| 220 | under the same {@link android.app.Instrumentation} instance. Each shard is identified by an |
| 221 | index number. When running tests, use the {@code -e numShards} option to specify the number |
| 222 | of separate shards to create and the {@code -e shardIndex} option to specify which shard to |
| 223 | run. |
| 224 | </p> |
| 225 | |
| 226 | <p> |
| 227 | For example, to split the test suite into 10 shards and run only the tests grouped in the |
| 228 | second shard, use the following command: |
| 229 | </p> |
| 230 | |
| 231 | <pre> |
| 232 | adb shell am instrument -w -e numShards 10 -e shardIndex 2</pre> |
| 233 | |
| 234 | <p> |
| 235 | To learn more about using this test runner, see the |
| 236 | <a href="{@docRoot}reference/android/support/test/package-summary.html">API reference</a>. |
| 237 | </p> |
| 238 | |
| 239 | <h3 id="Espresso"> |
| 240 | Espresso |
| 241 | </h3> |
| 242 | |
| 243 | <p> |
| 244 | The Espresso testing framework provides a set of APIs to build UI tests to test user flows |
| 245 | within an app. These APIs let you write automated UI tests that are concise and that run |
| 246 | reliably. Espresso is well-suited for writing <em>white box</em>-style automated tests, where |
| 247 | the test code utilizes implementation code details from the app under test. |
| 248 | </p> |
| 249 | |
| 250 | <p> |
| 251 | The key features of the Espresso testing framework include: |
| 252 | </p> |
| 253 | |
| 254 | <ul> |
| 255 | <li>Flexible APIs for view and adapter matching in target apps. |
| 256 | For more information, see <a href="#espresso-matching">View matching</a>. |
| 257 | |
| 258 | <li>An extensive set of action APIs to automate UI interactions. |
| 259 | For more information, see <a href="#espresso-actions">Action APIs</a>. |
| 260 | </li> |
| 261 | |
| 262 | <li>UI thread synchronization to improve test reliability. |
| 263 | For more information, see <a href="#espresso-thread-sync">UI thread synchronization</a>. |
| 264 | </li> |
| 265 | </ul> |
| 266 | |
| 267 | <p>Requires Android 2.2 (API level 8) or higher.</p> |
| 268 | |
| 269 | <h4 id="espresso-matching"> |
| 270 | View matching |
| 271 | </h4> |
| 272 | |
| 273 | <p> |
| 274 | The <a href="{@docRoot}reference/android/support/test/espresso/Espresso.html#onView(org.hamcrest.Matcher<android.view.View>)">{@code Espresso.onView()}</a> |
| 275 | method lets you access a UI component in the target app and |
| 276 | interact with it. The method accepts a |
| 277 | <a href="http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/Matcher.html" |
| 278 | class="external-link">{@code Matcher}</a> argument and searches the view |
| 279 | hierarchy to locate a corresponding {@link android.view.View} instance that meets some given |
| 280 | criteria. You can refine searches by specifying such criteria as: |
| 281 | </p> |
| 282 | |
| 283 | <ul> |
| 284 | <li>The class name of the view |
| 285 | </li> |
| 286 | |
| 287 | <li>The content description of the view |
| 288 | </li> |
| 289 | |
| 290 | <li>The {@code R.id} of the view |
| 291 | </li> |
| 292 | |
| 293 | <li>Text displayed in the view |
| 294 | </li> |
| 295 | </ul> |
| 296 | |
| 297 | <p> |
| 298 | For example, to target a button that has the ID value of {@code my_button}, you can specify |
| 299 | a matcher like this: |
| 300 | </p> |
| 301 | |
| 302 | <pre> |
| 303 | onView(withId(R.id.my_button));</pre> |
| 304 | |
| 305 | <p> |
| 306 | If the search is successful, the |
| 307 | <a href="{@docRoot}reference/android/support/test/espresso/Espresso.html#onView(org.hamcrest.Matcher<android.view.View>)">{@code onView()}</a> |
| 308 | method returns a reference which lets you |
| 309 | perform user actions and test assertions against the target view. |
| 310 | </p> |
| 311 | |
| 312 | <h4> |
| 313 | Adapter matching |
| 314 | </h4> |
| 315 | |
| 316 | <p> |
| 317 | In an {@link android.widget.AdapterView} layout, the layout is dynamically populated with |
| 318 | children views at runtime. If the target view is inside a layout subclassed from {@link |
| 319 | android.widget.AdapterView} (such as a {@link android.widget.ListView} or {@link |
| 320 | android.widget.GridView}), the |
| 321 | <a href="{@docRoot}reference/android/support/test/espresso/Espresso.html#onView(org.hamcrest.Matcher<android.view.View>)">{@code onView()}</a> |
| 322 | method might not work because only a subset of |
| 323 | the layout’s views may be loaded in the current view hierarchy. |
| 324 | </p> |
| 325 | |
| 326 | <p> |
| 327 | Instead, use the <a href="{@docRoot}reference/android/support/test/espresso/Espresso.html#onData(org.hamcrest.Matcher<java.lang.Object>)">{@code Espresso.onData()}</a> |
| 328 | method to access a target view element. The <a href="{@docRoot}reference/android/support/test/espresso/Espresso.html#onData(org.hamcrest.Matcher<java.lang.Object>)">{@code Espresso.onData()}</a> |
| 329 | method returns a reference which lets you perform user actions and test assertions against the |
| 330 | elements in an {@link android.widget.AdapterView}. |
| 331 | </p> |
| 332 | |
| 333 | <h4 id="espresso-actions"> |
| 334 | Action APIs |
| 335 | </h4> |
| 336 | |
| 337 | <p> |
| 338 | Typically, you test an app by performing some user interactions against the app’s user |
| 339 | interface. You can easily automate these actions in your test by using the |
| 340 | <a href="{@docRoot}reference/android/support/test/espresso/action/ViewActions.html">{@code ViewActions}</a> |
| 341 | API. You can perform such UI interactions as: |
| 342 | </p> |
| 343 | |
| 344 | <ul> |
| 345 | <li>View clicks |
| 346 | </li> |
| 347 | |
| 348 | <li>Swipes |
| 349 | </li> |
| 350 | |
| 351 | <li>Key and button presses |
| 352 | </li> |
| 353 | |
| 354 | <li>Typing text |
| 355 | </li> |
| 356 | |
| 357 | <li>Opening a link |
| 358 | </li> |
| 359 | </ul> |
| 360 | |
| 361 | <p> |
| 362 | For example, to simulate entering a string value and pressing a button to submit the value, |
| 363 | you can write an automated test script like this. The |
| 364 | <a href="{@docRoot}reference/android/support/test/espresso/ViewInteraction.html#perform(android.support.test.espresso.ViewAction...)">{@code ViewInteraction.perform()}</a> |
| 365 | and <a href="{@docRoot}reference/android/support/test/espresso/DataInteraction.html#perform(android.support.test.espresso.ViewAction...)">{@code DataInteraction.perform()}</a> |
| 366 | methods take one or more |
| 367 | <a href="{@docRoot}reference/android/support/test/espresso/ViewAction.html">{@code ViewAction}</a> |
| 368 | arguments and run the actions in the order provided. |
| 369 | </p> |
| 370 | |
| 371 | <pre> |
| 372 | // Type text into an EditText view, then close the soft keyboard |
| 373 | onView(withId(R.id.editTextUserInput)) |
| 374 | .perform(typeText(STRING_TO_BE_TYPED), closeSoftKeyboard()); |
| 375 | |
| 376 | // Press the button to submit the text change |
| 377 | onView(withId(R.id.changeTextBt)).perform(click());</pre> |
| 378 | |
| 379 | <h4 id="espresso-thread-sync"> |
| 380 | UI thread synchronization |
| 381 | </h4> |
| 382 | |
| 383 | <p> |
| 384 | Tests on Android devices can fail randomly because of timing issues. This testing issue is |
| 385 | referred to as <em>test flakiness</em>. Prior to Espresso, the workaround was to insert a |
| 386 | sufficiently long sleep or timeout period into a test or to add code to keep retrying the |
| 387 | failing operation. The Espresso testing framework handles synchronization between the |
| 388 | {@link android.app.Instrumentation} and the UI thread; this removes the need for the previous |
| 389 | timing workarounds and ensures that your test actions and assertions run more reliably. |
| 390 | </p> |
| 391 | |
| 392 | <p> |
| 393 | To learn more about using Espresso, see the |
Quddus Chong | 7639e73 | 2015-03-05 13:16:24 -0800 | [diff] [blame] | 394 | <a href="{@docRoot}reference/android/support/test/package-summary.html">API reference</a> and |
| 395 | <a href="{@docRoot}training/testing/ui-testing/espresso-testing.html"> |
| 396 | Testing UI for a Single App</a> training. |
Quddus Chong | 489218c | 2015-02-26 16:38:46 -0800 | [diff] [blame] | 397 | </p> |
| 398 | |
| 399 | <h3 id="UIAutomator"> |
| 400 | UI Automator |
| 401 | </h3> |
| 402 | |
| 403 | <p> |
| 404 | The UI Automator testing framework provides a set of APIs to build UI tests that perform |
| 405 | interactions on user apps and system apps. The UI Automator APIs allows you to perform |
| 406 | operations such as opening the Settings menu or the app launcher in a test device. The UI |
| 407 | Automator testing framework is well-suited for writing <em>black box</em>-style automated |
| 408 | tests, where the test code does not rely on internal implementation details of the target |
| 409 | app. |
| 410 | </p> |
| 411 | |
| 412 | <p> |
| 413 | The key features of the UI Automator testing framework include: |
| 414 | </p> |
| 415 | |
| 416 | <ul> |
| 417 | <li>A viewer to inspect layout hierarchy. |
| 418 | For more information, see <a href="#uia-viewer">UI Automator Viewer</a>. |
| 419 | </li> |
| 420 | <li>An API to retrieve state information and perform operations on the target device. |
| 421 | For more information, see <a href="#uia-device-state">Access to device state</a>. |
| 422 | </li> |
| 423 | <li>APIs that support cross-app UI testing. |
| 424 | For more information, see <a href="#uia-apis">UI Automator APIs</a> . |
| 425 | </li> |
| 426 | </ul> |
| 427 | |
| 428 | <p>Requires Android 4.3 (API level 18) or higher.</p> |
| 429 | |
| 430 | <h4 id="uia-viewer"> |
| 431 | UI Automator Viewer |
| 432 | </h4> |
| 433 | |
| 434 | <p> |
| 435 | The {@code uiautomatorviewer} tool provides a convenient GUI to scan and analyze the UI |
| 436 | components currently displayed on an Android device. You can use this tool to inspect the |
| 437 | layout hierarchy and view the properties of UI components that are visible on the foreground |
| 438 | of the device. This information lets you create more fine-grained tests using UI Automator, |
| 439 | for example by creating a UI selector that matches a specific visible property. |
| 440 | </p> |
| 441 | |
| 442 | <p> |
| 443 | The {@code uiautomatorviewer} tool is located in the {@code <android-sdk>/tools/} |
| 444 | directory. |
| 445 | </p> |
| 446 | |
| 447 | <h4 id="uia-device-state"> |
| 448 | Access to device state |
| 449 | </h4> |
| 450 | |
| 451 | <p> |
| 452 | The UI Automator testing framework provides a |
| 453 | <a href="{@docRoot}reference/android/support/test/uiautomator/UiDevice.html">{@code UiDevice}</a> |
| 454 | class to access and perform operations on the device on which the target app is running. You |
| 455 | can call its methods to access device properties such as current orientation or display size. |
| 456 | The <a href="{@docRoot}reference/android/support/test/uiautomator/UiDevice.html">{@code UiDevice}</a> |
| 457 | class also let you perform actions such as: |
| 458 | </p> |
| 459 | |
| 460 | <ul> |
| 461 | <li>Change the device rotation |
| 462 | </li> |
| 463 | |
| 464 | <li>Press a D-pad button |
| 465 | </li> |
| 466 | |
| 467 | <li>Press the Back, Home, or Menu buttons |
| 468 | </li> |
| 469 | |
| 470 | <li>Open the notification shade |
| 471 | </li> |
| 472 | |
| 473 | <li>Take a screenshot of the current window |
| 474 | </li> |
| 475 | </ul> |
| 476 | |
| 477 | <p> |
| 478 | For example, to simulate a Home button press, call the {@code UiDevice.pressHome()} method. |
| 479 | </p> |
| 480 | |
| 481 | <h4 id="uia-apis"> |
| 482 | UI Automator APIs |
| 483 | </h4> |
| 484 | |
| 485 | <p> |
| 486 | The UI Automator APIs allow you to write robust tests without needing to know about the |
| 487 | implementation details of the app that you are targeting. You can use these APIs to capture |
| 488 | and manipulate UI components across multiple apps: |
| 489 | </p> |
| 490 | |
| 491 | <ul> |
| 492 | <li><a href="{@docRoot}reference/android/support/test/uiautomator/UiCollection.html">{@code UiCollection}</a>: |
| 493 | Enumerates a container's UI elements for the purpose of counting, |
| 494 | or targeting sub-elements by their visible text or content-description property. |
| 495 | </li> |
| 496 | |
| 497 | <li><a href="{@docRoot}reference/android/support/test/uiautomator/UiObject.html">{@code UiObject}</a>: |
| 498 | Represents a UI element that is visible on the device. |
| 499 | </li> |
| 500 | |
| 501 | <li><a href="{@docRoot}reference/android/support/test/uiautomator/UiScrollable.html">{@code UiScrollable}</a>: |
| 502 | Provides support for searching for items in a scrollable UI container. |
| 503 | </li> |
| 504 | |
| 505 | <li><a href="{@docRoot}reference/android/support/test/uiautomator/UiSelector.html">{@code UiSelector}</a>: |
| 506 | Represents a query for one or more target UI elements on a device. |
| 507 | </li> |
| 508 | |
| 509 | <li><a href="{@docRoot}reference/android/support/test/uiautomator/Configurator.html">{@code Configurator}</a>: |
| 510 | Allows you to set key parameters for running UI Automator tests. |
| 511 | </li> |
| 512 | </ul> |
| 513 | |
| 514 | <p> |
| 515 | For example, the following code shows how you can write a test script that brings up the |
| 516 | default app launcher in the device: |
| 517 | </p> |
| 518 | |
| 519 | <pre> |
| 520 | // Initialize UiDevice instance |
| 521 | mDevice = UiDevice.getInstance(getInstrumentation()); |
| 522 | |
| 523 | // Perform a short press on the HOME button |
| 524 | mDevice().pressHome(); |
| 525 | |
| 526 | // Bring up the default launcher by searching for |
| 527 | // a UI component that matches the content-description for the launcher button |
| 528 | UiObject allAppsButton = mDevice |
| 529 | .findObject(new UiSelector().description("Apps")); |
| 530 | |
| 531 | // Perform a click on the button to bring up the launcher |
| 532 | allAppsButton.clickAndWaitForNewWindow();</pre> |
| 533 | |
| 534 | <p> |
| 535 | To learn more about using UI Automator, see the |
Quddus Chong | 7639e73 | 2015-03-05 13:16:24 -0800 | [diff] [blame] | 536 | <a href="{@docRoot}reference/android/support/test/package-summary.html">API reference</a> and |
| 537 | <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html"> |
| 538 | Testing UI for Multiple Apps</a> training. |
Quddus Chong | 489218c | 2015-02-26 16:38:46 -0800 | [diff] [blame] | 539 | </p> |
| 540 | |
| 541 | <h2 id="setup"> |
| 542 | Testing Support Library Setup |
| 543 | </h2> |
| 544 | |
| 545 | <p> |
| 546 | The Android Testing Support Library package is included with the latest version of the |
| 547 | Android Support Repository, which you can obtain as a supplemental download through the |
| 548 | Android SDK Manager. |
| 549 | </p> |
| 550 | |
| 551 | <p> |
| 552 | To download the Android Support Repository through the SDK Manager: |
| 553 | </p> |
| 554 | |
| 555 | <ol> |
| 556 | <li>Start the <a href="{@docRoot}tools/help/sdk-manager.html">Android SDK Manager</a>. |
| 557 | </li> |
| 558 | |
| 559 | <li>In the SDK Manager window, scroll to the end of the <i>Packages</i> list, find the |
| 560 | <em>Extras</em> folder and, if necessary, expand to show its contents. |
| 561 | </li> |
| 562 | |
| 563 | <li>Select the <strong>Android Support Repository</strong> item. |
| 564 | </li> |
| 565 | |
| 566 | <li>Click the <strong>Install packages...</strong> button. |
| 567 | </li> |
| 568 | </ol> |
| 569 | |
| 570 | <p> |
| 571 | After downloading, the tool installs the Support Repository files to your existing Android |
| 572 | SDK directory. The library files are located in the following subdirectory of your SDK: |
| 573 | {@code <sdk>/extras/android/m2repository} directory. |
| 574 | </p> |
| 575 | |
| 576 | <p> |
| 577 | The Android Testing Support Library classes are located under the |
| 578 | {@code android.support.test} package. |
| 579 | </p> |
| 580 | |
| 581 | <p> |
| 582 | To use the Android Testing Support Library in your Gradle project, add these dependencies in |
| 583 | your {@code build.gradle} file: |
| 584 | </p> |
| 585 | |
| 586 | <pre> |
| 587 | dependencies { |
Quddus Chong | 900831f | 2015-04-17 15:01:16 -0700 | [diff] [blame] | 588 | androidTestCompile 'com.android.support.test:runner:0.2' |
| 589 | // Set this dependency to use JUnit 4 rules |
| 590 | androidTestCompile 'com.android.support.test:rules:0.2' |
Quddus Chong | 489218c | 2015-02-26 16:38:46 -0800 | [diff] [blame] | 591 | // Set this dependency to build and run Espresso tests |
Quddus Chong | 900831f | 2015-04-17 15:01:16 -0700 | [diff] [blame] | 592 | androidTestCompile 'com.android.support.test.espresso:espresso-core:2.1' |
Quddus Chong | 489218c | 2015-02-26 16:38:46 -0800 | [diff] [blame] | 593 | // Set this dependency to build and run UI Automator tests |
Quddus Chong | 900831f | 2015-04-17 15:01:16 -0700 | [diff] [blame] | 594 | androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.0' |
Quddus Chong | 489218c | 2015-02-26 16:38:46 -0800 | [diff] [blame] | 595 | }</pre> |
| 596 | |
| 597 | <p>To set |
| 598 | <a href="{@docRoot}reference/android/support/test/runner/AndroidJUnitRunner.html">{@code AndroidJUnitRunner}</a> |
| 599 | as the default test instrumentation runner in your Gradle project, specify this dependency in |
| 600 | your {@code build.gradle} file:</p> |
| 601 | |
| 602 | <pre> |
| 603 | android { |
| 604 | defaultConfig { |
| 605 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" |
| 606 | } |
| 607 | }</pre> |
| 608 | |
| 609 | <p> |
| 610 | It is strongly recommended that you use the Android Testing Support Library together with the |
| 611 | Android Studio IDE. Android Studio offers capabilities that support test |
| 612 | development, such as: |
| 613 | </p> |
| 614 | |
| 615 | <ul> |
| 616 | <li>Flexible Gradle-based build system that supports dependency management for your test code |
| 617 | </li> |
| 618 | |
| 619 | <li>Single project structure to contain your unit and instrumented test code together with |
| 620 | your app source code |
| 621 | </li> |
| 622 | |
| 623 | <li>Support for deploying and running tests on virtual or physical devices, from a |
| 624 | command line or graphical user interface |
| 625 | </li> |
| 626 | </ul> |
| 627 | |
| 628 | <p> |
| 629 | For more information about Android Studio and to download it, see |
| 630 | <a href="{@docRoot}sdk/index.html">Download Android Studio and SDK Tools</a>. |
| 631 | </p> |