Ejecute pruebas instrumentales en Firebase Test Lab. Parte 1: proyecto iOS

Ejecute pruebas instrumentales en Firebase Test Lab. Parte 1: proyecto iOS

Mi nombre es Dmitry, trabajo como probador en una empresa. Ciencia MEL. Más recientemente, terminé de tratar con una característica relativamente nueva de Laboratorio de pruebas de Firebase - a saber, con pruebas instrumentales de aplicaciones iOS utilizando el marco de prueba nativo XCUITest.

Antes de eso, ya probé Firebase Test Lab para Android y me gustó mucho todo, así que decidí intentar poner la infraestructura de prueba de iOS del proyecto en los mismos rieles. Tuve que buscar mucho en Google y no todo funcionó a la primera, así que decidí escribir un artículo de tutorial para aquellos que aún tienen que hacerlo.

Por lo tanto, si tiene pruebas de interfaz de usuario en un proyecto de iOS, ya puede intentar ejecutarlas en dispositivos reales hoy, proporcionadas amablemente por Good Corporation. Interesado - bienvenido bajo cat.

En la historia, decidí basarme en algunos datos de origen: un repositorio privado en GitHub y el sistema de compilación CircleCI. El nombre de la aplicación es AmazingApp, el ID del paquete es com.company.amazingapp. Cito estos datos inmediatamente, para reducir la confusión posterior.

Si implementó ciertas soluciones en su proyecto de manera diferente, comparta su experiencia en los comentarios.

1. Las pruebas en sí

Cree una nueva rama de proyecto para las pruebas de IU:

$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”

Abramos el proyecto en XCode y creemos un nuevo destino con pruebas de interfaz de usuario [XCode -> Archivo -> Nuevo -> Destino -> Paquete de prueba de iOS], asígnele el nombre revelador AmazingAppUITests.

Ejecute pruebas instrumentales en Firebase Test Lab. Parte 1: proyecto iOS

Vaya a la sección Fases de compilación del destino creado y verifique las dependencias de destino: AmazingApp, en Fuentes de compilación: AmazingAppUITests.swift.

Es una buena práctica separar las diversas opciones de compilación en Esquemas separados. Creamos un esquema para nuestras pruebas de UI [XCode -> Producto -> Esquema -> Nuevo esquema] y le damos el mismo nombre: AmazingAppUITests.

La compilación del esquema creado debe incluir el objetivo de la aplicación principal: pruebas de IU de AmazingApp y Target: AmazingAppUITests: ver captura de pantalla

Ejecute pruebas instrumentales en Firebase Test Lab. Parte 1: proyecto iOS

A continuación, creamos una nueva configuración de compilación para las pruebas de IU. En Xcode, haga clic en el archivo del proyecto, vaya a la sección Información. Haga clic en el “+” y cree una nueva configuración, por ejemplo XCtest. Necesitaremos esto en el futuro para evitar bailar con una pandereta cuando se trata de la firma de código.

Ejecute pruebas instrumentales en Firebase Test Lab. Parte 1: proyecto iOS

Hay al menos tres objetivos en su proyecto: la aplicación principal, las pruebas unitarias (hay algunas, ¿verdad?) y la IU de destino de las pruebas que creamos.

Vaya a Target AmazingApp, pestaña Configuración de compilación, sección Identidad de firma de código. Para la configuración de XCtest, seleccione iOS Developer. En la sección Estilo de firma de código, seleccione Manual. Todavía no hemos generado un perfil de aprovisionamiento, pero definitivamente volveremos a él un poco más tarde.

Para Target AmazingAppUITests, hacemos lo mismo, pero ingresamos com.company.amazingappuitests en la columna Product Bundle Identifier.

2. Configuración de un proyecto en el Programa para desarrolladores de Apple

Vamos a la página del Programa de desarrolladores de Apple, vamos a la sección Certificados, identificadores y perfiles y luego a la columna ID de la aplicación del elemento Identificadores. Cree una nueva ID de aplicación llamada AmazingAppUITests y bundleID com.company.amazingappuitests.

Ejecute pruebas instrumentales en Firebase Test Lab. Parte 1: proyecto iOS

Ahora tenemos la oportunidad de firmar nuestras pruebas con un certificado separado, pero... El procedimiento de compilación para las pruebas implica compilar la aplicación en sí y compilar el ejecutor de pruebas. En consecuencia, nos enfrentamos al problema de firmar dos ID de paquete con un perfil de aprovisionamiento. Afortunadamente, existe una solución simple y elegante: ID de aplicación comodín. Repetimos el procedimiento para crear una nueva ID de aplicación, pero en lugar de una ID de aplicación explícita, seleccione ID de aplicación comodín como en la captura de pantalla.

Ejecute pruebas instrumentales en Firebase Test Lab. Parte 1: proyecto iOS

En este punto, hemos terminado con developer.apple.com, pero no minimizaremos la ventana del navegador. Vamos a sitio con documentación en Fastlane y lea sobre la utilidad Match de cabo a rabo.

Un lector atento ha notado que para usar esta utilidad, necesitamos un repositorio privado y una cuenta que tenga acceso tanto al Programa de Desarrolladores de Apple como a Github. Creamos (si de repente no existe tal cosa) una cuenta de la forma [email protected], cree una contraseña segura, regístrela en developer.apple.com y asígnela como administrador del proyecto. A continuación, dé a su cuenta acceso al repositorio de github de su empresa y cree un nuevo repositorio privado con un nombre como AmazingAppMatch.

3. Configuración de Fastlane y la utilidad de coincidencia

Abra la terminal, vaya a la carpeta con el proyecto e inicialice fastlane como se indica en manual oficial. Después de ingresar el comando

$ fastlane init

se le pedirá que seleccione las configuraciones de uso disponibles. Seleccionamos el cuarto elemento: configuración manual del proyecto.

Ejecute pruebas instrumentales en Firebase Test Lab. Parte 1: proyecto iOS

Ha aparecido un nuevo directorio fastlane en el proyecto, en el que hay dos archivos: Appfile y Fastfile. En pocas palabras, en Appfile almacenamos datos de servicio y en Fastfile escribimos trabajos, en terminología Fastlane llamados carriles. Recomiendo leer la documentación oficial: tiempo, два.

Abra Appfile en su editor de texto favorito y llévelo al siguiente formulario:

app_identifier "com.company.amazingapp"       # Bundle ID
apple_dev_portal_id "[email protected]"  # Созданный инфраструктурный аккаунт, имеющий право на редактирование iOS проекта в Apple Developer Program.
team_id "LSDY3IFJAY9" # Your Developer Portal Team ID

Volvemos a la terminal y, según el manual oficial, comenzamos a configurar el partido.

$ fastlane match init
$ fastlane match development

A continuación, ingrese los datos solicitados: repositorio, cuenta, contraseña, etc.

Importante: la primera vez que ejecute la utilidad de coincidencia, le pedirá que ingrese una contraseña para descifrar el repositorio. Es muy importante guardar esta contraseña, ¡la necesitaremos en la etapa de configuración del servidor CI!

Ha aparecido un nuevo archivo en la carpeta fastlane: Matchfile. Ábralo en su editor de texto favorito y llévelo al formulario:

git_url("https://github.com/YourCompany/AmazingAppMatch") #Созданный приватный репозиторий для хранения сертификатов и профайлов.
type("development") # The default type, can be: appstore, adhoc, enterprise or development
app_identifier("com.company.amazingapp")
username("[email protected]") # Your Infrastructure account Apple Developer Portal username

Lo completamos de esta manera si queremos usar Match en el futuro para firmar compilaciones para cargarlas en Crashlytics y/o AppStore, es decir, para firmar el ID de paquete de su aplicación.

Pero, como recordamos, creamos una identificación comodín especial para firmar la compilación de prueba. Por lo tanto, abra Fastfile e ingrese un nuevo carril:

lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"  # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
    )

end

Guardar, entrar en la terminal

fastlane testing_build_for_firebase

y vea cómo fastlane creó un nuevo certificado y lo colocó en el repositorio. ¡Excelente!

Abra XCode. Ahora tenemos el perfil de aprovisionamiento requerido del tipo Match Development com.company.*, que debe especificarse en la sección Perfil de aprovisionamiento para los objetivos AmazingApp y AmazingAppUITests.

Ejecute pruebas instrumentales en Firebase Test Lab. Parte 1: proyecto iOS

Queda por añadir carril para construir pruebas. Vamos a repositorio proyecto de complemento fastlane que facilita la configuración de la exportación a Firebase Test Lab y sigue las instrucciones.

Copie y pegue del ejemplo original para que nuestro carril testing_build_for_firebase termine luciendo así:


 lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"
    )

    scan(
      scheme: 'AmazingAppUITests',      # UI Test scheme
      clean: true,                        # Recommended: This would ensure the build would not include unnecessary files
      skip_detect_devices: true,          # Required
      build_for_testing: true,            # Required
      sdk: 'iphoneos',                    # Required
      should_zip_build_products: true,     # Must be true to set the correct format for Firebase Test Lab
    )

    firebase_test_lab_ios_xctest(
      gcp_project: 'AmazingAppUITests', # Your Google Cloud project name (к этой строчке вернемся позже)
      devices: [                          # Device(s) to run tests on
        {
          ios_model_id: 'iphonex',        # Device model ID, see gcloud command above
          ios_version_id: '12.0',         # iOS version ID, see gcloud command above
          locale: 'en_US',                # Optional: default to en_US if not set
          orientation: 'portrait'         # Optional: default to portrait if not set
        }
      ]
    )

  end

Para obtener información completa sobre cómo configurar fastlane en CircleCI, recomiendo leer la documentación oficial veces два.

No olvide agregar una nueva tarea a nuestro config.yml:

build-for-firebase-test-lab:
   macos:
     xcode: "10.1.0"   
   working_directory: ~/project
   shell: /bin/bash --login -o pipefail
   steps:
     - checkout
     - attach_workspace:
         at: ~/project
     - run: sudo bundle install     # обновляем зависимости
     - run:
         name: install gcloud-sdk   # на mac машину необходимо установить gcloud
         command: |
           ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null ; brew install caskroom/cask/brew-cask 2> /dev/null
           brew cask install google-cloud-sdk
     - run:
         name: build app for testing
         command: fastlane testing_build_for_firebase  # запускаем lane сборки и отправки в firebase

4. ¿Qué pasa con nuestro banco de pruebas? Configuración de base de fuego.

Procedamos, de hecho, a lo que se escribió el artículo.

Es posible que su aplicación use Firebase en un plan gratuito o que no use Firebase en absoluto. No hay absolutamente ninguna diferencia fundamental, porque para las necesidades de prueba podemos crear un proyecto separado con un año de uso gratuito (genial, ¿eh?)

Iniciamos sesión en nuestra cuenta de infraestructura (o cualquier otra, no importa), y vamos a página de la consola de base de fuego. Cree un nuevo proyecto llamado AmazingAppUITests.

Importante: En el paso anterior, en Fastfile en el carril firebase_test_lab_ios_xctest, el parámetro gcp_project debe coincidir con el nombre del proyecto.

Ejecute pruebas instrumentales en Firebase Test Lab. Parte 1: proyecto iOS

La configuración predeterminada nos conviene muy bien.

No cerramos la pestaña, nos registramos bajo la misma cuenta en gcloud es una medida necesaria, ya que la comunicación con Firebase se realiza a través de la interfaz de gcloud console.

Google está regalando $300 por un año, lo que en el contexto de realizar autotests equivale a un año de uso gratuito del servicio. Ingresamos los datos de pago, esperamos la cancelación de prueba de $ 1 y obtenemos $ 300 en la cuenta. Después de un año, el proyecto se transferirá automáticamente a un plan de tarifa libre, por lo que no debe preocuparse por la posible pérdida de dinero.

Volvamos a la pestaña con el proyecto Firebase y transfiéralo al plan de tarifas Blaze; ahora tenemos algo que pagar si se excede el límite.

En la interfaz de gcloud, seleccione nuestro proyecto de Firebase, seleccione el elemento del menú principal "Catálogo" y agregue la API de pruebas en la nube y la API de resultados de herramientas en la nube.

Ejecute pruebas instrumentales en Firebase Test Lab. Parte 1: proyecto iOS

Luego vaya al elemento de menú "IAM y administración" -> Cuentas de servicio -> Crear una cuenta de servicio. Otorga permiso para editar el proyecto.

Ejecute pruebas instrumentales en Firebase Test Lab. Parte 1: proyecto iOS

Crear una clave API en formato JSON

Ejecute pruebas instrumentales en Firebase Test Lab. Parte 1: proyecto iOS

Necesitaremos el JSON descargado un poco más tarde, pero por ahora consideraremos que la configuración del laboratorio de pruebas está completa.

5. Configuración de CircleCI

Se está gestando una pregunta razonable: ¿qué hacer con las contraseñas? Para mantener seguras nuestras contraseñas y otros datos confidenciales, el mecanismo de variables de entorno de nuestra máquina de compilación nos ayudará. En la configuración del proyecto CircleCI, seleccione Variables de entorno

Ejecute pruebas instrumentales en Firebase Test Lab. Parte 1: proyecto iOS
Y establece las siguientes variables:

  • clave: GOOGLE_APPLICATION_CREDENTIALS
    valor: contenido del archivo json de clave de cuenta de servicio de gcloud
  • clave: COINCIDIR_CONTRASEÑA
    valor: contraseña para descifrar el repositorio de github con certificados
  • clave: FASTLANE_PASSWORD
    valor: contraseña de la cuenta de la infraestructura del portal de desarrolladores de Apple

Guardamos los cambios, creamos un PR y lo enviamos a nuestro líder de equipo para su revisión.

resultados

Como resultado de estas sencillas manipulaciones, obtuvimos un buen soporte de trabajo estable con la capacidad de grabar video en la pantalla del dispositivo en el momento de la prueba. En el caso de prueba, especifiqué el modelo de dispositivo iPhone X, pero la granja ofrece una rica selección de una combinación de diferentes modelos y versiones de iOS.

La segunda parte estará dedicada a configurar Firebase Test Lab para un proyecto de Android paso a paso.

Fuente: habr.com

Añadir un comentario