Skip to content

Most visited

Recently visited

navigation

Biblioteca de compatibilidad de pruebas

La biblioteca de compatibilidad de pruebas de Android proporciona un amplio framework para probar apps de Android. Esta biblioteca proporciona un conjunto de API que te permiten crear y ejecutar rápidamente código de pruebas para tus app, incluidas las de JUnit 4 e interfaz de usuario (IU) funcional. Puedes ejecutar pruebas creadas con estas API desde el Android Studio IDE o la línea de comandos.

La biblioteca de compatibilidad de pruebas de Android se encuentra disponible a través de Android SDK Manager. Para obtener más información, consulta Configuración de la biblioteca de compatibilidad de pruebas

En esta página, se proporciona información sobre las herramientas se ofrecen en la biblioteca de compatibilidad de pruebas de Android, la forma de usarlas en tu entorno de pruebas y las versiones de bibliotecas.

Funciones de la biblioteca de compatibilidad de pruebas

En la biblioteca de compatibilidad de pruebas de Android se incluyen las siguientes herramientas de automatización de pruebas:

AndroidJUnitRunner

La clase AndroidJUnitRunner es un ejecutor de pruebas JUnit que te permite ejecutar las clases de pruebas de estilo de JUnit 3 o JUnit 4 en dispositivos Android, incluidos aquellos que usan los frameworks de pruebas Espresso e UI Automator. El ejecutor de pruebas maneja la carga de tu paquete de pruebas y la app a prueba con un dispositivo, que ejecuta tus pruebas e informa los resultados de estas. Esta clase reemplaza la clase InstrumentationTestRunner, que solo admite las pruebas JUnit 3.

Dentro de las funciones principales de este ejecutor de pruebas se incluyen las siguientes:

Se requiere Android 2.2 (nivel de API 8) o una versión posterior.

Compatibilidad con JUnit

El ejecutor de pruebas es compatible con tus pruebas Junit 3 y Junit 4 (hasta Junit 4.10). Sin embargo, debes evitar combinar código de prueba Junit 3 y Junit 4 en el mismo paquete, ya que esto puede ocasionar resultados inesperados. Si creas una clase de prueba instrumentada JUnit 4 para que se ejecute en un dispositivo o emulador, tu clase de prueba debe contener un prefijo con la anotación @RunWith(AndroidJUnit4.class).

En el siguiente fragmento de código se muestra la manera en que puedes escribir una prueba Junit 4 instrumentada para validar el funcionamiento correcto de la operación add en la clase CalculatorActivity.

import android.support.test.runner.AndroidJUnit4;
import android.support.test.runner.AndroidJUnitRunner;
import android.test.ActivityInstrumentationTestCase2;

@RunWith(AndroidJUnit4.class)
public class CalculatorInstrumentationTest
        extends ActivityInstrumentationTestCase2<CalculatorActivity> {

    @Before
    public void setUp() throws Exception {
        super.setUp();

        // Injecting the Instrumentation instance is required
        // for your test to run with AndroidJUnitRunner.
        injectInstrumentation(InstrumentationRegistry.getInstrumentation());
        mActivity = getActivity();
    }

    @Test
    public void typeOperandsAndPerformAddOperation() {
        // Call the CalculatorActivity add() method and pass in some operand values, then
        // check that the expected value is returned.
    }

    @After
    public void tearDown() throws Exception {
        super.tearDown();
    }
}

Acceso a la información sobre la instrumentación

Puedes usar la clase InstrumentationRegistry para acceder a la información relacionada con la ejecución de tu prueba. En esta clase se incluyen el objeto Instrumentation, el objeto de la app de destino Context, el objeto de la app de prueba Context y los argumentos de la línea de comandos que se pasaron a tu prueba. Estos datos son útiles cuando escribes pruebas con el framework UI Automator o pruebas que tienen dependencias en los objetos Instrumentation o Context.

Filtrado de pruebas

En tus pruebas JUnit 4.x, puedes usar anotaciones para configurar la ejecución de la prueba. Esta función minimiza la necesidad de agregar un código estándar y condicional a tus pruebas. Además de las anotaciones estándares compatibles con Junit 4, el ejecutor de pruebas también es compatible con anotaciones específicas de Android. Se incluye lo siguiente:

Particionamiento de pruebas

El ejecutor de pruebas admite la división de un único conjunto de pruebas en varios fragmentos, de modo que puedas ejecutar como un grupo y de manera sencilla pruebas que pertenezcan al mismo fragmento, bajo la misma instancia de Instrumentation. Cada fragmento se identifica con un número de índice. Cuando se ejecutan pruebas, usa la opción -e numShards para especificar el número de fragmentos separados que se crearán y la opción -e shardIndex para especificar el fragmento que se ejecutará.

Por ejemplo, para dividir el conjunto de pruebas en 10 fragmentos y ejecutar solo las pruebas agrupadas en el segundo, usa el siguiente comando:

adb shell am instrument -w -e numShards 10 -e shardIndex 2

Para obtener más información acerca del uso de este ejecutor de pruebas, consulta la Referencia de API.

Espresso

El framework de pruebas Espresso proporciona un conjunto de API para compilar pruebas de IU a fin de probar los flujos de usuarios dentro de una app. Estas API te permiten escribir pruebas de IU automatizadas que son concisas y se ejecutan de modo confiable. Espresso puede usarse para escribir pruebas automatizadas de caja blanca, donde el código de prueba usa los detalles de código de implementación desde la app sometida a prueba.

Dentro de las funciones principales del framework de pruebas Espresso se incluyen:

Se requiere Android 2.2 (nivel de API 8) o una versión posterior.

Coincidencia de vistas

El método Espresso.onView() te permite ingresar un componente de IU en la app de destino e interactuar con él. El método acepta un argumento Matcher y busca la jerarquía de vistas para ubicar una instancia correspondiente View que cumpla con algunos criterios dados. Puedes definir mejor las búsquedas especificando esos criterios como:

Por ejemplo, para apuntar a un botón que tiene el valor de ID my_button, puedes especificar un comprobador como este:

onView(withId(R.id.my_button));

Si la búsqueda es exitosa, el método onView() muestra una referencia que te permite realizar acciones de usuario y probar aserciones con la vista de destino.

Coincidencia del adaptador

En un diseño AdapterView, el diseño se completa de manera dinámica con vistas secundarias en el tiempo de ejecución. Si la vista de destino se encuentra dentro de una subclase de diseño de AdapterView (como ListView o GridView), tal vez el método onView() no funcione debido a que solo un subconjunto de las vistas de diseño se puede cargar en la jerarquía de vistas actual.

Como alternativa, usa el método Espresso.onData() para ingresar un elemento en la vista de destino. El método Espresso.onData() muestra una referencia que te permite realizar acciones de usuario y probar aserciones con los elementos en una AdapterView.

Las Action API

Por lo general, se prueba una app realizando algunas interacciones de usuario frente a la interfaz de usuario de la app. Puedes automatizar estas acciones de modo sencillo en tu prueba usando la ViewActions API. Puedes realizar interacciones de IU como las siguientes:

Por ejemplo, para simular el ingreso de un valor de cadena y el accionamiento de un botón a fin de enviar el valor, puedes escribir una secuencia de comandos de pruebas automatizada como esta. Los métodos ViewInteraction.perform() y DataInteraction.perform() toman uno o más argumentos ViewAction y ejecutan las acciones en el orden proporcionado.

// Type text into an EditText view, then close the soft keyboard
onView(withId(R.id.editTextUserInput))
    .perform(typeText(STRING_TO_BE_TYPED), closeSoftKeyboard());

// Press the button to submit the text change
onView(withId(R.id.changeTextBt)).perform(click());

Sincronización del subproceso de la IU

Las pruebas en dispositivos de Android pueden fallar de modo aleatorio debido a problemas de sincronización. Se hace referencia a este problema de pruebas como fragilidad de pruebas. Antes de Espresso, el método alternativo consistía en insertar un tiempo de espera o suspensión suficientemente largo en una prueba o agregar código para seguir intentando realizar la operación fallida. El framework de pruebas de Espresso maneja la sincronización entre Instrumentation y el subproceso de IU; esto elimina la necesidad de los métodos alternativos de sincronización anteriores y garantiza que tus acciones y las aserciones de prueba se ejecuten de manera más confiable.

Para obtener más información acerca del uso de Espresso, consulta la Referencia de API y la capacitación sobre Pruebas de IU para una única app.

UI Automator

El framework de pruebas de UI Automator proporciona un conjunto de API para compilar pruebas de IU que realizan interacciones en las apps del usuario y las app del sistema. Las UI Automator API te permiten realizar operaciones como la apertura del menú Settings o el lanzador de apps en un dispositivo de prueba. El framework de UI Automator es adecuado para escribir pruebas automatizadas de caja negra, en las cuales el código de prueba no se basa en detalles de implementación internos de la app de destino.

Dentro de las funciones claves del framework de pruebas de UI Automator se incluye lo siguiente:

Se requiere Android 4.3 (nivel de API 18) o una versión posterior.

Visor de la UI Automator

La herramienta uiautomatorviewer proporciona una GUI conveniente para escanear y analizar los componentes de IU que actualmente se muestran en un dispositivo Android. Puedes usar esta herramienta para inspeccionar la jerarquía de diseño y ver las propiedades de componentes de IU visibles en primer plano en el dispositivo. Esta información te permite crear pruebas más específicas usando la UI Automator; por ejemplo, al crear un selector de IU que coincida con una propiedad visible específica.

La herramienta uiautomatorviewer se ubica en el directorio <android-sdk>/tools/.

Acceso al estado del dispositivo

El framework de prueba de UI Automator proporciona una clase UiDevice para acceder al dispositivo en el cual se ejecuta una app de destino y realizar operaciones en él. Puedes llamar a sus métodos para acceder a propiedades del dispositivo, como la orientación actual o el tamaño de pantalla. La clase UiDevice también te permite realizar acciones como:

Por ejemplo, para simular el accionamiento del botón de la página principal, llama al método UiDevice.pressHome().

Las UI Automator API

Las UI Automator API te permiten escribir pruebas sólidas sin necesidad de conocer detalles sobre la implementación de la app a la que apuntas. Puedes usar estas API para capturar y manipular los componentes de IU en varias apps:

Por ejemplo, en el siguiente código se muestra la manera de escribir una secuencia de comandos de prueba que activa el lanzador de apps predeterminado en el dispositivo:

// Initialize UiDevice instance
mDevice = UiDevice.getInstance(getInstrumentation());

// Perform a short press on the HOME button
mDevice.pressHome();

// Bring up the default launcher by searching for
// a UI component that matches the content-description for the launcher button
UiObject allAppsButton = mDevice
        .findObject(new UiSelector().description("Apps"));

// Perform a click on the button to bring up the launcher
allAppsButton.clickAndWaitForNewWindow();

Para obtener más información sobre el uso de UI Automator, consulta la Referencia de API y la capacitación sobre Pruebas de UI para varias apps.

Configuración de la biblioteca de compatibilidad de pruebas

El paquete de bibliotecas de compatibilidad de pruebas de Android se incluye con la última versión del repositorio de compatibilidad de Android, que puedes obtener como descarga complementaria a través de Android SDK Manager.

Para descargar el repositorio de compatibilidad de Android a través del SDK Manager:

  1. Inicia Android SDK Manager.
  2. En la ventana de este, desplázate hacia el final de la lista Packages, busca la carpeta de Extras y , si es necesario, expándela para mostrar su contenido.
  3. Selecciona el elemento Android Support Repository.
  4. Haz clic en el botón Install packages....

Después de la descarga, la herramienta instala los archivos del repositorio de compatibilidad en tu directorio de Android SDK existente. Los archivos de biblioteca se encuentran en el siguiente subdirectorio de tu SDK: <sdk>/extras/android/m2repository.

Las clases de bibliotecas de compatibilidad de pruebas de Android se encuentran en el paquete android.support.test.

Para usar la biblioteca de compatibilidad de pruebas de Android en tu proyecto de Gradle, agrega estas dependencias en tu archivo build.gradle:

dependencies {
  androidTestCompile 'com.android.support.test:runner:0.4'
  // Set this dependency to use JUnit 4 rules
  androidTestCompile 'com.android.support.test:rules:0.4'
  // Set this dependency to build and run Espresso tests
  androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
  // Set this dependency to build and run UI Automator tests
  androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
}

Para configurar AndroidJUnitRunner como ejecutor de instrumentación de pruebas predeterminado en tu proyecto de Gradle, especifica esta dependencia en tu archivo build.gradle:

android {
    defaultConfig {
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
}

Se recomienda que uses la biblioteca de compatibilidad de pruebas de Android con el IDE de Android Studio. Android Studio ofrece funciones que admiten el desarrollo de prueba; por ejemplo:

Para obtener más información sobre Android Studio y descargarlo, consulta Descargar Android Studio y SDK Tools.

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.